目录
一、简述
1 、设计理念
2 、核心特性
二、安装部署
1、安装下载
2、配置
3、检查安装结果
三、项目实战
1、脚手架创建项目:
2、yaml文件:作为测试脚本文件
1)、yaml文件的语法特点
2)、yaml支持的数据结构
3、.env文件
4、变量 Variables
5、参数提取
6、自定义函数: debugtalk.py文件
7、参数化驱动
8、结果校验
9、运行接口测试
10、运行性能测试
前情提要:来自官方文档 https://httprunner.com/docs/introduction/
HttpRunner
是一个开源的 API 测试工具,支持 HTTP(S)/HTTP2/WebSocket/RPC 等网络协议,涵盖接口测试、性能测试、数字体验监测等测试类型。简单易用,功能强大,具有丰富的插件化机制和高度的可扩展能力
1w+
VUM,结合分布式负载能力可实现海量发压Linux/macOS
系统,使用shell命令快速安装:
$ bash -c "$(curl -ksSL https://httprunner.com/script/install.sh)"
windows建议去官网下载:Releases · httprunner/httprunner · GitHub
下载后的tar.gz文件手动改为zip格式并解压
HttpRunner
目录(自定义目录),将 hrp.exe
文件放在该目录下C:\\HttpRunner
写入 PATH安装成功后,你将获得一个 hrp 命令行工具,执行 hrp -h 即可查看到参数帮助说明
██╗ ██╗████████╗████████╗██████╗ ██████╗ ██╗ ██╗███╗ ██╗███╗ ██╗███████╗██████╗
██║ ██║╚══██╔══╝╚══██╔══╝██╔══██╗██╔══██╗██║ ██║████╗ ██║████╗ ██║██╔════╝██╔══██╗
███████║ ██║ ██║ ██████╔╝██████╔╝██║ ██║██╔██╗ ██║██╔██╗ ██║█████╗ ██████╔╝
██╔══██║ ██║ ██║ ██╔═══╝ ██╔══██╗██║ ██║██║╚██╗██║██║╚██╗██║██╔══╝ ██╔══██╗
██║ ██║ ██║ ██║ ██║ ██║ ██║╚██████╔╝██║ ╚████║██║ ╚████║███████╗██║ ██║
╚═╝ ╚═╝ ╚═╝ ╚═╝ ╚═╝ ╚═╝ ╚═╝ ╚═════╝ ╚═╝ ╚═══╝╚═╝ ╚═══╝╚══════╝╚═╝ ╚═╝
HttpRunner is an open source API testing tool that supports HTTP(S)/HTTP2/WebSocket/RPC
network protocols, covering API testing, performance testing and digital experience
monitoring (DEM) test types. Enjoy! ✨ ✨
License: Apache-2.0
Website: https://httprunner.com
Github: https://github.com/httprunner/httprunner
Copyright 2017 debugtalk
Usage:
hrp [command]
Available Commands:
boom run load test with boomer
build build plugin for testing
completion generate the autocompletion script for the specified shell
convert convert to JSON/YAML/gotest/pytest testcases
curl run integrated curl command
dns DNS resolution for different source and record types
help Help about any command
ping run integrated ping command
pytest run API test with pytest
run run API test with go engine
startproject create a scaffold project
traceroute run integrated traceroute command
wiki visit https://httprunner.com
Flags:
-h, --help help for hrp
--log-json set log to json format
-l, --log-level string set log level (default "INFO")
--venv string specify python3 venv path
-v, --version version for hrp
Use "hrp [command] --help" for more information about a command.
参数说明
hrp startproject demo
创建项目成功后,默认生成如下目录:
testcases 文件夹中包含了多个示例测试用例,以下为requests.yml示例文件:
go interface
的设计理念,支持进行任意协议和测试类型的拓展(甚至包括 UI 自动化),每个 step 都是一个 HTTP 请求${}
或 $
的形式来引用变量,例如 $foo1
或 ${foo1}
${}
的形式来调用插件函数,例如 ${sum_two(1, 2)}
冒号后面要加一个空格
# 写法1
key: value
# 写法2
key: {key1: value1,key2: value2}
# 写法3,使用缩进标识层级关系
key:
key1: value1
key2: value2
color:
- red
- blue
- green
# 也可以采用行内表示法
color: [red,blue,green]
1 字符串 布尔值 整数 浮点数 Null
2 时间日期
数值直接以字面量的形式表示
number: 20.9
布尔值用true和false表示
isRight: true
null用 ~ 表示
variable: ~
YAML 可使用两个感叹号,强制转换数据类型
e: !!str 123
f: !!str true
存放设置的全局变量参数及参数值,引用方式为: ${ENV(参数名)}
# .env文件
base_url=https://postman-echo.com
# xx.yml文件引用
- config:
name: "引用.env文件传递参数"
base_url: ${ENV(base_url)}
config
下声明的 variables,
作用域为整个测试用例config
下声明的 parameters
为测试用例的驱动参数;它的作用域也是覆盖整个测试用例teststep
)下声明的 variables,
作用域仅限当前步骤变量优先级:step variables > session variables > parameter variables > config variables
1)、若响应结果为 JSON 结构,支持采用 jmespath 表达式进行参数提取:
{
"locations": [
{"name": "Seattle", "state": "WA"},
{"name": "New York", "state": "NY"},
{"name": "Bellevue", "state": "WA"},
{"name": "Olympia", "state": "WA"}
]
}
参数提取类型:
注意:如果表达式中存在 -
的情况,那么需要加引号处理。例如 headers."Content-Type"
2)、正则表达式提取
若响应结果为 text/html 格式,支持采用正则表达式的方式提取目标参数
如响应的body为:
参数提取(extract) | HttpRunner
想提取页面的 title 字段,就可以这样做:
extract:
title: "(.*) "
函数的申明定义在项目根目录的 debugtalk.py
中,基于「约定大于配置」的设计理念,我们无需在测试用例中进行配置
mport 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()
在 debugtalk.py
中,我们可以编写实现任意自定义逻辑的函数,只需通过 funppy
进行 register
和 serve()
即可。 测试用例中,使用${函数}
引用debugtalk中的函数
parameters(支持 3 种输入方式)
1)、参数列表,如下:
2)、csv文件
3)、 自定义函数,形如:user_id: ${get_user_id(10)}
,函数返回值为列表
内置结果校验函数
assert | Description | A(check), B(expect) |
eq, equals, equal | 判断实际结果=预期结果 | A == B |
lt, less_than | 判断实际结果<预期结果 | A < B |
le, less_or_equals | 判断实际结果<=预期结果 | A <= B |
gt, greater_than | 判断实际结果>预期结果 | A > B |
ge, greater_or_equals | 判断实际结果>=预期结果 | A >= B |
ne, not_equal | 判断实际结果不等于预期结果 | A != B |
str_eq, string_equals | 判断转成字符串后,实际结果=预期结果 | str(A) == str(B) |
len_eq, length_equals, length_equal | 判断实际结果的长度=预期结果 | len(A) == B |
len_gt, count_gt, length_greater_than | 判断实际结果的长度>预期结果 | len(A) > B |
len_ge, count_ge, length_greater_or_equals | 判断实际结果的长度>=预期结果 | len(A) >= B |
len_lt, count_lt, length_less_than | 判断实际结果的长度<预期结果 | len(A) < B |
len_le, count_le, length_less_or_equals | 判断实际结果的长度<=预期结果 | len(A) <= B |
contains | 判断实际结果是否包含预期结果 | [1, 2] contains 1 |
contained_by | 判断预期结果是否包含实际结果 | A in B |
type_match | 判断预期结果和实际结果数据类型是否一致 | type(A) == type(B) |
通过 hrp run
命令即可执行指定的测试用例;如需生成 HTML 测试报告,可附带 --gen-html-report
参数
hrp run demo/testcases/requests.yml demo/testcases/ref_testcase.yml --gen-html-report
在执行目录下,生成report文件夹,打开查看报告
通过 hrp boom
命令运行性能测试;通过 --spawn-count
参数可指定并发用户数,通过 --spawn-rate
可指定起始发压斜率
hrp boom testcases/requests.yml --spawn-count 20 --spawn-rate 2
在压测运行过程中,每隔 3 秒打印一次性能汇总数据;通过 CTRL + C
终止测试后,会打印整个压测过程的汇总数据(Statistics Summary)。
C:\Project>hrp boom demo/testcases/requests.yml --spawn-count 20 --spawn-rate 2
2:39PM INF Set log to color console other than JSON format.
2:39PM WRN windows does not support setting ulimit
2:39PM ??? Set log level
Current time: 2022/09/20 14:39:56, Users: 6, State: stopping, Total RPS: 3.0, Total Average Response Time: 678.7ms, Total Fail Ratio: 0.0%
Accumulated Transactions: 1 Passed, 0 Failed
+--------------+-----------------+------------+---------+--------+---------+------+------+--------------+------------+-------------+
| TYPE | NAME | # REQUESTS | # FAILS | MEDIAN | AVERAGE | MIN | MAX | CONTENT SIZE | # REQS/SEC | # FAILS/SEC |
+--------------+-----------------+------------+---------+--------+---------+------+------+--------------+------------+-------------+
| request-GET | get with params | 4 | 0 | 640 | 725.00 | 590 | 912 | 397 | 1.33 | 0.00 |
| request-POST | post form data | 1 | 0 | 690 | 692.00 | 692 | 692 | 576 | 0.33 | 0.00 |
| request-POST | post raw text | 2 | 0 | 460 | 579.50 | 461 | 698 | 534 | 0.67 | 0.00 |
| transaction | Action | 1 | 0 | 2100 | 2080.00 | 2080 | 2080 | 0 | 0.33 | 0.00 |
+--------------+-----------------+------------+---------+--------+---------+------+------+--------------+------------+-------------+
2:39PM WRN runner has stopped; skipping GoAttach
Current time: 2022/09/20 14:39:59, Users: 1, State: stopped, Total RPS: 5.6, Total Average Response Time: 541.4ms, Total Fail Ratio: 0.0%
Accumulated Transactions: 6 Passed, 0 Failed
+--------------+-----------------+------------+---------+--------+---------+------+------+--------------+------------+-------------+
| TYPE | NAME | # REQUESTS | # FAILS | MEDIAN | AVERAGE | MIN | MAX | CONTENT SIZE | # REQS/SEC | # FAILS/SEC |
+--------------+-----------------+------------+---------+--------+---------+------+------+--------------+------------+-------------+
| request-GET | get with params | 2 | 0 | 680 | 682.50 | 675 | 690 | 450 | 0.67 | 0.00 |
| request-POST | post raw text | 4 | 0 | 230 | 453.75 | 225 | 904 | 535 | 1.33 | 0.00 |
| request-POST | post form data | 5 | 0 | 230 | 362.80 | 226 | 684 | 571 | 1.67 | 0.00 |
| transaction | Action | 5 | 0 | 1500 | 1542.60 | 1137 | 2024 | 0 | 1.67 | 0.00 |
+--------------+-----------------+------------+---------+--------+---------+------+------+--------------+------------+-------------+
=========================================== Statistics Summary ==========================================
Current time: 2022/09/20 14:39:59, Users: 1, Duration: 3.217s, Accumulated Transactions: 6 Passed, 0 Failed
+-------+------------+---------+--------+---------+-----+-----+--------------+------------+-------------+
| NAME | # REQUESTS | # FAILS | MEDIAN | AVERAGE | MIN | MAX | CONTENT SIZE | # REQS/SEC | # FAILS/SEC |
+-------+------------+---------+--------+---------+-----+-----+--------------+------------+-------------+
| Total | 18 | 0 | 590 | 541.39 | 225 | 912 | 507 | 5.60 | 0.00 |
+-------+------------+---------+--------+---------+-----+-----+--------------+------------+-------------+