httpRunner使用汇总
接口测试框架Python:Requests、HttpRunner
文章目录
以前不了解httpRunner实现机制很不喜欢它,认为就是简单的接口录制与回放,只适合处理简单的接口逻辑。随着最近对httpRunner再次解读,发现它也能实现复杂接口的自动化用例,而且对于场景类的实现很快(不涉及特殊处理的,只要做好参数管理)。对于特殊处理的接口,针对特殊部分可以通过封装方法实现调用,如接口的加密,cookie失效等等。
httprunner源码:https://github.com/httprunner/httprunner
环境准备
涉及多个项目且项目接口实现的机制差距大,建议创建多个自动化项目且环境配置虚拟化以便解决包之间的冲突问题。
创建虚拟化环境步骤

1 创建虚拟环境:C:\py_workspace>python -m venv /venv 2 进入\venv\Scripts目录,激活虚拟环境:activate 3 返回上2级目录 4 安装虚拟安装包:pip install httprunner==3.1.6 (hrun3 低版本支持创建项目,高版本不支持) 5 查看httprunner版本:httprunner -V 6 查看帮助文档: httprunner -h 7 创建项目:httprunner startproject baseProduct
录制接口
Charles或fiddler或浏览器抓包,过滤需要使用的host接口,另存为.har文件,把录制的接口放置在创建的项目的har目录下。
生成用例
查看用例生成命令:har2case -h
转换用例格式
查看用例格式生成命令:hmake -h
把默认用例格式转换为pytest默认格式:hmake testcases
备注:转换过程中可能出现click包依赖异常(black是python中用来格式化代码等库,但是本地安装完成后,遇到了这个报错,需要重新安装低版本),具体见截图
解决:pip install click==8.0.2
运行用例
设置变量
1 config = Config("testcase description").verify(False).variables( 2 **{ 3 "uuid": "VJ7N5NBw", 4 'cookies': "${get_online_cookie()}" 5 } 6 )
base_url 特殊的全局变量:
主域名设置,一个文件设置一个,引用方式:请求方法对应的URL参数,只要写路径即可
局部变量:

提取响应字段
提取字段语法:数据来源父级,如body、headers、cookies
.extract().with_jmespath('body.result.uuid', 'uid') .extract().with_jmespath('headers.origin', 'origin') .extract().with_jmespath('cookies.“set-cookie“', 'cookie')
引用变量:
Step( RunRequest("/gateway/xxx/userInfo") .get( "/gateway/xxx/userInfo" ) .with_params(**{"time": "1670292083257"}) .with_headers( **{ "Cookie": "$cookies" } )
2、涉及边界变量引用:
Step( RunRequest("/gateway/xxx/userInfo") .get( "/gateway/xxx/userInfo" ) .with_params(**{"time": "1670292083257"}) .with_headers( **{ "Cookie": "${cookies}testor" } )
3、动态引入函数变量
config = Config("testcase description")\ .verify(False)\ .variables( **{ "uuid": "V...w", 'cookies': "${get_online_cookie()}" } )
hook机制
HttpRunner中,我们可以通过hook机制来实现 setUp() 和 tearDown(),其对应的实现函数可以封装在其他模块
用例分层
用例分层需要考虑用例的调用与参数调用。用例调用通过RunTestCase类的call方法实现,模块间的参数可以通过export实现传递。特别需关注call调用的用例文件名不要含有test,不然会被当作测试文件执。
用例分层demo截图
导出变量:Config()配置 .export("",)
引用上面导出的变量
用例的参数化
先在需要参数化测试类名下定义参数化字段,这样整个文件都可使用定义的参数。HttpRunner3.x支持3种参数化规则:
1、自己定义的变量数组
2、debugtalk.py函数返回值中
3、外部文件中
参数化是固定格式,不能修改否则报错。一般自动化用例涉及参数化的使用很少,如果需要参数化会把整个信息配置化便于遍历和断言。

1 @pytest.mark.parametrize( 2 "param", 3 Parameters( 4 { 5 "user_agent": ["iOS/10.1", "iOS/10.2"], ##自定义参数 6 "username-password": "${parameterize(request_methods/account.csv)}",##外部文件 7 "app_version": "${get_app_version()}",##debugtalk.py 定义函数 8 } 9 ), 10 ) 11 def test_start(self, param): 12 super().test_start(param)
报告
pytest自带报告:hrun testcases/origin_test.py -s --html=origin.html
allure报告:hrun testcases/origin_test.py --alluredir=allurereports/
打开报告:open report文件名
性能
locust是python语言开发的一款的开源的的性能测试框架,他比jmeter更加的轻量级,主要是通过协程(gevent)的方式去实现并发,通过协程的方式可以大幅提高单机的并发能力,同时避免系统级的资源调度。locust具有开源性、分布式、支持高并发,支持webUI的操作方式。我推荐locus主要是集成好的压测工具,不需要额外在写压测脚本可实现用例的高复用。而且配合用例管理平台,不论功能测试还是开发都可以根据自己的需要执行对应的接口要求。
命令:locusts -f testcases/online_origin_test.py,执行命令会唤起locusts服务,通过web访问地址:http://localhost:8089/(请用Chrome浏览器)
locusts 参考链接:https://www.jb51.net/article/207182.htm
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人