利用MixProxy自动录制生成Pytest案例:轻松实现测试脚本编写!

前言

进行接口自动化时,有时候往往没有接口文档,或者文档更新并不及时,此时,想要获取相关接口,通过抓包是一种快速便捷的手段。抓包获取到接口后,开始写接口用例,此时需要复制请求url、请求参数等,时间长了必然觉得索然无味,重复的工作为何不想办法变为自动化呢?那该如何将抓包获得接口自动转变为pytest接口自动化用例呢?带着这个疑问,继续查看文章。

如何录制接口用例?

在进入正题前,我们先抛出这个工具mitmproxy, 它是一个开源的中间人代理工具,这里不做详细介绍了,下面进入实现细节

编写 mitmproxy 脚本

创建一个 Python 脚本(例如 record.py),其中包含 mitmproxy 的脚本代码。在脚本中,你可以使用 http 模块监听请求和响应,并将其保存到测试用例所需的格式中。

from mitmproxy import http
​
​
class Recorder:
​def __init__(self, domains):self.domains = domains
​def response(self, flow: http.HTTPFlow) -> None:for domain in self.domains:if domain in flow.request.pretty_host:test_case_name = f"test_{flow.request.path.split('?')[0].replace('/', '_').strip('_')}.py"url = flow.request.urlmethod = flow.request.methodheaders = dict(flow.request.headers)data = flow.request.textbody = ""if method == "GET" and data:body = f"params={data}"else:body = f"json={data}"test_case_content = f"""
import requests
​
def {test_case_name.replace('.py', '')}():
​# 请求URL: {flow.request.url}# 请求方法: {flow.request.method}# 请求头部: {dict(flow.request.headers)}# 请求数据: {flow.request.text}# 响应状态码: {flow.response.status_code}# 响应头部: {dict(flow.response.headers)}# 响应数据: {flow.response.text}response = requests.{method.lower()}(url="{url}",headers={headers},{body})
​# 执行测试逻辑assert response.status_code == 200
"""with open(test_case_name, 'w') as f:f.write(test_case_content)
​
​
​
addons = [Recorder(domains=['test.api.example.cn'])]

其实整个代码看起来还是很容易的,笔者做个简单解释:

这段代码定义了一个名为'Recorder'的类,该类的主要功能是根据输入的HTTP流('http.HTTPFlow')生成对应的Python测试用例。

  • 'init': '这是一个构造函数,用于初始化Recorder类的实例。它接收一个参数domains,这个参数是一个列表,列表中的元素是字符串,表示需要关注的域名。
  • 'response': '这个函数接收一个参数flow,它是HTTP流的对象。函数遍历所有的域名,如果流请求的主机名包含在关注的域名列表中,就生成一个测试用例。测试用例的名字是根据请求的路径生成的。测试用例的内容是一个Python函数,这个函数使用requests库来发送一个HTTP请求,并断言响应的状态码是200。请求的参数(如URL、请求方法、头部、数据等)都是从传入的HTTP流中获取的。'}
  • 'addons': '这个列表包含一个Recorder类的实例,这个实例关注的域名是<test.api.example.cn>。'}

运行 mitmproxy

使用以下命令运行 mitmproxy,并指定刚才编写的脚本:

mitmproxy -s record.py

此时,mitmproxy 将会启动并开始监听请求和响应。

验证结果

配置代理后,我们抓包请求,会自动生成该域名下的case,以下是笔者抓包生成的case

test_user_info.py

import requests
​
def test_user_info():
​# 请求URL: # 请求方法: POST# 请求头部: {}# 请求数据: # 响应状态码: 200# 响应头部: # 响应数据: response = requests.post(url="",headers={},json=)
​# 执行测试逻辑assert response.status_code == 200

可以看到还是很不错的,基本模版已经生成了,我们只需在增加一些断言即可。注意,笔者这里将请求相关数据删除了,正常的case其实是完成的,是可以直接运行的。

最后

通过这篇文章的学习,我们可以将 mitmproxy 录制的请求和响应数据自动生成为 pytest 的测试用例。这样可以方便地进行接口回归测试和功能验证,并提高测试效率。当然,你可以根据实际需要,修改生成的用例,扩展更多功能。

最后:下面是配套学习资料,对于做【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!【100%无套路免费领取】

软件测试面试小程序

被百万人刷爆的软件测试题库!!!谁用谁知道!!!全网最全面试刷题小程序,手机就可以刷题,地铁上公交上,卷起来!

涵盖以下这些面试题板块:

1、软件测试基础理论 ,2、web,app,接口功能测试 ,3、网络 ,4、数据库 ,5、linux

6、web,app,接口自动化 ,7、性能测试 ,8、编程基础,9、hr面试题 ,10、开放性测试题,11、安全测试,12、计算机基础

  全套资料获取方式:点击下方小卡片自行领取即可

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/110609.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

全开源无加密跨境电商购物网站系统源码(无货源模式+多语言+多货币)

在全球化的时代背景下&#xff0c;跨境电商成为了越来越受欢迎的消费方式&#xff0c;而建立一个源码无加密多语言跨境购物网站系统是一个具有挑战性的任务&#xff0c;但完全可行。以下是这个过程的一些主要步骤&#xff1a; 1. 确定需求和功能规划&#xff1a;先确定网站需要…

IOday7

A进程 #include <head.h> int main(int argc, const char *argv[]) {pid_t cpidfork();if(cpid>0)//父进程向管道文件2写{ int wfd;if((wfdopen("./myfifo2",O_WRONLY))-1){ERR_MSG("open");return -1;} char buf[128]"";while(1){bze…

Python接口自动化 —— token登录(详解)

简介 为了验证用户登录情况以及减轻服务器的压力&#xff0c;减少频繁的查询数据库&#xff0c;使服务器更加健壮。有些登录不是用 cookie 来验证的&#xff0c;是用 token 参数来判断是否登录。token 传参有两种一种是放在请求头里&#xff0c;本质上是跟 cookie 是一样的&am…

MySql 数据库基础概念,基本简单操作及数据类型介绍

文章目录 数据库基础为什么需要数据库&#xff1f;创建数据库mysql架构SQL语句分类编码集修改数据库属性数据库备份 表的基本操作存在时更新&#xff0c;不存在时插入 数据类型日期类型enum和set 数据库基础 以特定的格式保存文件&#xff0c;叫做数据库&#xff0c;这是狭义上…

逐字稿 | 8 视频理解论文串讲(上)【论文精读】

目录 1 自从 Alexnet 之后&#xff0c;对视频理解的研究就从这种手工特征慢慢转移到卷积神经网络了。 ​编辑 1.1Deep video——深度学习时代&#xff0c;使用卷积神经网络去处理视频理解问题的最早期的工作之一 1.2如何把卷积神经网络&#xff0c;从图片识别应用到视频识别…

Nginx详细配置指南

nginx.conf配置 找到Nginx的安装目录下的nginx.conf文件&#xff0c;该文件负责Nginx的基础功能配置。 配置文件概述 Nginx的主配置文件(conf/nginx.conf)按以下结构组织&#xff1a; 配置块功能描述全局块与Nginx运行相关的全局设置events块与网络连接有关的设置http块代理…

Pyecharts绘图教程(1)—— Pyecharts可视化神器基础入门

文章目录 &#x1f3af; 1. 简介1.1 Pyecharts 是什么1.2 Pyecharts 特性 &#x1f3af; 2. 安装2.1 Pyecharts 版本2.2 常用安装方式2.3 安装地图文件&#xff08;可选&#xff09; &#x1f3af; 3. 图表类型3.1 直角坐标系图表3.2 基本图表3.3 树形图表3.4 地理图表3.5 3D图…

redis(其它操作、管道)、django中使用redis(通用方案、 第三方模块)、django缓存、celery介绍(celery的快速使用)

1 redis其它操作 2 redis管道 3 django中使用redis 3.1 通用方案 3.2 第三方模块 4 django缓存 5 celery介绍 5.1 celery的快速使用 1 redis其它操作 delete(*names) exists(name) keys(pattern*) expire(name ,time) rename(src, dst) move(name, db)) randomkey() type(na…

COCO数据集解析

介绍 官网&#xff1a;https://cocodataset.org/ 下载地址&#xff1a;https://cocodataset.org/#download COCO的全称是Common Objects in COntext&#xff0c;起源于微软于2014年出资标注党的Microsoft COCO数据&#xff0c;与ImageNet竞赛一样&#xff0c;是计算机视觉领域…

安卓14通过“冻结”缓存应用程序腾出CPU,提高性能和内存效率

本月早些时候&#xff0c;我们听说更新到安卓14似乎提高了谷歌Pixel 7和Pixel 6的效率——提高了电池寿命&#xff0c;并在这个过程中减少了热量的产生。现在看来&#xff0c;安卓14的增效功能细节已经公布。 安卓侦探Mishaal Rahman在X&#xff08;前身为Twitter&#xff09;…

阿里云优惠口令(2023更新)

2023年阿里云域名优惠口令&#xff0c;com域名续费优惠口令“com批量注册更享优惠”&#xff0c;cn域名续费优惠口令“cn注册多个价格更优”&#xff0c;cn域名注册优惠口令“互联网上的中国标识”&#xff0c;阿里云优惠口令是域名专属的优惠码&#xff0c;可用于域名注册、续…

工程企业管理软件源码-综合型项目管理软件

工程项目管理软件&#xff08;工程项目管理系统&#xff09;对建设工程项目管理组织建设、项目策划决策、规划设计、施工建设到竣工交付、总结评估、运维运营&#xff0c;全过程、全方位的对项目进行综合管理 工程项目各模块及其功能点清单 一、系统管理 1、数据字典&am…

Android12之DRM架构(一)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 人生格言&#xff1a; 人生…

初识容器Docker

目前使用 Docker 基本上有两个选择&#xff1a;Docker Desktop和Docker Engine。Docker Desktop 是专门针对个人使用而设计的&#xff0c;支持 Mac 和 Windows 快速安装&#xff0c;具有直观的图形界面&#xff0c;还集成了许多周边工具&#xff0c;方便易用。 不是太推荐使用D…

摩尔信使MThings的实时数据曲线

摩尔信使MThings配备了毫秒级的实时数据录波功能&#xff0c;提供了多种展示模式&#xff0c;包括&#xff1a;固定时间范围、示波器等&#xff1b; 用户可以添加实时数据警戒线&#xff0c;直观呈现异常数据&#xff1b; 用户可以灵活的缩放、拖动曲线数据&#xff0c;可以指…

C++对象模型(17)-- 构造函数语义学:成员初始化列表

1、必须用初始化列表的场景 &#xff08;1&#xff09;成员变量是引用类型&#xff0c;必须在初始化列表中初始化。 &#xff08;2&#xff09;成员变量是const类型&#xff0c;必须在初始化列表中初始化。 &#xff08;3&#xff09;如果类继承自一个父类&#xff0c;并且父…

前端自学需要把大量时间放在 HTML、CSS 吗?

前言 html和css其实不需要花费太多的时间&#xff0c;html暂且不说&#xff0c;css各类的属性太多了&#xff0c;平时如果只是简单做一些小网站根本不需要全部掌握&#xff0c;只需要掌握一些基础常用的即可&#xff0c;一般遇到不会的也可以直接查文档&#xff0c;就我个人来…

主打的就是一蠢

var x "abc"; // 不清楚x的用途function a(b, c, d) {// 一堆未注释的代码...// ... }// 混合使用单引号和双引号 var message "Its a beautiful day!";fetch("https://xxx/api/data").then(response > response.json()).then(data > {/…

三级等保-linux服务器三权分立设置

安全问题 安全控制点 风险分析 风险等级 标准要求 加固建议 服务器未严格按照系统管理员权限、审计管理员权限、安全管理员权限进行分配管理员账户&#xff0c;未实现管理员用户的最小权限划分。 访问控制 可能存在管理员越权操作的风险 中 d)应授予管理用户所需的最…

Vue3 实现文件预览 Word Excel pdf 图片 视频等格式 大全!!!!

先上效果图 插件安装 先说 word 文件是docx-preview插件 excel文件是用 xlsx 插件 介绍后端返回的数据 因为在拦截器处 做了对数据的处理 最后你调接口拿到的数据是 一个对象 里面包含: url : blob对象转换的用于访问Blob数据的临时链接。这个链接可以被用于在网页中展示…