自动化框架 Httprunner 介绍
1. 是什么
HttpRunner 是一个简单,优雅但功能强大的 HTTP(S)测试框架。
目前 Httprunner 的最新版本是 3.0,它是使用 Python 开发的,支持 Python3.6+ 和大多数操作系统。作者李隆之前是大疆的测试开发工程师,项目起源于大疆内部的测试需求,之后转为开源项目。
它产生的背景主要是:
1.业务线多
2.高速发展和扩张:业务增长、人员增长
3.普遍具有功能回归测试、持续集成、线上监控等需求
是不是跟我们平时工作中的情况很相似?
市面上已经有很多工具,但是传统自动化测试会存在一些问题:
1.工具多 & 杂
2.学习成本高
3.团队协作难
4.维护成本高
2. 核心目标
解决问题首先要确定目标,结合背景,Httprunner 的核心目标就是业务导向,快速落地。
1.少投入
- 工具开发&维护
- 学习使用成本
- 编写&录入测试用例
- 测试用例管理
2.高收益
- 实现自动化回归
- 性能脚本复用
- 兼具持续集成、线上监控
- 辅助手工测试,自定义生成特定业务数据
设计思路
有了目标,作者是如何一步一步设计出来的呢?
- 要想快速实现从 0 到 1,就是充分复用好的开源工具,比如
requests
,pytest
,pydantic
,allure
和locust
- 要想避免闭门造车,拥抱开源生态是最好的选择;
- 要想兼具自动化,性能,持续集成,线上监控,需要实现命令行CLI调用和引入并发机制;
- 要想保证工具质量,需要运用测试驱动开发的思想,以及分享出去,收到同行反馈;
- 要想实现协作管理,需要用简单清晰的形式让大家真正用起来,约定大于配置
主要特征
- 继承的所有强大功能
requests
,只需以人为方式处理HTTP(S),就很有趣。 - 以YAML或JSON格式定义测试用例,
pytest
以简洁优雅的方式运行。 - 在
HAR
支持下记录并生成测试用例。 - 支持
variables
/extract
/validate
/hooks
机制,以创建非常复杂的测试方案。 - 使用
debugtalk.py
插件,任何功能都可以在测试用例的任何部分使用。 - 使用
jmespath
,提取和验证json响应从未如此简单。 - 有了
pytest
,数百个插件随时可用。 - 使用
allure
,测试报告可以非常强大。 - 通过重复使用
locust
,您可以进行性能测试,而无需进行额外的工作。 - 支持CLI命令,与完美结合
CI/CD
。
说完主要特征,我想提几个 Httprunner 借鉴优秀开源项目的地方:
- debugtalk.py 借鉴 pytest 的 conftest.py
- 参数化机制借鉴 Loadrunner
- 环境变量管理(.env)借鉴 Postman
- 测试用例分层管理借鉴 Katalon
大家有兴趣的可以去搜索看看。
3.如何用
最后让我们实际操作看看,我这里的演示基于 HttpRunner v3.x。
3.1 安装
HttpRunner
在上可用PyPI
,可以通过安装pip
。
$ pip3 install httprunner
如果之前已经安装过并且想要升级到最新版本,则可以使用该-U
选项。
$ pip3 install -U httprunner
$ pip3 install -U git+https://github.com/httprunner/aaa@qq.com
安装HttpRunner后,系统将添加 5 个命令。
-
httprunner
:主命令,用于所有功能 -
hrun
:的别名httprunner run
,用于运行YAML / JSON / pytest测试用例 -
hmake
:的别名httprunner make
,用于将YAML / JSON测试用例转换为pytest文件 -
har2case
:的别名httprunner har2case
,用于将HAR转换为YAML / JSON测试用例 -
locusts
:用于对 locusts 进行负载测试
要查看HttpRunner
版本:
$ httprunner -V # hrun -V
3.2 脚手架创建项目
如果要创建新项目,则可以使用脚手架快速启动一个项目。
你需要指定的唯一参数是项目名称,比如下方的 demo
$ httprunner startproject demo
注意,不能使用已经存在的项目名称,否则会收到警告。
运行脚手架项目
支架项目有几个有效的测试用例,因此您无需任何编辑即可运行测试。
$ hrun demo
3.3 记录并生成测试用例
捕获 HTTP 请求和响应
在编写测试用例之前,我们应该了解 API 的详细信息。使用 Web 调试代理工具(如fiddler
捕获 HTTP 流量)是一个不错的选择。
例如,下图显示抓取访问百度首页。
将会话导出到HAR文件
然后,我们可以选择捕获的请求和响应,并将会话导出到HTTP存档(.har)文件。
用 har2case 生成测试用例
当您获得HAR文件时,可以使用内置命令har2case
将其转换为 HttpRunner 测试用例。
生成测试用例(pytest)
由于HttpRunner v3.x,har2case
默认情况下会将HAR文件转换为 pytest,因此强烈建议以 pytest 格式而不是以前的YAML/JSON
格式编写和维护测试用例。
$ har2case har/demo.har
生成测试用例(YAML / JSON)
当然,您也可以生成以前的YAML/JSON
测试用例格式。只需在上添加-2y/--to-yml
或-2j/--to-json
参数即可har2case
。
$ har2case har/demo.har -2j
3.4 编写测试用例
HttpRunner v3.x支持三种测试用例格式pytest
,YAML
和JSON
。强烈建议以pytest
格式而不是以前的YAML/JSON
格式编写和维护测试用例。
基于生成的pytest测试用例,您可以根据需要进行一些调整,因此您需要了解测试用例格式的详细信息。这块东西比较多,我想之后再展开讲一下,大家也可以去提前搜索相关信息。
3.5 运行测试用例
准备好测试用例后,可以使用hrun
命令运行测试用例。
注意,hrun
是的命令别名httprunner run
,它们具有相同的作用。
hrun = httprunner run
以多种方式运行测试用例
HttpRunner
可以以多种方式运行测试用例。
您可以通过指定测试用例文件路径来运行单个测试用例。
$ hrun path/to/testcase1
您还可以通过指定多个测试用例文件路径来运行多个测试用例。
$ hrun path/to/testcase1 path/to/testcase2
如果要运行整个项目的测试用例,则可以通过指定项目文件夹路径来实现此目标。
$ hrun path/to/testcase_folder/
3.6 测试报告
受益于pytest
HttpRunner v3.x的集成,HttpRunner v3.x可以使用所有pytest插件,包括测试报告插件(如pytest-html
和)allure-pytest
。
内置的HTML报告
pytest-html
插件随HttpRunner安装一起提供。当您想要生成HTML报告以执行测试用例时,可以添加命令参数--html
。
$ hrun /path/to/testcase --html=report.html
如果您想创建一个独立的报告,它是一个单个HTML文件,可以在共享结果时更加方便,则可以添加另一个命令参数--self-contained-html
。
$ hrun /path/to/testcase --html=report.html --self-contained-html
您可以参考以pytest-html
获取更多详细信息。
Allure 报告
allure-pytest
是HttpRunner的可选依赖项,因此,如果要生成吸引力报告,则应allure-pytest
单独安装插件。
$ pip3 install "allure-pytest"
或者,您可以安装具有额外吸引力的HttpRunner软件包。
$ pip3 install "httprunner[allure]"
一旦allure-pytest
准备好了,下面的参数可以使用hrun/pytest
的命令。
-
--alluredir=DIR
:在指定目录中生成魅力报告(可能不存在) -
--clean-alluredir
:清理alluredir文件夹(如果存在) -
--allure-no-capture
:不要将pytest捕获的日志记录/ stdout / stderr附加到报告中
要在测试完成后查看实际报告,您需要使用Allure命令行实用程序从结果生成报告。
$ allure serve /tmp/my_allure_results
此命令将在默认浏览器中显示生成的报告。
大家有生成自己的报告吗?
结语
Httprunner 不仅仅是一套新的自动化测试工具/框架,它是通用的自动化测试解决方案,并且融合最佳工程实践,意在打造接口自动化测试生态。
还是要说回我的初衷,不要过分依赖工具,工具只是辅助,重要的是我们测试的思路。你可以选中一款工具之后,结合业务去用用看,效果好的话就继续,不好就换个试试,能解决问题就好。希望大家看完这篇有收获,我们下次见!