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

news2024/11/18 21:32:24

前言

进行接口自动化时,有时候往往没有接口文档,或者文档更新并不及时,此时,想要获取相关接口,通过抓包是一种快速便捷的手段。抓包获取到接口后,开始写接口用例,此时需要复制请求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.url
                method = flow.request.method
                headers = dict(flow.request.headers)
                data = flow.request.text
                body = ""
                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.coloradmin.cn/o/1109821.html

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

相关文章

人工智能驱动的个性化学习:技术如何彻底改变教育

随着计算机辅助教学的出现&#xff0c;人工智能在教育领域的发展始于20世纪50年代。然而&#xff0c;在20世纪90年代&#xff0c;由于机器学习和数据处理的进步&#xff0c;该领域开始出现大幅增长。人工智能在教育领域的早期应用之一是智能辅导系统&#xff08;ITS&#xff09…

最新最全网络安全专业毕业设计选题精华汇总-持续更新中

文章目录 0 前言1 网络安全(信息安全)毕设选题推荐2 开题指导3 最后 0 前言 Hi&#xff0c;大家好&#xff0c;随着毕业季的临近&#xff0c;许多同学开始向学长咨询关于选题和开题的问题。在这里&#xff0c;学长分享一些关于网络安全(信息安全)毕业设计选题的内容。 以下为…

2023人工智能全景报告《State of AI Report》出炉!AI未来一年的10大预测:GPT-4仍是全球最强,GenAI 大爆发,...

文章目录 2023 人工智能全景报告《State of AI Report》出炉&#xff01;给出AI未来一年的10大预测&#xff0c;GPT-4仍是全球最强&#xff0c;GenAI 大爆发&#xff0c;...1. 研究进展1.1 GPT-4仍是全球最强1.2 闭源模型趋于技术封闭&#xff0c;开源模型紧追不舍1.3 小模型的…

日常中msvcr120.dll丢失怎么解决?有效的5个解决方法分享

在我日常的计算机维护和故障排除中&#xff0c;我经常会遇到一些常见的问题&#xff0c;其中之一就是“msvcr120.dll丢失”。这是一个非常常见的错误&#xff0c;通常出现在运行某些程序或游戏时。这个问题可能会对用户的电脑操作造成不便&#xff0c;甚至导致一些重要的应用程…

风力发电场安科瑞集中监控系统解决方案

安科瑞 崔丽洁 风力发电场集中监控系统解决方案 作为清洁能源之一&#xff0c;风力发电场近几年装机容量快速增长。8月17日&#xff0c;国家能源局发布1-7月份全国电力工业统计数据。截至7月底&#xff0c;全国累计发电装机容量约27.4亿千瓦&#xff0c;同比增长11.5%。其中&am…

1024程序员节特辑 | ELK+ 用户画像构建个性化推荐引擎,智能实现“千人千面”

专栏集锦&#xff0c;赶紧收藏以备不时之需 Spring Cloud实战专栏&#xff1a;https://blog.csdn.net/superdangbo/category_9270827.html Python 实战专栏&#xff1a;https://blog.csdn.net/superdangbo/category_9271194.html Logback 详解专栏&#xff1a;https://blog.…

Mac苹果电脑开不了机怎么办,该怎么修复

台式机Mac或MacBook无法打开&#xff0c;或者可能无法通过Apple图标启动&#xff1f;不用担心&#xff0c;虽然会让人烦躁不安&#xff0c;但通常是可以修复的。 以下就是重新启动Mac所需的所有步骤。只需按顺序进行操作即可&#xff0c;除非操作系统更新失败后Mac无法启动。在…

[1024]程序员节 一晃6年过去了

加入开发者大军&#xff0c;一晃已是6年有余&#xff0c;从最初的Andoird开发如火如荼&#xff0c;到现在的秋风萧瑟&#xff0c;宛如被秋风吹得只剩躯干的树木&#xff0c;等待来年的焕发新芽。 我本不是一个科班出身的开发者&#xff0c;但是为了生活&#xff0c;说白了为了钱…

macos平台好用的FTP客户端 Transmit 5最新中文

Transmit 5是一款Mac平台上的FTP(文件传输协议)客户端软件&#xff0c;它可以让用户方便地在不同的计算机之间传输文件&#xff0c;例如从本地计算机上传或下载文件到远程服务器。以下是Transmit 5的一些主要功能和特点&#xff1a; 用户友好的界面&#xff1a;Transmit 5具有…

英语——分享篇——每日200词——1401-1600

1401——willing——[wɪlɪŋ]——adj.乐意的&#xff0c;自愿的——willing——will意志(熟词)ing鹰(谐音)——这只意志力强的鹰乐意帮助别人——Im perfectly willing to discuss the problem.——我十分乐意讨论这个问题。 1402——otherwise——[ʌəwaɪz]——conj.否则&…

KT6368A的封装怎么画 原理图怎么画 资料怎么看 怎么下载呢

一、简介 KT6368A的封装怎么画 原理图怎么画 资料怎么看 怎么下载呢 也有好几个客户问我们这样的问题&#xff0c;实在是太难了 但是没办法&#xff0c;客户就是上帝&#xff0c;也只能选择认真的回答&#xff0c; 这里对这类型的问题进行统一精细化回复&#xff0c;高手请…

一个三年女软件测试的成长之路

如果你恰好刚刚进入一家新公司&#xff0c;领导一上来就让你开展自动化测试&#xff0c;作为一名初出茅庐的测试新人&#xff0c;除了手足无措&#xff0c;你只能默默慨叹自己能力尚欠&#xff0c;眼前只会出现一个又一个无从下手的问题&#xff1a; 作为手工测试&#xff0c;…

悟空crm“您提供的密钥不是有效的百度LBS开放平台密钥,或此密钥未对本应用的百度地图JavaScriptAPI授权“问题处理办法

点击悟空crm&#xff0c;创建客户的时候系统提示&#xff1a; 悟空crm 您提供的密钥不是有效的百度LBS开放平台密钥&#xff0c;或此密钥未对本应用的百度地图JavaScriptAPI授权。您可以访问如下网址了解如何获取有效的密钥&#xff1a;http://lbsyun.baidu.com/apiconsole/…

通过内网穿透技术实现USB设备共享(USB Redirector)逆向共享

文章目录 前言1. 安装下载软件1.1 内网安装使用USB Redirector1.2 下载安装cpolar内网穿透 2. 完成USB Redirector服务端和客户端映射连接3. 设置固定的公网地址 前言 USB Redirector是一款方便易用的USB设备共享服务应用程序&#xff0c;它提供了共享和访问本地或互联网上的U…

扩展技巧 绕过waf

文件上传 绕过waf qikachu靶场 js代码 删除判断 绕过 脏数据绕过 xss绕过 为了ssrf编写防御脚本

Pycharm安装第三方库的详细教程

**常用方法一&#xff1a;**内部安装 这种安装方法是我们经常使用的一种&#xff0c;进入到pycharm界面中&#xff0c;点击菜单栏上的file选项&#xff0c;选择settings&#xff0c; 找到界面中的Project Interpreter 或者 Python interpreter&#xff0c;点击““号&#xf…

做客户成功岗位有必要考PMP吗?

作为客户成功岗位的从业者&#xff0c;我们需要具备一定的项目管理知识和技能&#xff0c;以便更好地为客户提供服务。而PMP认证是全球最具权威性的项目管理认证之一&#xff0c;它能够帮助从业者提升项目管理能力&#xff0c;提高客户成功率。那么&#xff0c;做客户成功岗位有…

面向对象设计原则之依赖倒置原则

目录 定义原始定义进一步的理解 作用实现方法代码示例 定义 依赖倒置原则&#xff08;Dependence Inversion Principle&#xff09;&#xff0c;缩写为DIP。 原始定义 High level modules should not depend upon low level modules. Both should depend upon abstractions.…

docker图形胡界面管理工具--Portainer可视化面板安装

1.安装运行Portainer docker run -d -p 8088:9000 \ > --restartalways -v /var/run/docker.sock:/var/run/docker.sock --privilegedtrue portainer/portainer--restartalways&#xff1a;Docker启动后容器自动启动 -p&#xff1a;端口映射 -v&#xff1a;路径映射2.通过…

RIAC-V架构开发——CSR指令访问控制与状态寄存器的两种方式(寄存器名字、寄存器编号)

1、CSR指令介绍 &#xff08;1&#xff09;CSR&#xff0c;即Control and Status Register&#xff0c;控制与状态寄存器&#xff0c;属于CPU自带的一类寄存器&#xff0c;csr寄存器采用12bit编码&#xff0c;共支持4096个csr寄存器&#xff0c;其中RISC-V架构规定占用了部分地…