python
文章平均质量分 54
Flutter&Python&Test
遇到问题,解决问题,仅此而已.
展开
-
自动化测试监控大屏是否动态跳动
测试监控大屏是否自动刷新思路:一般成熟的自动化框架都可以截图保存,以playwright为例.计算两张截图的相似度有人已经实现了原创 2022-07-06 14:44:01 · 304 阅读 · 0 评论 -
几种截屏方式
1 调用win32 apiimport timeimport win32gui, win32ui, win32con, win32apidef window_capture(pic_name): hwnd = 1781894 # 窗口的编号,0号表示当前活跃窗口 # 根据窗口句柄获取窗口的设备上下文DC(Divice Context) hwndDC = win32gui.GetWindowDC(hwnd) print(hwndDC) # 根原创 2022-04-25 14:27:16 · 417 阅读 · 0 评论 -
本地Httprunner3使用locust的方式
如果想自己修改Httprunner3的源码,就意味着不能直接pip install httprunner,这样的话接口测试文件*_test.py就无法直接被locust复用.因为手动另外下载locust的话, 它有指定的格式,pytest文件是不符合这个格式的,还是得需要httprunner的源码来做转换.但是locust命令和startproject,hrun等命令不同,并没有被httprunner注册为参数,而是直接使用locusts -f xxx触发,不安装httprunner的话, locust原创 2021-09-15 20:02:12 · 277 阅读 · 0 评论 -
使用python脚本测试mqtt协议接口
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!tipsMQTT 消息采用二进制的编码格式,而不是 HTTP 协议那样的文本的表述方式。Client 在重复发送一个主题的消息时,可以从第二次开始,将主题名长度设置原创 2021-09-09 15:07:52 · 1729 阅读 · 0 评论 -
Httprunner3.x参数化示例
参数化文件代码import sysfrom pathlib import Pathimport pytestsys.path.insert(0, str(Path(__file__).parent.parent))from httprunner import HttpRunner, Config, Step, RunRequest, RunTestCasefrom httprunner import Parametersclass TestCaseBattle(HttpRunner)原创 2021-08-31 00:23:21 · 478 阅读 · 2 评论 -
HttpRunner3源码分析(4) - response.py,scaffold.py,parser.py
文件response.py处理响应报文格式.文件scaffold.py创建项目脚手架.文件parser.py各种解析方法.概要导图:源码优点总结||小技巧判断是否http地址 absolute_http_url_regexp = re.compile(r"^https?://", re.I)扩展阅读无...原创 2021-08-19 11:19:20 · 271 阅读 · 0 评论 -
HttpRunner3源码分析(3) - utils.py,client.py,loader.py
文件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,注册账号,填写组织就能获得原创 2021-08-18 10:38:21 · 316 阅读 · 0 评论 -
HttpRunner3源码分析(2) - compat.py,__init__.y,__main__.py,exceptions.py,models.py
文件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原创 2021-08-17 11:23:18 · 411 阅读 · 0 评论 -
Python命令行解析工具argparse使用Demo
codeimport argparsefrom rich import printparser = argparse.ArgumentParser(description="used for test")#^ 1.可选参数parser.add_argument('--version','-v',action='version',version='%(prog)s version:0.02',help='show the version ha')parser.add_argument('--原创 2021-08-17 10:09:34 · 226 阅读 · 0 评论 -
修改HttpRunner源码实例
如果要修改某个第三方库,那么就不能用pip install xxx, 而要找到源码clone下来。修改版httprunner使用步骤:下载新版本 源码激活虚拟环境 source venv/bin/activate下载依赖库文件 pip install -r requirements.txt执行测试python test.py run tt01/testcases之前标准httprunner run xxx等命令,全部改为python test.py hrun xxx执行,代码全部改完后,可原创 2021-08-03 23:33:42 · 504 阅读 · 0 评论 -
HttpRunner3源码分析(1) - cli.py
HttpRunner3和2的区别挺大,3的底层使用pytest,2的底层是unittest.在兼容json和yaml格式测试用例的前提下,作者更鼓励使用写代码来接入.具体可以看这篇文章分析对比入口文件cli.py命令行驱动的库很容易找到入口地址. 在这个文件内,主要有以下方法:main(), 使用argparse接收用户输入的命令,决定走哪个方法,关键代码输入httprunner后,接下来的单词: if sys.argv[1] == "run": sys.exit原创 2021-08-03 16:17:58 · 894 阅读 · 0 评论 -
多进程,多线程,协程
基本概念多进程unix/linux操作系统提供一个fork()系统调用,调用一次,返回两次,在调用时操作系统自动把当前进程(父进程)复制了一份(子进程),然后分别在父进程和子进程内返回.子进程返回0,父进程返回子进程id.子进程调用getppid()可以拿到父进程的ID。多进程的主进程一定要写在程序入口if __name__ =='__main__':内部多线程线程是操作系统直接支持的执行单元,高级语言通常都内置多线程的支持,Python也不例外,并且,Python的线程是真正的Posix原创 2021-07-23 15:55:56 · 224 阅读 · 0 评论 -
python 赋值, 浅拷贝,和深拷贝的区别
python 赋值, 浅拷贝,和深拷贝的区别赋值=是创建了对象的一个新引用,将原有的数据对象添加一个标签. 如果原有数据对象是不可变的(基础类型),当新的对象被创建时,就会开辟新的内存位置. 如果原有数据对象是可变的(list,dict等),就会在原有对象上进行修改.a=1b=aa=2b=? #1#---a={'a': 1}b=ab['b']=2a=? # {'a': 1, 'b': 2}浅拷贝copy.copy()只拷贝对象本身,不会拷贝其内部的嵌套对象. 复杂子对原创 2021-06-29 09:54:35 · 136 阅读 · 0 评论 -
selenium的挑战者 - playwright简析
简介playwright支持浏览器端的录制,生成自动化脚本,支持无头跑脚本速度快,基本是selenium的好几倍,且支持浏览器异步运行自动等待API,可拦截请求,随意mock官方API点击搭建环境安装库 pip install playwright安装浏览器 python -m playwright install录制脚本示例命令行输入python -m playwright codegen,会自动弹出一个浏览器和代码文本框, 在浏览器输入www.baidu原创 2021-06-21 16:46:24 · 9986 阅读 · 1 评论 -
使用Locust进行性能测试
开篇最近因为某些不可抗拒因素:-D,不能在公司使用Loadrunner,找了一下开源的性能测试工具,决定使用Locust.什么是LocustLocust是一种易于使用的、分布式的、用户负载测试工具。它的目的是对web站点(或其他系统)做性能测试,并确定系统能够处理多少并发用户。Locust可以在测试过程中,模拟大量Locust实例会访问目标网站。每个Locust(测试用户)的行为是由自己定义的,并且可以从一个web UI中实时监控着这些进程。服务端性能测试工具最核心的部分是压力发生器,..原创 2021-05-31 17:41:52 · 1354 阅读 · 2 评论 -
在python代码中调用adb命令关闭/启动app
查某个app的包名adb -s 8a8917c9 shell pm list packages | grep 'mhxy'关闭appdef close_app(): os.system("adb -s "+ str(iphone_id)+ " shell am force-stop com.netease.mhxyhtb")启动app启动app不仅需要知道app的包名,还需要知道app的类名.相关指令是os.system("adb -s "+ str(iphone_id)+ " she原创 2021-05-26 14:35:17 · 1313 阅读 · 0 评论 -
介绍一个在线fake平台JSONPlaceholder
开发应用程序或者测试的过程中,有时候需要获取某些json数据展示在界面,这里介绍一个非常好用的在线的json 测试数据生成平台 : jsonplaceholderJSONPlaceholder是一个免费的在线REST API,当需要一些假数据时,就可以调用它。JSONPlaceholder常用的六个方法1. /posts , 获取100个json格式数据请求地址: https://jsonplaceholder.typicode.com/posts代码示例import requestsde原创 2021-05-25 08:50:30 · 937 阅读 · 0 评论 -
软件测试用例设计之Pairwise算法
Pairwise算法简介Pairwise是L. L. Thurstone(29 May1887 – 30 September 1955)在1927年首先提出来的。他是美国的一位心理统计学家。Pairwise也正是基于数学统计和对传统的正交分析法进行优化后得到的产物。测试过程中,对于多参数参数多值的情况进行测试用例组织,把每个参数的所有值分别和其他参数的值做一个全量组合,就是正交分析法, 优点是测试用例覆盖率100%,缺点测试用例数量庞大,执行用例消耗的人工巨大。Pairwise (结对)算法源于对传统原创 2021-05-21 10:36:59 · 6405 阅读 · 1 评论 -
APP接口自动化加密实战
在自动化测试中经常会遇到的一个痛点就是,报文传输加密.有一些系统,从安全的角度考虑,后端是无法解析明文的,必须收到的是密文然后解密,才能做下一步操作.在测试环境,有些后端改个参数,可以实现接收明文,但是也有一些系统,必须修改大量代码,才能实现接收明文的效果,而做自动化测试的一个原则之一便是 尽量不要因为做自动化而让开发修改代码 .今天以我司手机银行app为例, 讲解报文加密问题解决的方法.加密类型分析一般手机银行的APP加密可以分为: 登录密码加密, 报文传输加密, 支付密码加密.登录密码加原创 2021-05-19 16:07:21 · 1059 阅读 · 0 评论 -
使用excel在自动化测试平台批量生成用例示例
在自动化测试工作中,测试人员所花时间最多的地方就是编写自动化测试用例,而把自动化测试用例一条一条写入自动化平台更是耗时巨大,把机械重复的事情自动化,本来就是自动化测试人员的职责,那么这件重复而又繁琐的事情当然该用自动化的方式解决.分析公司自动化平台我司做接口自动化采用的是阿里云效平台,自己手动在平台录入一条接口自动化案例,通过charles抓包可以看到,客户端(浏览器)与服务端之间的通信报文是明文. 这就太好了,不需要去解决报文加密的问题.设计思路通过人工录入测试用例可以看到,此自动化测试平台每原创 2021-05-19 15:27:18 · 891 阅读 · 0 评论 -
使用自动化处理某手游四宫格拼图问题
今天玩游戏的时候碰到个四宫格的小游戏,想试试能不能通过自动化的方式自动完成。游戏本身逻辑很简单,就是四个小块拼成一个完整图案,但让它自动点击完成的话,这个思考的过程比较有意思。游戏图: 初始四个无顺的块。解决思路:玩到所有的图,保存下来,后面自动识别 – 基本上不现实,鬼知道有多少图 = =手动多玩几次,找到规律。通过多次拼图,可以发现,每个完整的图,最终结果都会存在于四宫格中间,也就是说,正确的图案会有如下规律:左上角小块: 左上角,右上角,左下角, 这三个地方肯定是天蓝色背景。右上原创 2021-05-19 09:39:16 · 736 阅读 · 1 评论 -
从0开始构建一个有服务APP
1. 创建服务器数据库登录服务器,确认是否装好了sqlite3,输入命令 sqlite3如果未安装,则安装sqlite3: apt-install sqlite3建立数据库: sqlite3 practiceServer.db检查是否成功 :sqlite> .databases main: /root/practiceServer.db建立数据表:CREATE TABLE TIKU(ID INTEGER PRIMARY KEY AUTOINCREMENT,TITLE原创 2021-05-17 14:16:20 · 297 阅读 · 0 评论 -
adb通过wifi连接手机
准备工作把手机通过数据线连接pc,执行命令:adb -s 18bcxxx tcpip 5555 ,其中18bcxxx是手机序列号,通过adb devices可以查到打开手机shell adb -s 18bcc735 shell,赋权限:chmod 775 /data/local/tmp/atx-agent启动atx-agent:/data/local/tmp/atx-agent server -d (添加-d表示在后台启动)接入操作把手机和pc连入同一个wifi命令行连接 adb原创 2021-05-14 11:46:50 · 920 阅读 · 0 评论 -
小米手机实时截屏的方法
之前使用minicap对安卓手机快速截屏的方法,对miui10以上的版本不支持. 小米手机miui10以上的版本可以通过javac.py实现快速截屏.操作方式下载Yosemite.apk 注意: 这里下载的`Yosemite.apk` 必须和电脑上adb版本一致. 否则会报错`stderr[adb server version (41) doesn't match this client (40); killing...`下载javacap.py电脑端下载airtest库 .原创 2021-05-14 10:34:57 · 743 阅读 · 0 评论 -
使用minicap对安卓手机快速截屏
简介minicap属于STF框架的一个工具,由STF团队自身开发,属于较为核心的一部分,minicap运行于android设备端,负责设备屏幕视频的实时采集并通过socket接口发送.minicap采集屏幕的原理很简单:通过ndk的截屏接口不停的截屏并通过socket接口实时发送,这样客户端便可以得到一序列的图片流,图片流合成后就成为视频.使用uiautomator2, 从截屏开始到存入电脑,大概需要1-2S.而minicap可以把时间减少到到ms级别.安装对应库pip3 install uia原创 2021-01-25 10:21:14 · 874 阅读 · 1 评论 -
使用python利用slack bot发送消息
用到的库地址安装: pip install slack_sdk在slack创建APP进入 https://api.slack.com/apps , create a new app在OAuth & Permissions 菜单, 给bot加入权限:Click the "Allow" button.在 https://api.slack.com/apps/xxx/app-home 设置app的名字然后可以在 OAuth Tokens for Your Team 看原创 2021-01-29 16:27:45 · 828 阅读 · 1 评论 -
windows10使用nginx启动web项目
启动安装nginx后,进入nginx根目录, cmd环境执行 start nginx.exe ,即可启动.进入 http://127.0.0.1/ 可以看到初始化页面.其他命令需要在nginx根目录运行.nginx.exe -s stop //停止nginxnginx.exe -s reload //重新加载nginxnginx.exe -s quit //退出nginx配置ngin原创 2020-12-25 16:01:11 · 867 阅读 · 0 评论 -
Python将RSA的.cer公钥转换成.pem格式
要用到chilkat库.下载地址import sysimport chilkat cert = chilkat.CkCert()success = cert.LoadFromFile("/Users/xxxxx/test.cer")if (success != True): print(cert.lastErrorText()) sys.exit()# pub...原创 2017-12-27 09:40:29 · 990 阅读 · 0 评论 -
linux定时清理文件脚本
脚本定时清理文件.方法如下:新建脚本 new_name.sh,清理文件命令如下:#!/bin/shfind /var/mqm/errors/ -name '*.py' -exec rm -rf {} \;如果有多个文件要清除,则*.py要加上单引号;\和;中间不能有空格,这里\是转义作用;给脚本加上权限: chmod +x new_name.sh打开定时任务: cr...原创 2017-09-26 09:21:40 · 123 阅读 · 0 评论 -
一些好用的方法
#生成随机数def gen_random_string(str_len): return ''.join( random.choice(string.ascii_letters + string.digits) for _ in range(str_len))#md5def gen_md5(*str_args): return hashlib.md5(""....原创 2017-12-21 16:38:10 · 78 阅读 · 0 评论 -
Python根据时间戳生成位随机数
#!/usr/bin/python#-*-coding:utf-8-*- import datetime; import random; for i in range (0,10): nowTime=datetime.datetime.now().strftime("%Y%m%d%H%M%S"); randomNum=random.randint(0,99);...原创 2017-12-15 15:23:57 · 955 阅读 · 0 评论 -
Python加密解密-AES
AES是对称加密,同一个密钥同时用来加密和解密.AES加密数据块分组长度必须为128比特,密钥长度可以是128比特、192比特、256比特中的任意一个(如果数据块及密钥长度不足时,会补齐).#示例from Crypto.Cipher import AESfrom Crypto import Randomkey = b'Sixteen byte key'iv = Random.new...原创 2017-12-25 10:50:20 · 143 阅读 · 0 评论 -
python3小技巧
flask返回json响应一般并不直接使用json模块的dumps()、load()等方法,因为Flask通过包装这些方法提供了更方便的jsonify()函数。借助jsonify()函数,仅需要传入数据或参数,它会对我们传入的参数进行序列化,转换成JSON字符串作为响应的主体,然后生成一个响应对象,并且设置正确的MIME类型。from flask import jsonify@app.ro...原创 2019-05-23 09:54:35 · 377 阅读 · 0 评论 -
定时执行python脚本
crontab -e:写入定时任务10 8 * * * 表示每天早上8点10执行此命令.后面的python3路径和脚本路径要写绝对路径.并且指定日志输出文件.10 8 * * * /usr/bin/python3 /home/gsky/ebank/everydayTaskGetTtkn2.py >/home/gsky/ebank/everyday.txt 2>&1 &a...原创 2020-06-02 09:47:33 · 642 阅读 · 0 评论 -
flask shell命令
flask routes: 查看程序中定义的所有路由原创 2020-05-25 17:16:19 · 260 阅读 · 0 评论 -
python使用redis
安装redis官网下载tar包 链接上传到linux服务器,并执行tar -zxvf redis-x.x.x..tar.gz进入解压后的目录 执行 make编译成功后,进入src文件夹,执行make install进行Redis安装启动redis进入redis根目录,,进入src文件夹,执行命令:./redis-server &(加上‘&’号使redis以后...原创 2020-05-26 15:30:22 · 86 阅读 · 0 评论 -
httprunner提取响应报文数组内的字段值
例子报文:{ "body": { "validateTime": 900, "systemTime": "2020049152836", "tokenList": [ { "value": "Q6QY123zyBKOco" } ] }, "head": { "retCode": "0000", "retMsg": "交易成功" } }要...原创 2020-06-19 15:43:00 · 778 阅读 · 1 评论 -
json.dumps不把中文转义的方式
使用json.dumps(user, ensure_ascii=False)user = {"id": 101, "name": "张三"}print(json.dumps(user)){"id": 101, "name": "\u5f20\u4e09"}print(json.dumps(user, ensure_ascii=False)){"id": 101, "name": "...原创 2020-10-17 11:28:56 · 1549 阅读 · 0 评论 -
Python库之argparse使用
argsparse是python的命令行解析的标准模块.下载地址: https://pypi.org/project/argparse/代码import argparseparser = argparse.ArgumentParser(description='命令行中传入一个数字')parser.add_argument("square", help="请输入一个数字", type=int)parser.add_argument(&qu原创 2020-09-14 16:17:26 · 193 阅读 · 0 评论 -
python实现Dijkstra’s algorithm
image.pnggraph = {} # 存储所有节点的所有邻居和前往邻居的开销graph["start"] = {}graph["start"]["a"] = 6graph["start"]["b"] = 2graph["a"] = {}graph["a"]["fin"] = 1graph["b"] = {}graph["b"]["a"] = 3graph["...原创 2018-07-20 11:07:23 · 146 阅读 · 0 评论