python接口自动化13-流量回放
目录
- FastTester: 快速生成测试用例进行测试
- 简介
- 流程图(设计思路)
- 快速开始
- 一、接口用例集合获取
- 方式一:[Fiddler](https://blog.csdn.net/qq_42675140/article/details/127349890 "Fiddler")
- 方式二:[mitmproxy](https://blog.csdn.net/qq_42675140/article/details/125128261 "mitmproxy")
- 结合以上两种方式
- 二、执行测试
- 方式1:流量回放,只回放API响应码为200
- 方式2:经过用例入库,执行db用例测试
- 三、后置处理器介绍:http_collect
- 1.Jsonpath 区分大小写
- 2.正则表达式
- 四、断言使用介绍:http_assert
- 1.Jsonpath 断言
- 2.正则表达式断言
- 五、变量引用
- 1.号码相关:
- 2.时间日期相关
- 3.名字相关:
- 4.地址相关
- 六、数据库config配置说明
- 1.账号环境配置
- 2.默认配置 (domain=default)
- 如有建议/疑问请联系我:https://blog.csdn.net/qq_42675140
FastTester: 快速生成测试用例进行测试
简介
利用日常功能测试(实际也调用API)通过代理获取到API的请求与响应信息,将这些请求信息进行流量回放/锲约测试或快速生成用例,
可通过人工进行修改参数化提取、变量引用、断言等形成API自动化测试用例!
项目地址: 看官~请记得给个star呗?
github
gitee
流程图(设计思路)
~_~ 不会画太粗糙了
快速开始
1.clone
github:git clone https://github.com/git-gsxl/FastTester.git
gitee:git clone https://gitee.com/qq772262624/FastTester.git
2.pip install:pip install -r requirements.txt -i https://pypi.douban.com/simple
3、demo运行测试:
cd tests
pytest
# Windows 可直接运行:`startCollect.cmd`
一、接口用例集合获取
方式一:Fiddler
1、将项目下utils/httpCat/fiddler.txt
复制文本粘贴,FiddlerScript
2、更改为符合自己业务领域配置,是项目绝对路径app
目录,注意要用两个扛\\
方式二:mitmproxy
1、将项目下utils/httpCat/config.ini
过滤域名改为自己需要配置的域名以及业务领域
结合以上两种方式
1、你会得到:xxx.txt 文件
2、如需要用例入库,则执行命令行:
cd test
pytest --red_txt=true
另外可能需要进行数据库连接配置model/dbBase.py
,默认为sqlite
二、执行测试
命令行参数说明(部分可在pytest.ini下默认配置),与pytest框架一致,并且新增以下参数:
–env:查询业务领域=ppl及环境=test的用例
如:--env=ppl,test
–param:附加将version参数替换为1或追加
如:--param={\"version\":\"1\"}
–file:读取app目录下所有txt文件进行流量回放,详细使用看流量回放
如:--file=true
–red_txt:读取txt文件进行用例入库
如:--red_txt=true
–init:db表结构初始化,一般不需要用到
如:--init=true
–key:企微或钉钉群推送的key
如:--key=xxxx
方式1:流量回放,只回放API响应码为200
cd tests1)方式1:默认为app目录下全部txt文件(以下2-3不存在文件时亦是):pytest --file=12)方式2:指定app目录下的文件:pytest --file=fiddler_2022-7-31.txt3)方式3:绝对路径指定文件(注意win下需要\\):pytest --file=E:\\fiddler_2022-7-31.txt4)方式4:相对路径指定文件:pytest --file=./fiddler_2022-7-31.txt
方式2:经过用例入库,执行db用例测试
cd tests
pytest test_playback.py --env=domain,env --param={\"version\":\"1\"}
ps:Windows可以默认ini参数直接一键运行并生成报告:testStart.cmd
(支持替换变量,存储变量,引用变量,响应断言)
三、后置处理器介绍:http_collect
参数提取器,默认是取第1个值(支持提取response与headers接口的返参)
Jsonpath语法请参考:https://goessner.net/articles/JsonPath
1.Jsonpath 区分大小写
1)获取key的值:['key'] ----> {'key':'value'}
2)获取key的值并重新命名:[{'key':'name'}] ----> {'name':'value'}
3)获取key的值并指定取第n个:['key':n] ----> {'key':values[n]}
4)获取key的值并重新命名及指定取第n个:['key':['name',n]] ----> {'name':values[n]}
5)原生Jsonpath语法:['$.data.key'] ----> {'key':'value'}
6)原生Jsonpath语法并重新命名:[{'$.data.key':'name'}] ----> {'name':'value'}
7)原生Jsonpath语法并指定取第n个:[{'$.data.key':n}] ----> {'key':values[n]}
8)原生Jsonpath语法并重新命名及指定取第n个:[{'$.data.key':['name',n]}] ----> {'name':values[n]}
2.正则表达式
1)获取正则表达式的值并命名为env:[{'re':['env','http://(.+?)/']}] ----> {'env':'value'}
2)获取正则表达式的值并命名为env及取第n个值:[{'re':['env','http://(.+?)/', -1]}] ----> {'name':'value'}
四、断言使用介绍:http_assert
1.Jsonpath 断言
1.字符在里面:[“msgId”]
`实际为:assert "msgId" in response.text`
2.变量在里面:[“${msgId}”]
`实际为:assert "${msgId}" in response.text`
2.字符相等:[{“msgId”:“123456”}]
`实际为:assert 123456 == json_path(result.json(), 'msgId')`
3.字符在里面or其它:[{“msgId”:[“123456”,“in”]}] 注:in 可以是== != not in
assert 123456 in response.get('msgId')
4.长度:1 == len(response.get(‘msgId’)):[{“msgId”:[1,“len”]}]
assert 1 == len(response.get('msgId'))
2.正则表达式断言
1.直接写正则表达式即可,如:[{'re':'http://(.+?)/'}]
五、变量引用
使用本系统且遵循Faker语法直接引用:${Faker语法}
ppl_开头,为自定义生成数据方法
Faker 更多请查阅官方文档:https://faker.readthedocs.io/en/stable/locales/zh_CN.html#faker-providers-address
1.号码相关:
1)手机号:${phone_number}
18520149907
2)身份证号码:${ssn}
410622198603154708
2.时间日期相关
1)当前日期时间:${ppl_now_datetime}
2022-07-02 12:56:58
2)当前时间戳:${ppl_time}
1656737818
3)当前日期:${ppl_now_date}
2022-07-02
4)当前时间:${ppl_now_time}
12:56:58
5)过去7天的日期时间:${ppl_datetime(-7)}
2022-06-25 00:00:00
6)未来7天的日期时间:${ppl_datetime(7)}
2022-07-09 23:59:59
7)随机年-月-日:${date}
1996-03-20
8)随机(时:分:秒):${time}
04:52:23
9)未来的日期时间:${future_datetime(end_date=+7d)}
2022-07-07 16:01:23
10)过去的日期时间:${past_datetime(end_date=-7d)}
2022-06-29 13:29:20
3.名字相关:
1)姓名:${name}
王凯
2)姓名(女):${name_female}
戴丽丽
3)姓名(男):${name_male}
刘荣
4)姓:${last_name}
宋
5)名字:${first_name}
强
4.地址相关
1)地址:${address}
香港特别行政区大冶县上街钟街k座 664713
2)省:${province}
河北省
3)市:${city}
长春县
4)地区:${district}
白云
5)街道地址:${street_address}
武汉街D座
六、数据库config配置说明
默认使用sqlite
,一般只需要连接sqlite
更改1、账号环境配置
信息即可
1.账号环境配置
1) gray:默认就好,一般会使用如:AB测试模型使用,定制化区分环境2) Tester:登录获取token或cookie初始化,可配置多个登录信息,如下有两种例子:collects:表示后置处理器 collect (使用详细查看第三点),用例提取token或cookie作为登录态{"gray":"gray","Tester":[{"https://app-xxx.com":{"url":"api/user/login","json":{"mobile":18888888888,"Password":"mVs6NwvIFRgN0aaUo4KZOiW9QZWbKZjqVX1eW9Gr2s4rgZ5atS3ppY39ZlyE37Tb2/zo6YWJV6VJV="},"method":"POST","collects":["clienttoken"]}},{"https://web-xxx.com":{"url":"/api/index.php?r=data/login","data":"user=admin&password=4076f862096d1536b6cac6866e386655=","method":"POST","headers":{"content-Type":"application/x-www-form-urlencoded"},"collects":["ppl_cookie"]}}]}
2.默认配置 (domain=default)
1) filter_path:过滤path为列表的,如登录/退出登录接口2) filter_code:根据返回retCode字段,判断是否=0或='0',是则数据符合,否则跳过该数据3) re_list:一般不需要使用,如AB测试模型时,则根据业务情况配置从response(uri/body/header)中正则匹配4) db_pop:获取用例过滤:数据库字段转dict,去除非必要的字段,默认就好5) filter_headers:过滤不必要的headers,默认就好6) split_url_handle:path不需要特殊处理可默认,一般php接口可能需要处理,如下例子:"split_url_handle":{".php":"path + '?r=' + query.pop('r')"}表示:如果'.php'在path中,则运行path=eval("path+'?r='+query.pop('r')"{"filter_path":["/user/logout","/user/login"],"filter_code":{"retCode":[ 0, "0" ]},"re_list":[],"db_pop":["id","curl","response","_sa_instance_state","create_time","update_time"],"filter_headers":["content-length","accept-encoding","host","user-agent","accept","origin","referer","sec-ch-ua","connection","sec-fetch-dest","sec-fetch-mode","sec-fetch-site","pragma","accept-language","sec-ch-ua-mobile","sec-ch-ua-platform","postman-token","cache-control","x-requested-with","accept-encoding"],"split_url_handle":{}}
如有建议/疑问请联系我:https://blog.csdn.net/qq_42675140
python接口自动化13-流量回放相关推荐
- python接口自动化11-流量回放神器:mitmproxy(上)
简介: mitmproxy是一组工具,可为HTTP/1,HTTP/2和WebSockets提供交互式的,具有SSL/TLS功能的拦截代理. 官方文档:https://docs.mitmproxy.or ...
- python接口自动化12-流量回放神器:mitmproxy(下)
一.mitmproxy做扩展 比如接口用例信息收集,回放对比,安全测试都可以那么便可以通过:mitmdump -s xx.py 扩展可查阅中文文档:https://ptorch.com/docs/10 ...
- Python接口自动化之接口依赖
VOL 129 28 2020-05 今天距2021年216天 这是ITester软件测试小栈第129次推文 点击上方蓝字"ITester软件测试小栈"关注我,每周一.三.五早上 ...
- Python接口自动化之登录接口测试
VOL 117 29 2020-04 今天距2020年246天 这是ITester软件测试小栈第117次推文 点击上方蓝字"ITester软件测试小栈"关注我,每周一.三.五早上 ...
- Linux部署python接口自动化教程,基于centos7 python3
Linux部署python接口自动化教程 1.安装jenkins 2.安装插件和依赖 **安装allure插件(测试报告)** **配置allure依赖** 安装python3.x依赖环境 **安装p ...
- python接口自动化实战(框架)_python接口自动化框架实战
python接口测试的原理,就不解释了,百度一大堆. 先看目录,可能这个框架比较简单,但是麻雀虽小五脏俱全. 各个文件夹下的文件如下: 一.理清思路 我这个自动化框架要实现什么 1.从excel里面提 ...
- python接口自动化5-Json数据处理
前言 有些post的请求参数是json格式的,这个前面第二篇post请求里面提到过,需要导入json模块处理. 一般常见的接口返回数据也是json格式的,我们在做判断时候,往往只需要提取其中几个关键的 ...
- python接口自动化-参数化
原文地址https://www.cnblogs.com/yoyoketang/p/6891710.html python接口自动化 -参数关联(一)https://www.cnblogs.com/11 ...
- python接口自动化4-绕过验证码登录(cookie)
前言 有些登录的接口会有验证码:短信验证码,图形验证码等,这种登录的话验证码参数可以从后台获取的(或者查数据库最直接). 获取不到也没关系,可以通过添加cookie的方式绕过验证码. 一.抓登录coo ...
- python接口自动化关联参数_python接口自动化7-参数关联
前言 我们用自动化发帖之后,要想接着对这篇帖子操作,那就需要用参数关联了,发帖之后会有一个帖子的id,获取到这个id,继续操作传这个帖子id就可以了 (博客园的登录机制已经变了,不能用账号和密码登录了 ...
最新文章
- ubuntu10.0.4使用再生龙还原后在启动时不能正常启动
- 中国石油管道科技研究中心2014届应届毕业生招聘(软件工程师岗)
- pytorch Tensor的操作和Numpy之间的转化(三)
- LFDMM源码剖析(融入词向量的概率图模型)
- 更多核心、更大内存、更低成本 AMD皓龙6000欲成云计算基石
- notion知识库网站
- java dbaResult_资深DBA经验总结 Oracle数据库最佳实践 PDF 下载
- Windows与Linux配置jco3
- Python网络爬虫(2)- 爬虫翻译程序-含有道、金山、百度翻译
- 【nvidia】1.命令行方式安装nvidia显卡驱动
- 创业者的诗,远方和功不唐捐
- wkhtmltopdf(thead)分页问题
- 数据库修改用友U8账套
- mysql处理emoji表情_Mysql处理emoji表情
- 详解FC交换机基础知识
- python爬虫爬美女图片:“小甲鱼056节轮一只爬虫的自我修养4:OOXX” 最终更新2021.6.27日,更新后可用!!!
- Android 仿iphone提醒事项(一)
- win10系统开发环境搭建
- 如何手工制作html网站地图,提升网站收录率简单的方法是手工制作网站地图与工具生成网站地图两种...
- 单片机c语言ad与da转换实验报告,AD与DA转换实验18339.doc
热门文章
- 消费者人群画像-信用智能评分(风控模型竞赛经典案例)
- java dismiss_Android dialogFragment dismiss()报错
- 【技巧总结】理解XXE从基础到盲打
- linux创建虚拟目录意义,配置虚拟主机和虚拟目录
- java 多线程发送邮件_多线程实现发送邮件功能
- php选课实验成品_PHP基于B/S模式下的学生选课管理系统、源码分享
- 说明书丨亲和纯化驴抗绵羊IgG(H+L)二抗
- linux下列出绝对路径的最快捷的方法lls
- 431 Request Header Fields Too Large 解决
- Error: L6218E: Undefined symbol