<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[路漫漫其修远]]></title><description><![CDATA[]]></description><link>https://blog.csdn.net/MidSummer411</link><language>zh-cn</language><generator>https://blog.csdn.net/</generator><copyright><![CDATA[Copyright &copy; MidSummer411]]></copyright><item><title><![CDATA[playwright框架处理iframe类型页面点击]]></title><link>https://blog.csdn.net/MidSummer411/article/details/130622855</link><guid>https://blog.csdn.net/MidSummer411/article/details/130622855</guid><author>MidSummer411</author><pubDate>Thu, 11 May 2023 15:22:57 +0800</pubDate><description><![CDATA[因此，需要先使用 page.frame_locator () 或 locator.frame_locator () 方法来创建一个 FrameLocator 对象，它可以捕获检索 iframe 和定位 iframe 中元素的逻辑。然后，可以在 FrameLocator 对象上使用 get_by_text () 或其他定位器方法来找到并点击元素。iframe 是一个在页面中嵌入另一个页面的 HTML 实体。Playwright 只能访问特定上下文中的元素，而主页面和嵌入的 iframe 的上下文是不同的。]]></description><category></category></item><item><title><![CDATA[dart里的异步示例]]></title><link>https://blog.csdn.net/MidSummer411/article/details/128093509</link><guid>https://blog.csdn.net/MidSummer411/article/details/128093509</guid><author>MidSummer411</author><pubDate>Tue, 29 Nov 2022 10:44:31 +0800</pubDate><description><![CDATA[对比future和async/await]]></description><category></category></item><item><title><![CDATA[Flutter-RadioList控件示例]]></title><link>https://blog.csdn.net/MidSummer411/article/details/127816946</link><guid>https://blog.csdn.net/MidSummer411/article/details/127816946</guid><author>MidSummer411</author><pubDate>Sat, 12 Nov 2022 10:03:24 +0800</pubDate><description><![CDATA[【代码】Flutter-RadioList控件示例。]]></description><category></category></item><item><title><![CDATA[Flutter 3.X的Provider最简用法]]></title><link>https://blog.csdn.net/MidSummer411/article/details/126263358</link><guid>https://blog.csdn.net/MidSummer411/article/details/126263358</guid><author>MidSummer411</author><pubDate>Wed, 10 Aug 2022 12:04:24 +0800</pubDate><description><![CDATA[Flutter 3.X  Provider最简用法。]]></description><category></category></item><item><title><![CDATA[Flutter入门代码极简说明]]></title><link>https://blog.csdn.net/MidSummer411/article/details/125949705</link><guid>https://blog.csdn.net/MidSummer411/article/details/125949705</guid><author>MidSummer411</author><pubDate>Sat, 23 Jul 2022 16:48:19 +0800</pubDate><description><![CDATA[flutter入门脚本注释]]></description><category></category></item><item><title><![CDATA[自动化测试监控大屏是否动态跳动]]></title><link>https://blog.csdn.net/MidSummer411/article/details/125632071</link><guid>https://blog.csdn.net/MidSummer411/article/details/125632071</guid><author>MidSummer411</author><pubDate>Wed, 06 Jul 2022 14:44:01 +0800</pubDate><description><![CDATA[测试监控大屏是否自动刷新思路:一般成熟的自动化框架都可以截图保存,以playwright为例.

计算两张截图的相似度
有人已经实现了]]></description><category></category></item><item><title><![CDATA[几种截屏方式]]></title><link>https://blog.csdn.net/MidSummer411/article/details/124404138</link><guid>https://blog.csdn.net/MidSummer411/article/details/124404138</guid><author>MidSummer411</author><pubDate>Mon, 25 Apr 2022 14:27:16 +0800</pubDate><description><![CDATA[1 调用win32 api
import time
import win32gui, win32ui, win32con, win32api
def window_capture(pic_name):

    
    
    hwnd = 1781894 # 窗口的编号，0号表示当前活跃窗口
    # 根据窗口句柄获取窗口的设备上下文DC（Divice Context）
    hwndDC = win32gui.GetWindowDC(hwnd)
    print(hwndDC)
    # 根]]></description><category></category></item><item><title><![CDATA[BrupSuite的一些设置]]></title><link>https://blog.csdn.net/MidSummer411/article/details/123328926</link><guid>https://blog.csdn.net/MidSummer411/article/details/123328926</guid><author>MidSummer411</author><pubDate>Mon, 07 Mar 2022 14:03:35 +0800</pubDate><description><![CDATA[屏蔽Option请求
使用插件地址


报文里中文乱码解决方式

设置utf-8
设置字体,改成宋体或者幼圆



]]></description><category></category></item><item><title><![CDATA[一次CORS漏洞的手工验证]]></title><link>https://blog.csdn.net/MidSummer411/article/details/122324738</link><guid>https://blog.csdn.net/MidSummer411/article/details/122324738</guid><author>MidSummer411</author><pubDate>Wed, 05 Jan 2022 15:46:58 +0800</pubDate><description><![CDATA[给项目接口做安全扫描的时候,发现有个CORS漏洞:

但仅仅扫出来还不够,需要手工验证一下
手工验证方式
在正常的api请求处,headers加入"origin":"http://xx.xx.xx.xx", 如果接口正常返回了数据且headers里包含
access-control-allow-credentials : true
access-control-allow-origin : http://xx.xx.xx.xx

就说明这个接口确实存在CORS漏洞

poc代码
&lt;html&gt;
&]]></description><category></category></item><item><title><![CDATA[修复httprunner3 pytest-html报告中文乱码问题]]></title><link>https://blog.csdn.net/MidSummer411/article/details/121793433</link><guid>https://blog.csdn.net/MidSummer411/article/details/121793433</guid><author>MidSummer411</author><pubDate>Wed, 08 Dec 2021 15:55:13 +0800</pubDate><description><![CDATA[找到 X:\Python3.X\Lib\site-packages\pytest_html\plugin.py
修改此行代码:
class TestResult:
        def __init__(self, outcome, report, logfile, config):
            #self.test_id = report.nodeid.encode("utf-8").decode("unicode_escape")
            self.test_id = re]]></description><category></category></item><item><title><![CDATA[Flutter - 使用Provider进行状态管理]]></title><link>https://blog.csdn.net/MidSummer411/article/details/120716152</link><guid>https://blog.csdn.net/MidSummer411/article/details/120716152</guid><author>MidSummer411</author><pubDate>Tue, 12 Oct 2021 08:56:17 +0800</pubDate><description><![CDATA[定义Provider类: current_index_provider.dart
import 'package:flutter/material.dart';

class CurrentIndexProvider with ChangeNotifier {
  int currnetIndex = 0;
  changeindex(int newIndex){
    currnetIndex = newIndex;
    notifyListeners();
  }
}

在main中初始化prov]]></description><category></category></item><item><title><![CDATA[2021-Flutter调用相册上传图片(头像)]]></title><link>https://blog.csdn.net/MidSummer411/article/details/120467606</link><guid>https://blog.csdn.net/MidSummer411/article/details/120467606</guid><author>MidSummer411</author><pubDate>Sat, 25 Sep 2021 09:39:08 +0800</pubDate><description><![CDATA[添加权限
ios版本,在info.plist中添加,防止模拟器上使用相册和相机闪退
&lt;key&gt;NSCameraUsageDescription&lt;/key&gt;

&lt;string&gt;cameraDesciption&lt;/string&gt;

&lt;key&gt;NSPhotoLibraryUsageDescription&lt;/key&gt;

&lt;string&gt;photoLibraryDesciption&lt;/string&gt;


第三方库
  im]]></description><category></category></item><item><title><![CDATA[接口自动化 - 生成HttpRunner需要的数据驱动文件,接口的所有字段正反用例全覆盖]]></title><link>https://blog.csdn.net/MidSummer411/article/details/120388638</link><guid>https://blog.csdn.net/MidSummer411/article/details/120388638</guid><author>MidSummer411</author><pubDate>Mon, 20 Sep 2021 17:44:35 +0800</pubDate><description><![CDATA[由于HttpRunner是基于数据驱动的接口自动化框架,可以完美实现代码和数据分离,那么在写好接口报文后,自动化的效果直接取决于数据文件的全面性.
如果要完美实现一个接口的所有字段正反用例全量覆盖,手写肯定不合适, 但可以对照接口文档,先手写出下面的excel:
name=接口报文的字段名
value=该字段的正常用例
err=该字段的异常用例
null = 为空值

把用例简化成这个csv文件,测试用例评审时也更加一目了然,不用对着几十条大部分内容千篇一律的数据翻着演示给其他人看了.

接下来就是怎么把上]]></description><category></category></item><item><title><![CDATA[本地Httprunner3使用locust的方式]]></title><link>https://blog.csdn.net/MidSummer411/article/details/120315800</link><guid>https://blog.csdn.net/MidSummer411/article/details/120315800</guid><author>MidSummer411</author><pubDate>Wed, 15 Sep 2021 20:02:12 +0800</pubDate><description><![CDATA[如果想自己修改Httprunner3的源码,就意味着不能直接pip install httprunner,这样的话接口测试文件*_test.py就无法直接被locust复用.
因为手动另外下载locust的话, 它有指定的格式,pytest文件是不符合这个格式的,还是得需要httprunner的源码来做转换.
但是locust命令和startproject,hrun等命令不同,并没有被httprunner注册为参数,而是直接使用locusts -f xxx触发,不安装httprunner的话, locust]]></description><category></category></item><item><title><![CDATA[日志查询神器lnav使用指南]]></title><link>https://blog.csdn.net/MidSummer411/article/details/120102263</link><guid>https://blog.csdn.net/MidSummer411/article/details/120102263</guid><author>MidSummer411</author><pubDate>Sat, 11 Sep 2021 20:45:00 +0800</pubDate><description><![CDATA[安装
linux直接安装:  apt-get install lnav
安装包地址

命令
直接查看日志文件

lnav 1.log
lnav 1.log 2.log

直方图
运行 lnav 然后按 i 键切换到直方图视图。
白色的是 normal，黄色 warining，红色 error，很明确就看出哪个时间点有 warning 和 error
自动刷新
配合 filter-in 可以实现 tail -f rmb.log | grep --line-buffer ‘failed’ 的效果。
重现 bug]]></description><category></category></item><item><title><![CDATA[使用python脚本测试mqtt协议接口]]></title><link>https://blog.csdn.net/MidSummer411/article/details/120198260</link><guid>https://blog.csdn.net/MidSummer411/article/details/120198260</guid><author>MidSummer411</author><pubDate>Thu, 09 Sep 2021 15:07:52 +0800</pubDate><description><![CDATA[demo测试
订阅者 hbmqtt_sub --url mqtt://mqtt.eclipseprojects.io:1883 -t /geektime/iot
发布者 hbmqtt_pub --url mqtt://mqtt.eclipseprojects.io:1883 -t /geektime/iot -m Hello,World!
tips

MQTT 消息采用二进制的编码格式，而不是 HTTP 协议那样的文本的表述方式。
Client 在重复发送一个主题的消息时，可以从第二次开始，将主题名长度设置]]></description><category></category></item><item><title><![CDATA[Httprunner3.x参数化示例]]></title><link>https://blog.csdn.net/MidSummer411/article/details/120008369</link><guid>https://blog.csdn.net/MidSummer411/article/details/120008369</guid><author>MidSummer411</author><pubDate>Tue, 31 Aug 2021 00:23:21 +0800</pubDate><description><![CDATA[参数化文件

代码
import sys
from pathlib import Path
import pytest
sys.path.insert(0, str(Path(__file__).parent.parent))

from httprunner import HttpRunner, Config, Step, RunRequest, RunTestCase
from httprunner import Parameters


class TestCaseBattle(HttpRunner)]]></description><category></category></item><item><title><![CDATA[HttpRunner3源码分析(4) - response.py,scaffold.py,parser.py]]></title><link>https://blog.csdn.net/MidSummer411/article/details/119795099</link><guid>https://blog.csdn.net/MidSummer411/article/details/119795099</guid><author>MidSummer411</author><pubDate>Thu, 19 Aug 2021 11:19:20 +0800</pubDate><description><![CDATA[文件response.py
处理响应报文格式.
文件scaffold.py
创建项目脚手架.
文件parser.py
各种解析方法.

概要导图:

源码优点总结||小技巧

判断是否http地址 absolute_http_url_regexp = re.compile(r"^https?://", re.I)


扩展阅读
无

...]]></description><category></category></item><item><title><![CDATA[HttpRunner3源码分析(3) - utils.py,client.py,loader.py]]></title><link>https://blog.csdn.net/MidSummer411/article/details/119771907</link><guid>https://blog.csdn.net/MidSummer411/article/details/119771907</guid><author>MidSummer411</author><pubDate>Wed, 18 Aug 2021 10:38:21 +0800</pubDate><description><![CDATA[文件utils.py
一些工具类方法.
文件client.py
客户端相关方法,主要是封装 requests.Session.request,安全调用,输出log等,   给runner.py调用.
文件loader.py
各种导入文件的方法.

概要导图:

源码优点总结||小技巧

把字典的key转为小写: {key.lower(): value for key, value in origin_dict.items()}
Sentry用于监控错误，有支持Python的sdk，注册账号，填写组织就能获得]]></description><category></category></item><item><title><![CDATA[HttpRunner3源码分析(2) - compat.py,__init__.y,__main__.py,exceptions.py,models.py]]></title><link>https://blog.csdn.net/MidSummer411/article/details/119733979</link><guid>https://blog.csdn.net/MidSummer411/article/details/119733979</guid><author>MidSummer411</author><pubDate>Tue, 17 Aug 2021 11:23:18 +0800</pubDate><description><![CDATA[文件compat.py
提供各种处理兼容性的方法,包括让v2版本的用例能在v3版本继续运行的相关转换方法
文件__init__.py
定义多个内置属性
文件__main__.py
引入cli.py的main()方法并执行
概要导图:

源码优点总结||小技巧

使用dict.update()方法,将list转换为dict

    if isinstance(raw_variables, List):
        # [{"var1": 1}, {"var2": 2}]
        variable]]></description><category></category></item></channel></rss>