在 HttpRunner v4.0 全新发布 中我们有介绍过,HttpRunner v4.0 期望成为一款专业级的一体化 API 测试工具,特别是针对性能测试能力进行了重大升级。相比于之前的版本,HttpRunner v4.0 在性能测试部分最大的优化包括如下 4 个方面:
- 使用 Golang 重新实现了脚本执行引擎(基于 Boomer),相比于 Python Locust 极大地提升了发压能力
- 对标 LoadRunner 新增实现了丰富的性能测试机制,包括事务、集合点、思考时间等
- 对压测结果进行了严格的 benchmark 测试和数据校准,确保测试结果真实可靠
- 集成了 Prometheus 性能采集能力,配合 Grafana 可实现丰富的性能指标看板
涉及的内容比较多,因此我们针对 HttpRunner v4.0 的性能测试能力规划了一系列专题文章,包括性能测试工具使用、多机负载分布式加压、监控配置、benchmark 数据比对、竞品工具对比、原理解析等等。
本文作为性能测试专题的第一篇文章,将结合一个简单的案例整体介绍如何使用 HttpRunner v4.0 开展性能测试,帮助大家快速上手使用工具。
案例介绍
为了方便大家理解,本文挑选了一个非常简单的案例场景,但同时会尽量多地覆盖常用的性能测试特性。
案例设计如下:
- 压测目标为 3 个接口:API1/API2/API3
- 业务层面期望整体关注 API1 + API2 的性能情况,即「事务」特性
- 在真实场景中,API1 和 API2 请求之间需要有一个间隔时间,即「思考时间」特性
- 期望重点关注 API3 的并发性能,即所有用户同一时间请求的情况,即「集合点」特性
接下来,我们将对这些特性进行具体介绍,并对使用方法进行演示说明。
编写测试用例
在性能测试之前,我们需要先准备好性能测试用例。在 HttpRunner 中,得益于「一体化」的特性优势,我们可以在无需对已有接口测试用例做任何修改的情况下,直接运行性能测试。
针对本文中的案例,接口测试用例如下所示:
config:
name: load test demo
variables:
app_version: v1
user_agent: iOS/10.3
base_url: 'http://httpbin.org'
verify: false
teststeps:
- name: get with params
request:
method: GET
url: /get
headers:
User-Agent: '$user_agent/$app_version'
validate:
- check: status_code
assert: equals
expect: 200
msg: check status code
- name: post with params
request:
method: POST
url: /post
headers:
User-Agent: '$user_agent/$app_version'
validate:
- check: status_code
assert: equals
expect: 200
msg: check status code
- name: post with params 2
request:
method: POST
url: /post
headers:
User-Agent: '$user_agent/$app_version'
validate:
- check: status_code
assert: equals
expect: 200
msg: check status code
我们只需将测试命令从 hrp run 改为 hrp boom,即可启动性能测试,具体的参数配置后面会详细介绍。
需要说明的是:
- HttpRunner v4.0 做性能测试时,测试用例格式只能选择 YAML/JSON/GoTest;PyTest 格式的底层引擎基于
pytest 执行引擎,不支持性能测试; - 如果我们在性能测试中期望实现「事务」、「集合点」、「思考时间」等机制,需要在接口测试用例基础上添加特定的步骤。
添加「事务」机制
事务可以将多个接口的测试结果进行聚合统计,性能指标更加贴合真实业务场景。
事务的数据结构如下:
type Transaction struct {
Name string `json:"name" yaml:"name"`
// 事务名称,可定义为任意字符串
Type transactionType `json:"type" yaml:"type"`
// 事务类型,仅包括 2 种类型,start(事务开始)和 end(结束事务)
}
事务使用示例:
config:
...
teststeps:
...
- name: transaction 1 start
transaction:
name: tran1
type: start
...
- name: transaction 1 end
transaction:
name: tran1
type: end
...
针对「事务」机制,有 2 个需要特别注意的点:
使用 HttpRunner v4.0 执行性能测试时,会自动添加名称为 Action 的事务,该事务包含整个测试用例的所有测试步骤(参考了 LoadRunner 的做法)
在测试用例中,transaction 应该成对出现,即必须同时定义 start 和 end;如果存在配对缺失的情况,会按照如下逻辑进行处理:
仅设置开始事务,则会在测试用例最后一个测试步后添加结束事务
仅设置结束事务,则会在测试用例第一个测试步前添加开始事务
添加「集合点」机制
集合点可以确保指定的虚拟用户在同一时刻发起请求&#x