httprunner2.x--HttpRunner的hook(钩子)机制:(setup/teardown)用例层面的调用
转载:https://blog.csdn.net/weixin_42007999/article/details/105788094
HttpRunner 实现了 hook 机制,hook 就是“钩子”的意思,可以在测试用例的一头和一尾各设置一个钩子,每个钩子可以对应一个提前定义好的函数(在 debugtalk.py 文件中定义),当运行测试用例的时候,这两个钩子会把对应的函数“勾”过来一起执行。放前面的钩子叫 setup,放后面的钩子叫 teardown(这个名称和单元测试工具的道理是一致的)。
用例中使用 “钩子 hook” 的示意图如下:
在 HttpRunner 中 hook 机制分为两个层级:
1. 测试用例层面(testcase)
- 关键字:setup_hooks,测试用例执行前,先调用该关键字内的函数。
- 关键字:teardown_hooks,测试用例执行后,先调用该关键字内的函数。
2. 测试步骤层面(teststep)
- 关键字:setup_hooks,测试步骤执行前,先调用该关键字内的函数。此时通过传入 $request 参数,可以对请求进行预处理或者修改。
- 关键字:teardown_hooks,测试步骤执行后,先调用该关键字内的函数。此时通过传入 $response 参数,可以对响应进行处理或者修改。
案例一: 用例层面 hook 的使用
在用例执行前和后都自动调用 print_msg() 函数
在 debugtalk.py 文件中定义的 hook 函数:
def print_msg(msg): """ hooks函数打印执行的测试用例 :param msg: :return: """ print("执行测试用例:%s" %msg)
引入钩子 hook 的测试用例文件:
- 调用 print_msg()函数,分别传入字符串参数“Begin”和“End”
- 在执行用例前后位置分别打印“执行测试用例:Begin”和“执行测试用例:End”两句话
api文件
name: 请求百度 request: url: https://www.baidu.com/ method: GET headers: User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.82 Safari/537.36 validate: - eq: [status_code, 200]
测试用例
config: name: hooks用例层 # 执行用例前 setup_hooks: # 调用hooks函数 - ${print_msg(开始)} # 执行用例后 teardown_hooks: # 调用hooks函数 - ${print_msg(结束)} teststeps: - name: 测试步骤 - 打开百度页面 api: api/baidu.yml validate: - eq: ["status_code", 200]
执行以上测试用例:
- 钩子函数被调用执行。
- 在执行用例前后位置分别打印“执行测试用例:开始”和“执行测试用例:结束”两句话。