📝 面试求职: 「面试试题小程序」 ,内容涵盖 测试基础、Linux操作系统、MySQL数据库、Web功能测试、接口测试、APPium移动端测试、Python知识、Selenium自动化测试相关、性能测试、性能测试、计算机网络知识、Jmeter、HR面试,命中率杠杠的。(大家刷起来…)
📝 职场经验干货:
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)"
安装完成后,你将获得命令行工具 hrp
,通过下面命令查看帮助:
hrp -h
示例输出(简略):
Usage:
hrp [command]
Available Commands:
boom run load test with boomer
convert convert JSON/YAML testcases to pytest/gotest scripts
har2case convert HAR to json/yaml testcase files
pytest run API test with pytest
run run API test with go engine
startproject create a scaffold project
...
二、创建项目脚手架
执行以下命令初始化一个示例项目,项目目录结构自动生成:
hrp startproject demo
示例输出日志会显示创建过程,完成后你会看到:
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_bar1
foo2: config_bar2
expect_foo1: config_bar1
expect_foo2: config_bar2
verify: False
export: ["foo3"]
teststeps:
- name: get with params
variables:
foo1: bar11
foo2: bar21
sum_v: "${sum_two(1, 2)}"
request:
method: GET
url: /get
params:
foo1: $foo1
foo2: $foo2
sum_v: $sum_v
headers:
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 funppy
def get_httprunner_version():
return "v4.0.0-alpha"
def sum_two_int(a: int, b: int) -> int:
return a + b
if __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-report
-
支持同时运行多个用例文件
-
--gen-html-report
会在reports/
目录生成可视化测试报告
六、查看测试报告
打开 reports/
目录中生成的 HTML 文件,浏览器打开后即可查看:
-
每条用例请求和响应详情
-
断言结果和错误信息
-
用例执行耗时、状态统计
七、性能压测(Boomer)
利用已有接口用例,快速做性能压测,无需额外改造。
示例命令:
hrp boom demo/testcases/demo_requests.yml --spawn-count 100 --spawn-rate 10
-
--spawn-count
:并发用户数 -
--spawn-rate
:每秒启动用户数 -
压测过程实时输出统计数据
最后: 下方这份完整的软件测试视频教程已经整理上传完成,需要的朋友们可以自行领取【保证100%免费】