什么是 hook?
hook
俗名钩子函数,就是在特定情况下才会触发的 Api
。
举个 hook 栗子
就像你用银行卡去 ATM
机取钱,当你在执行取钱的动作过程中会触发一个名为 msg
的钩子函数,而这个 msg
钩子函数就会执行像你手机发送短信的动作。
即:在取钱动作成功发生的时候会触发发送短信的钩子函数。
hrun 中的 hook
和其他测试框架一样,httprunner
也拥有自己的 setup
和 teardown
,其通过 hook
的方式实现。
hook 分级
httprunner
中的 hook
分为 case
级别和 step
级别两种。
case 级别的 hook
实现 case
运行前后的 setup
和 teardown
。
config: name: "demo testcase" variables: device_sn: "ABC" username: ${ENV(USERNAME)} password: ${ENV(PASSWORD)} base_url: "https://getman.cn/mock" setup_hooks: - ${hook_print(setup)} teardown_hooks: - ${hook_print(teardown)} teststeps: - name: demo step 1 api: api/demo_api.yml variables: user_agent: 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.97 Safari/537.36' device_sn: $device_sn extract: - token: content.name validate: - eq: ["status_code", 200] - name: demo step 2 api: api/demo_api2.yml variables: token: $token validate: - eq: [reason, OK] 复制代码
debugtalk
定义 hook_print
函数
def hook_print(msg): print('This is:',msg) 复制代码
测试执行控制台打印
网络异常,图片无法展示
|
step 级别的 hook
实现 step
运行前后的 setup
和 teardown
。
config: name: "demo testcase" variables: device_sn: "ABC" username: ${ENV(USERNAME)} password: ${ENV(PASSWORD)} base_url: "https://getman.cn/mock" teststeps: - name: demo step 1 api: api/demo_api.yml variables: user_agent: 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.97 Safari/537.36' device_sn: $device_sn extract: - token: content.name validate: - eq: ["status_code", 200] setup_hooks: - ${hook_print(setup)} teardown_hooks: - ${hook_print(teardown)} - name: demo step 2 api: api/demo_api2.yml variables: token: $token validate: - eq: [reason, OK] 复制代码
测试执行控制台打印
网络异常,图片无法展示
|
使用场景
环境登录
我们可以在测试前通过 hook
拿到环境的 token
,这样我们在后面的测试中可以在直接使用。
预处理
假如我们需要在测试前进行一些预处理动作,比如配置初始化,创建测试项目和用户等都可以用 hook
实现。
后处理
我们可以通过 hook
在测试结束后对测试资源和垃圾数据等进行统一的处理。
结合
debugtalk
,我们可以实现很多复杂的功能以支持我们的测试,甚至可以获取外部数据或者调用其他系统实现更加丰富的功能。感谢您的阅读,别忘了关注,点赞,评论,转发四连哟!