tep集成mitmproxy录制流量自动生成用例
使用
操作过程非常简单,流程如下:
①配置过滤域名
必须配置,不然会有很多无效流量造成数据冗余。
②启动代理
「示例」使用了反向代理,tep自带FastApi启动Mock服务:
「实际」使用正向代理,并手动配置代理。命令说明在
utils/mitm.py
文件中有:
③录制流量
「示例」通过Postman发起请求:
「实际」在网页上点点点。
自动生成用例
用例就在tests/mitm
实时生成好了,用例文件名为当前时间:
每录制一个请求,就能在测试用例中看到实时添加了一条测试步骤:
# 接口描述
# 数据
# 请求
response = request(
"{method}",
url="{url}",
headers={headers},
{body_grammar}
)
# 数据提取
# var = response.jmespath("expression")
# 断言
assert response.status_code < 400
录制完成以后,就可以再次编辑测试用例完善它。
原理
utils/mitm.py
源码如下:
#!/usr/bin/python
# encoding=utf-8
# mitmproxy录制流量自动生成用例
import os
import time
from mitmproxy import ctx
project_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
tests_dir = os.path.join(project_dir, "tests")
# tests/mitm
mitm_dir = os.path.join(tests_dir, "mitm")
if not os.path.exists(mitm_dir):
os.mkdir(mitm_dir)
# 当前时间作为文件名
filename = time.strftime("%Y%m%d_%H_%M_%S", time.localtime()) + ".py"
case_file = os.path.join(mitm_dir, filename)
# 生成用例文件
template = """from tep.client import request
def test():
"""
if not os.path.exists(case_file):
with open(case_file, "w", encoding="utf8") as fw:
fw.write(template)
class Record:
def __init__(self, domains):
self.domains = domains
def response(self, flow):
if self.match(flow.request.url):
# method
method = flow.request.method.lower()
ctx.log.error(method)
# url
url = flow.request.url
ctx.log.error(url)
# headers
headers = dict(flow.request.headers)
ctx.log.error(headers)
# body
body = flow.request.text or {}
ctx.log.error(body)
with open(case_file, "a", encoding="utf8") as fa:
fa.write(self.step(method, url, headers, body))
def match(self, url):
if not self.domains:
ctx.log.error("必须配置过滤域名")
exit(-1)
for domain in self.domains:
if domain in url:
return True
return False
def step(self, method, url, headers, body):
if method == "get":
body_grammar = f"params={body}"
else:
body_grammar = f"json={body}"
return f"""
# 接口描述
# 数据
# 请求
response = request(
"{method}",
url="{url}",
headers={headers},
{body_grammar}
)
# 数据提取
# var = response.jmespath("expression")
# 断言
assert response.status_code < 400
"""
# ==================================配置开始==================================
addons = [
Record(
# 过滤域名
[
"http://www.httpbin.org",
"http://127.0.0.1:5000"
],
)
]
# ==================================配置结束==================================
"""
==================================命令说明开始==================================
# 正向代理
mitmdump -s mitm.py
# 反向代理
mitmdump -s mitm.py --mode reverse:http://127.0.0.1:5000 --listen-host 127.0.0.1 --listen-port 8000
==================================命令说明结束==================================
"""
通过mitmproxy命令启动代理后,获取当前时间作为文件名在tests/mitm
下生成用例文件,给addons添加插件Record类,通过response钩子捕获请求信息,对请求进行域名过滤,域名匹配成功的请求就使用测试步骤代码模板,填充method、url、headers、body数据,追加到测试用例文件中。
自动生成的用例只支持tep风格。我也考虑过同时兼容tep、mvc、httprunner,但是实际编写过代码后,我仍然坚持认为tep风格是我最喜欢的编写方式,尽量贴近原生,可以减少出错风险,同时获得更多代码自由。
想体验的大佬可以升级或安装tep的0.9.7版本,使用tep startproject demo
创建项目即可。
参考资料:
基于mitmproxy实现接口录制 https://testerhome.com/topics/29457
mitmproxy生成httprunner脚本 https://testerhome.com/topics/30204
tep集成mitmproxy录制流量自动生成用例的更多相关文章
- 用 Python 为接口测试自动生成用例
用Python为接口自动生成测试用例 基于属性的测试会产生大量的.随机的参数,特别适合为单元测试和接口测试生成测试用例 尽管早在2006年haskell语言就有了QuickCheck来进行" ...
- SSM 框架基于ORACLE集成TKMYBATIS 和GENERATOR自动生成代码(Github源码)
基于前一个博客搭建的SSM框架 https://www.cnblogs.com/jiangyuqin/p/9870641.html 源码:https://github.com/JHeaven/ssm- ...
- unittest框架扩展(自动生成用例)自动化-上
一.思想: 基于数据驱动和代码驱动结合的自动化测试框架. 二.自动化测试框架步骤: 1.获取用例,用例格式:.ymal 2.调用接口 3.校验结果 4.发送测试报告 5.异常处理 6.日志模块 三.基 ...
- 【Golang】基于录制,自动生成go test接口自动化用例
背景 之前写过一篇博客,介绍怎么用Python通过解析抓包数据,完成自动化用例的编写.最近这段时间在使用go test,所以就在想能不能也使用代码来生成自动化用例,快速提升测试用例覆盖率.说干就干. ...
- Spring集成Swagger,Java自动生成Api文档
博主很懒... Swagger官网:http://swagger.io GitHub地址:https://github.com/swagger-api 官方注解文档:http://docs.swagg ...
- appium_python 怎样实现参数化自动生成用例
1.对于一种对同一个页面同一点 要用不同数据测试形成多条测试用例,如果复制的话 会让代码很冗长,并且并不好维护,现在用封装的方法把 不变的代码 和 变化的参数 分别封装,形成动态 生成测试用例 ,主要 ...
- 通过eclipse mybatis generater代码生成插件自动生成代码
Mybatis属于半自动ORM,在使用这个框架中,工作量最大的就是书写Mapping的映射文件,由于手动书写很容易出错,我们可以利用Mybatis-Generator来帮我们自动生成文件.通过在Ecl ...
- C++进阶--不让编译器自动生成类函数
//############################################################################ /* * 不让编译器自动生成类函数 * * ...
- [技巧]使用Xcode集成的HeaderDoc自动生成注释和开发文档
[技巧]使用Xcode集成的HeaderDoc自动生成注释和开发文档 Doxygen本来是一个很好的工具,可是我感觉在mac系统下,如果用doxygen最后生成的CHM文件感觉就不是那么恰当, ...
随机推荐
- react中label标签的作用
当我们点击输入内容触发input焦点的时候,就需要使用到label标签里的htmlFor属性来扩大点击的区域 代码如下:
- Linux上天之路(十三)之系统进程管理
主要内容 进程介绍 进程管理 进程优先级 1. 进程介绍 Linux系统中的几乎任何行动都会以进程的形式进行.如果你用网络浏览器查看网页,浏览器就作为进程运行.如果键入bash shell的命令行,这 ...
- idea 个人settings和好看的主题推荐
idea 个人settings和好看的主题推荐 配置和主体搭配使用,效果最佳!!! 配置文件: 链接:https://pan.baidu.com/s/1K-oW9UNxUz_5XWz4Ru3_3w ...
- Typora图床
Typora图床 Typora+PicGo+Gitee(码云)实现高效Markdown图床 typora是我最早接触的markdown格式的轻文本编辑器,因为我是计算机专业,所以平常记笔记会有代码块, ...
- JAVA实现对阿里云DNS的解析管理
1.阿里云DNS的SDK依赖 <dependency> <groupId>com.aliyun</groupId> <artifactId>tea-op ...
- 第56篇-ProfileData与DataLayout
某些指令需要创建某些实例,如下: 指令 对应的DataLayout._struct._tag值 _checkcast._instanceof._aastore receiver_type_data_t ...
- win+ r 命令
Win 键+R calc:计算器 notepad:记事本 mspaint:画图 cmd:控制台 control:控制面板 desk.cpl:打开控制面板中的桌面设置 main.cpl:鼠标设置 ine ...
- 将Cesium ion上的3D Tiles和Bing imagery应用到osgEarth
Cesium中文网:http://cesiumcn.org/ | 国内快速访问:http://cesium.coinidea.com/ Pelican Mapping 激动的宣布支持加载Cesium ...
- 返回值ModelAndView
- 『无为则无心』Python函数 — 35、Python中的闭包
目录 1.闭包的概念 2.实现一个闭包 3.在闭包中外函数把临时变量绑定给内函数 4.闭包中内函数修改外函数局部变量 5.注意: 6.练习: 1.闭包的概念 请大家跟我理解一下,如果在一个函数的内部定 ...