HttpRunner 是一款面向测试开发的开源接口自动化测试框架,支持 YAML/JSON/Python 编写测试用例,支持 CLI 和 Python 代码运行,兼容多种主流工具(如 Allure、Jenkins 等),非常适合自动化测试团队使用。
随着微服务、前后端分离架构的普及,接口自动化测试 在软件测试领域变得越来越重要。市面上有诸多接口测试工具和框架可供选择,而其中一款国产开源、功能强大的工具——HttpRunner,因其脚本简单、功能完善、适合 CI/CD 接入等优势,广受国内测试工程师欢迎。
一、HttpRunner 简介
HttpRunner 是一个功能强大、易于使用的开源接口测试框架,支持 HTTP(S)、WebSocket 协议,兼容 API 测试和性能测试,适合各种测试场景:
支持 YAML / JSON / Python 多种测试用例格式
支持测试数据参数化、断言机制、测试用例复用
与
pytest、Allure深度集成支持 CI/CD 集成,适合企业自动化流程
它的设计理念是“测试即代码,代码即测试”,不仅适合功能测试,也非常适合接口自动化开发。
官方地址:
GitHub: https://github.com/httprunner/httprunner
文档: https://httprunner.com
二、与其他接口测试工具对比
| 工具/框架 | 脚本语言 | 主要特点 | 适合人群 |
| HttpRunner | YAML / Python | 开箱即用,支持 DSL+Python,国产文档全,支持 CI/CD | 自动化测试工程师 |
| Postman + Newman | JSON | 操作简洁,适合接口调试,支持环境变量,命令行执行 | 接口初学者 / 手工测试 |
| JMeter | XML / GUI | 支持接口和性能测试,脚本笨重,适合场景化压测 | 性能测试工程师 |
| Pytest + requests | Python | 灵活强大,适合高度自定义场景,但脚手架需自己搭建 | 开发测试工程师 |
| RestAssured | Java | Java生态下的接口测试框架,代码结构规范,语法较重 | Java团队 |
HttpRunner 是一种中间路线,兼具易用性(使用YAML编写用例)与 灵活性(使用Python编写用例),非常适合团队接口测试自动化落地。
三、HttpRunner 版本演进
HttpRunner 自 2017 年发布以来,经历了多个重大版本升级,不断提升其功能、稳定性与可扩展性。
以下版本对比来自官方文档:
| 版本 | v1 | v2 | v3 | HttpRunner+ | v4 |
| 发布时间 | 2018.03.07 | 2019.01.01 | 2020.03.10 | 2021.11.18 | 2022.05.01 |
| 开发语言 | Python | Python | Python | Golang | Golang + Python |
| 版本号规范(semver) | ❌ | ✅ | ✅ | ✅ | ✅ |
| 网络协议 | HTTP(S)/1.1 | HTTP(S)/1.1 | HTTP(S)/1.1 | HTTP(S)/1.1 | 多协议 HTTP(S)/HTTP2/WebSocket/TCP/RPC |
| 脚本转换工具 | HAR | HAR | HAR | HAR | HAR/Postman/Swagger/Curl |
| 工程脚⼿架 | ❌ | ✅ | ✅ | ✅ | ✅ |
| 测试⽤例(集)格式 | v1 | v2 | v2 | v2 | v2 |
| 测试⽤例分层机制 | v1 | v2 | v2 | v2 | v2 |
| 脚本格式类型 | YAML/JSON | YAML/JSON | YAML/JSON/pytest | YAML/JSON | YAML/JSON/pytest/gotest |
| 脚本格式校验 | ❌ | jsonschema | ❌ | ❌ | TODO |
| 脚本编写语法提示 | ❌ | ❌ | pytest 链式调用 | gotest 链式调用 | gotest 链式调用 + pytest 链式调用 |
| 脚本执行引擎 | Python unittest | Python unittest | Python pytest | Go 自研 | Go 自研 + Python pytest |
| 插件化语言(debugtalk.xx) | Python | Python | Python | 多语言(Go/Python) | 多语言(Go/Python/Java/etc.) |
| 参数提取机制 | regex + 点分隔符 | jmespath + regex + 点分隔符 | jmespath | jmespath + regex | jmespath + regex |
| skip 机制 | ✅ | ❌ | ❌ | ❌ | TODO |
| 接口测试报告 | html 自研(jinja2) | html 自研(jinja2) | pytest-html/allure | html 自研(Go template) | html 自研(Go template) + pytest-html/allure |
| 性能测试引擎 | Python Locust | Python Locust | Python Locust | Go Boomer | Go Boomer |
| 运行环境依赖 | Python 2.7/3.3+ | Python 2.7/3.5+ | Python 3.7+ pytest | 无需依赖 | Go 引擎无需依赖 pytest 引擎依赖 Python 3.7+ |
| 网络性能采集 | ❌ | ❌ | ❌ | ❌ | ✅ |
| 安装部署方式 | pip | pip | pip | curl/wget | curl/wget |
四、HttpRunner安装和使用
HttpRunner 追求“简单易用”,即使是新用户,也能在 10 分钟内快速跑通第一个接口自动化用例。
一、安装部署
HttpRunner v4 采用 Go 语言开发,已提供跨平台二进制安装包。安装只需一条命令:
bash -c "$(curl -ksSL https://httprunner.com/script/install.sh)"AI写代码
安装完成后,你将获得命令行工具hrp,通过下面命令查看帮助:
hrp -hAI写代码
示例输出(简略):
Usage:hrp [command]Available Commands:boom run load test with boomerconvert convert JSON/YAML testcases to pytest/gotest scriptshar2case convert HAR to json/yaml testcase filespytest run API test with pytestrun run API test with go enginestartproject create a scaffold project...
二、创建项目脚手架
执行以下命令初始化一个示例项目,项目目录结构自动生成:
hrp startproject demoAI写代码
示例输出日志会显示创建过程,完成后你会看到:
demo/├── .env├── .gitignore├── debugtalk.py├── har/│ └── .keep├── reports/│ └── .keep└── testcases/├── demo_requests.yml├── demo_ref_testcase.yml└── demo_with_funplugin.json
testcases/:存放测试用例debugtalk.py:自定义函数脚本reports/:测试报告目录
三、快速预览测试用例
以demo_requests.yml为例,里面包含多个 HTTP 请求测试步骤。
示例节选:
config:name: "request methods testcase with functions"base_url: "https://postman-echo.com"variables:foo1: config_bar1foo2: config_bar2expect_foo1: config_bar1expect_foo2: config_bar2verify: Falseexport: ["foo3"]teststeps:- name: get with paramsvariables:foo1: bar11foo2: bar21sum_v: "${sum_two(1, 2)}"request:method: GETurl: /getparams:foo1: $foo1foo2: $foo2sum_v: $sum_vheaders:User-Agent: HttpRunner/${get_httprunner_version()}extract:foo3: "body.args.foo2"validate:- eq: ["status_code", 200]- eq: ["body.args.foo1", "bar11"]- eq: ["body.args.sum_v", "3"]- eq: ["body.args.foo2", "bar21"]
说明:
config定义全局配置,如基本 URL、变量、SSL 校验等。
teststeps是有序的测试步骤列表,每步代表一个 HTTP 请求和校验变量支持定义和覆盖,支持
${函数名(参数)}调用自定义函数。断言(validate)用于校验返回状态码和响应体字段。
四、自定义函数示例(debugtalk.py)
debugtalk.py允许你定义业务相关的函数,并在 YAML 中调用。
示例代码:
import funppydef get_httprunner_version():return "v4.0.0-alpha"def sum_two_int(a: int, b: int) -> int:return a + bif __name__ == '__main__':funppy.register("get_httprunner_version", get_httprunner_version)funppy.register("sum_two", sum_two_int)funppy.serve()
通过
funppy.register注册函数后,YAML 用例就能调用${sum_two(1,2)}。这是基于“约定优于配置”的设计,方便逻辑复用。
五、运行接口测试
执行以下命令,运行项目中的测试用例,并生成 HTML 报告:
hrp run demo/testcases/demo_requests.yml demo/testcases/demo_ref_testcase.yml --gen-html-reportAI写代码
AI写代码
支持同时运行多个用例文件
--gen-html-report会在reports/目录生成可视化测试报告
六、查看测试报告
打开reports/目录中生成的 HTML 文件,浏览器打开后即可查看:
每条用例请求和响应详情
断言结果和错误信息
用例执行耗时、状态统计
七、性能压测(Boomer)
利用已有接口用例,快速做性能压测,无需额外改造。
示例命令:
hrp boom demo/testcases/demo_requests.yml --spawn-count 100 --spawn-rate 10AI写代码
--spawn-count:并发用户数--spawn-rate:每秒启动用户数压测过程实时输出统计数据
感谢每一个认真阅读我文章的人!!!
作为一位过来人也是希望大家少走一些弯路,如果你不想再体验一次学习时找不到资料,没人解答问题,坚持几天便放弃的感受的话,在这里我给大家分享一些自动化测试的学习资源,希望能给你前进的路上带来帮助。
软件测试面试文档
我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。
视频文档获取方式:
这份文档和视频资料,对于想从事【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!以上均可以分享,点下方小卡片即可自行领取。