HttpRunner 是一款面向 HTTP(S) 协议的通用测试框架,只需编写维护一份 YAML/JSON 脚本,即可实现自动化测试、性能测试、线上监控、持续集成等多种测试需求。
# 第一个接口/api/get-token的响应结果为:{"success": true, "token":"ZQkYhbaQ6q8UFFNE"}# 提取 token,采用 content.token‘extract‘:[ {‘token‘:‘content.token‘}]# token 作为提取后的参数名称,可以在后续使用 $token 进行引用‘headers‘:{ ‘token‘:‘$token‘, "Content-Type": "application/json", "device_sn": "FwgRiO7CNA50DSU",}
{ "config": { "name": "testcase description", "variables": [], "request": { "base_url":"http://127.0.0.1:5000", "headers": { "User-Agent":"python-requests/2.18.4", "device_sn": "FwgRiO7CNA50DSU", "Content-Type":"application/json" } } }}# 其中 name 为测试用例的名称,在测试报告中将作为标题
import hashlibimport hmacimport randomimport stringSECRET_KEY = "DebugTalk"def gen_random_string(str_len): random_char_list = [] for _ in range(str_len): random_char = random.choice(string.ascii_letters + string.digits) random_char_list.append(random_char) random_string = ‘‘.join(random_char_list) return random_stringdef get_sign(*args): content = ‘‘.join(args).encode(‘ascii‘) sign_key = SECRET_KEY.encode(‘ascii‘) sign = hmac.new(sign_key, content, hashlib.sha1).hexdigest() return sign
# 申明变量:生成 15 位长度的随机字符串并赋值给 device_sn 的代码为:"variables": [ {"device_sn": "${gen_random_string(15)}"}]# 引用变量:使用 $user_agent、$device_sn、$os_platform、$app_version 根据签名算法生成 sign 值的代码"json": { "sign": "${get_sign($user_agent, $device_sn, $os_platform, $app_version)}"}
# 创建用户的接口中对 user_id 进行参数化,参数化列表为 1001~1004,并且取值方式为顺序取值"config": { "parameters": [ {"user_id": [1001, 1002, 1003, 1004]} ]}
# 运行单个测试用例( hrun 命令外加单个测试用例文件的路径)$ hrun filepath/testcase.yml# 运行多个测试用例使用 (hrun 命令外加多个测试用例文件的路径)$ hrun filepath1/testcase1.yml filepath2/testcase2.yml# 运行指定文件夹下所有的测试用例(使用 hrun 命令外加文件夹的路径):$ hrun testcases_folder_path# 测试用例在运行过程中,遇到失败时不再继续运行后续用例$ hrun filepath/testcase.yml --failfast# 显示指定日志级别以上的日志$ hrun tests/data/demo_parameters.yml --log-level debug
# 指定报告名称$ hrun docs/data/demo-quickstart-2.yml --html-report-name demo
- config:name: basic test with httpbinrequest: base_url: http://127.0.0.1:3458/setup_hooks: - ${hook_print(setup)}teardown_hooks: - ${hook_print(teardown)}
"test": { "name": "get token with $user_agent, $os_platform, $app_version", "request": { "url": "/api/get-token", "method": "POST", "headers": { "app_version": "$app_version", "os_platform": "$os_platform", "user_agent": "$user_agent" }, "json": { "sign": "${get_sign($user_agent, $device_sn, $os_platform, $app_version)}" } }, "validate": [ {"eq": ["status_code", 200]} ], "setup_hooks": [ "${setup_hook_prepare_kwargs($request)}", "${setup_hook_httpntlmauth($request)}" ], "teardown_hooks": [ "${teardown_hook_sleep_N_secs($response, 2)}" ]}# test 中 name 为测试步骤的名称,在测试报告中将作为测试步骤的名称
调用 debugtalk.py 中自定义的函数生成参数列表
```
config:
name: "demo"
parameters:
- user_agent: ["iOS/10.1", "iOS/10.2", "iOS/10.3"]
- user_id: ${P(user_id.csv)}
- username-password: ${get_account(10)}
config:
parameters:
- username-password:
- ["user1", "111111"]
- ["user2", "222222"]
- ["user3", "333333"]
```