HttpRunner-03-hook

简介: HttpRunner-03-hook

什么是 hook?


hook 俗名钩子函数,就是在特定情况下才会触发的 Api


举个 hook 栗子


就像你用银行卡去 ATM 机取钱,当你在执行取钱的动作过程中会触发一个名为 msg 的钩子函数,而这个 msg 钩子函数就会执行像你手机发送短信的动作。


即:在取钱动作成功发生的时候会触发发送短信的钩子函数。


hrun 中的 hook


和其他测试框架一样,httprunner 也拥有自己的 setupteardown,其通过 hook 的方式实现。


hook 分级


httprunner 中的 hook 分为 case 级别和 step 级别两种。


case 级别的 hook


实现 case 运行前后的 setupteardown


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 运行前后的 setupteardown


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,我们可以实现很多复杂的功能以支持我们的测试,甚至可以获取外部数据或者调用其他系统实现更加丰富的功能。

感谢您的阅读,别忘了关注,点赞,评论,转发四连哟!

相关文章
|
27天前
|
前端开发
自定义 Hook 编写指南
【10月更文挑战第15天】本文介绍了 React 中的 Hooks 和自定义 Hook 的基本概念、编写方法及常见问题。通过具体代码示例,详细讲解了如何在函数组件中使用状态和其他 React 特性,并分享了避免常见错误的技巧。自定义 Hook 可以帮助你将组件中的逻辑提取出来,使其更加可重用和可维护。
141 68
|
2月前
|
JavaScript 前端开发 网络协议
HTTPRunner
HTTPRunner是一种单元测试工具,由于教学的需求,我学习了它,但是我觉得它比Python的Requests类相差太远。作为一个比较流行的工具在这里进行介绍。
25 0
HTTPRunner
|
6月前
|
测试技术
Cypress的钩子函数
Cypress的钩子函数
Cypress的钩子函数
|
机器学习/深度学习 Web App开发 数据可视化
过节福利 | MMCV Hook 超全使用方法(下)
在训练过程中,通常有十个关键位点,如下图所示,从训练开始到结束,所有关键位点已用红色标出,共有 10 个。我们可以在这十个位点插入各种逻辑,例如加载模型权重、保存模型权重。而我们将同一类型的逻辑组织成一个 Hook。因此,MMCV 中 Hook 的作用就是训练和验证模型时,在不改变其他代码的前提下,灵活地在不同位点插入定制化的逻辑。
1906 0
过节福利 | MMCV Hook 超全使用方法(下)
|
6月前
|
关系型数据库 MySQL API
如何使用hook?
如何使用hook?
46 0
|
JSON 测试技术 数据格式
07-Httprunner-hook机制
07-Httprunner-hook机制
|
JavaScript 前端开发 Linux
Hook神器—Frida安装
Hook神器—Frida安装
|
前端开发 JavaScript Sentinel
我发现了axios源码工具函数中的一个小bug
最开始我一看很蒙蔽,很多时候自己并不会去写这样的函数,说白了还是自己代码底子不行。可能很多大佬一看就明白了,所以基础很重要,基础很重要,基础很重要。箭头函数算是ES6中新增的。
103 0
|
前端开发
react 进阶hook 之自定义Hook
hooks是一个函数,并且是在react 函数组件中使用的,不同的hook的作用也是不一样的,例如,state hook是用来定义函数组件的状态, 而effect hook 是用来定义组件的副作用,那么自定义hook是用来干啥的呢?,自定来定义一个hook 函数,里面可以包含 多个hooks。简单点的说是,把相同逻辑的hooks封装在同一个函数里。
react 进阶hook 之自定义Hook
|
C++
C/C++ IAT HOOK MessageBoxW
最近在研究各种姿势的 HOOK,虽然 HOOK 这个东西已经是很久之前就有的技术了,但好在目前应用仍然很广泛,所以老老实实肯大佬们 10 年前啃过的骨头,下面是庄重的代码献祭时刻。
270 0