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

编程入门 行业动态 更新时间:2024-10-25 21:16:10

利用MixProxy自动录制生成Pytest案例:轻松实现测试<a href=https://www.elefans.com/category/jswz/34/1771291.html style=脚本编写!"/>

利用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'])]

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

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

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

运行 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、计算机基础

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

更多推荐

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

本文发布于:2023-12-08 03:42:22,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1672255.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:脚本   案例   轻松   测试   MixProxy

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!