前言

对于使用过 Python结合Unittest 框架来做自动化测试的同学,应该知道在 Unittest 中,有这样2个方法:setUp()tearDown() ,即前置和后置操作。通常 setUp() 主要用于测试准备工作,而 tearDown() 主要用于 测试后的数据清理。

在 HttpRunner 中,我们可以通过 hook机制 来实现 setUp()tearDown()

本人环境:HttpRunner V1.5.8

测试场景

我们将用一个登录的接口来进行说明,完整的 YAML 格式用例如下:

- config:
name: login test
request:
base_url: http://api.nnzhp.cn - test:
name: login case 1
request:
url: /api/user/login
method: POST
headers:
Content-Type: application/x-www-form-urlencoded
User-Agent: Fiddler
data:
username: test1010
passwd: aA123456
validate:
- eq: [status_code, 200]
- eq: [content.error_code, 0] - test:
name: login case 2
request:
url: /api/user/login
method: POST
headers:
Content-Type: application/x-www-form-urlencoded
User-Agent: Fiddler
data:
username: test1010
passwd: aA123456
validate:
- eq: [status_code, 200]
- eq: [content.error_code, 0]

对于 hook 函数的定义,我们一般在 debugtalk.py 中进行编写,然后在测试用例中直接调用 hook 函数,比如我在 debugtalk.py 做如下准备:

def hook_setup():
print("开始--------hook_setup") def hook_teardown():
print("结束--------hook_teardown")

在 config 中使用hook

如果在 HttpRunner 中使用hook机制,那么将用到关键字 setup_hooksteardown_hooks,且只会在当前 YAML/JSON 用例中执行一次。

  • setup_hooks: 在整个用例开始执行前触发 hook 函数,主要用于准备工作。
  • teardown_hooks: 在整个用例结束执行后触发 hook 函数,主要用于测试后的清理工作。

在 config 中引入 hook,修改如下:

- config:
name: login test
request:
base_url: http://api.nnzhp.cn
setup_hooks:
- ${hook_setup()}
teardown_hooks:
- ${hook_teardown()}

接着,运行用例,得到如下结果:

从上面的用例执行情况,我们可以看到,一共执行了 2 个用例,debugtalk.py 中的 hook_setup()hook_teardown() 都只执行了1次,这是因为在 config 中,hook机制的作用域是整个YAML用例

在 test 中使用hook

在 test 中,我们也可以使用关键字 setup_hooksteardown_hooks,在这里,它的作用域是针对当前 test,如果我们有多个 test,那么就会执行多次。

  • setup_hooks: 在 HTTP 请求发送前执行 hook 函数,主要用于准备工作;也可以实现对请求的 request 内容进行预处理。
  • teardown_hooks: 在 HTTP 请求发送后执行 hook 函数,主要用于测试后的清理工作;也可以实现对响应的 response 进行修改,例如进行加解密等处理。

我们可以在 debugtalk.py 中的函数增加传入参数的功能,简单修改如下:

def hook_setup(request=""):
print("开始--------hook_setup")
print("request请求:{}".format(request)) def hook_teardown(response=""):
print("结束--------hook_teardown")
print("response响应:{}".format(response))

我们可以在这里将 请求的request响应的response 打印处理,然后分别在 2 个 test 中引入 hook,如下:

- config:
name: login test
request:
base_url: http://api.nnzhp.cn - test:
name: login case 1
省略部分内容
setup_hooks:
- ${hook_setup($request)}
teardown_hooks:
- ${hook_teardown($response)}
省略部分内容 - test:
name: login case 2
省略部分内容
setup_hooks:
- ${hook_setup($request)}
teardown_hooks:
- ${hook_teardown($response)}
省略部分内容

这个时候,我们再去运行用例,得到如下结果:

对比之前的结果,可以发现,test 中的 setup_hooks 和 teardown_hooks 是针对单个 test

需要注意的地方

在使用 hook机制 的时候,我们需要注意一点,在上面的 test 中,我们使用了 teardown_hooks ,这里是在返回最终结果之前执行的,我们不能将从响应结果中提取到的数据,作为参数传入 hook_teardown 函数中。

我们需要简单修改一下 YAML 用例,将 第二个test 做如下修改:

- test:
name: login case 2
省略部分内容
extract:
- sign: content.login_info.sign
setup_hooks:
- ${hook_setup($request)}
teardown_hooks:
- ${hook_teardown($sign)}
省略部分内容

我们通过 extract 提取返回结果中的 sign ,并把它传入 hook_teardown() ,然后再去执行用例。

上面的结果,告诉我们找不到 sign 参数,这是因为 teardown_hooks 是在 最终数据返回前 的处理,而 extract 提取操作是在 返回数据之后 的处理。

HttpRunner学习10--hook机制的更多相关文章

  1. PostgreSQL的hook机制初步学习

    磨砺技术珠矶,践行数据之道,追求卓越价值 回到上一级页面:PostgreSQL内部结构与源代码研究索引页    回到顶级页面:PostgreSQL索引页 本文的目的一是为了备忘,二是为了抛砖引玉,希望 ...

  2. httprunner学习12-hook 机制实现setup和teardown

    前言 unittest框架里面有个非常好的概念:前置( setUp )和后置( tearDown )处理器,真正会用的人不多. HttpRunner 实际上也是从用的unittest框架,里面也有前置 ...

  3. httprunner学习1-环境与登录接口案例

    前言 HttpRunner 是一款面向 HTTP(S) 协议的通用测试框架,只需编写维护一份 YAML/JSON 脚本,即可实现自动化测试. 具有以下优点: 继承 Requests 的全部特性,轻松实 ...

  4. Hook机制里登场的角色

    稍有接触过 WordPress 主题或插件制作修改的朋友,对 WordPress 的Hook机制应该不陌生,但通常刚接触WordPress Hook 的新手,对其运作原理可能会有点混乱或模糊.本文针对 ...

  5. 黄聪:WordPress 的 Hook 机制与原理(add_action、add_filter)

    稍有接触过 WordPress 主题或插件制作修改的朋友,对 WordPress 的Hook机制应该不陌生,但通常刚接触WordPress Hook 的新手,对其运作原理可能会有点混乱或模糊.本文针对 ...

  6. 【repost】JS中的hook机制

    hook机制也就是钩子机制,由表驱动实现,常用来处理多种特殊情况的处理.我们预定义了一些钩子,在常用的代码逻辑中去适配一些特殊的事件,这样可以让我们少些很多if else语句.举个高考加分的例子,比如 ...

  7. 浅谈svn的hook机制

    一.什么是钩子 所谓svn的hook机制,就是用户在管理数据仓库的时候,当特定的事件发生时,相应的hook会被调用,hook 其实就相当于特定事件的处理函数. 当前 Subversion 提供了5种可 ...

  8. Android插件化原理解析——Hook机制之动态代理

    转自 http://weishu.me/2016/01/28/understand-plugin-framework-proxy-hook/ 使用代理机制进行API Hook进而达到方法增强是框架的常 ...

  9. HttpRunner学习8--使用debugtalk.py辅助函数

    前言 在HttpRunner中,我们的测试用例都是写在 YAML/JSON 文件中,有时候我们想借助代码来实现某些较复杂的功能,但在 YAML/JSON 中是无法直接写代码来处理的,这个时候,我们可以 ...

随机推荐

  1. 【POJ 2823】【Luogu P1886】Sliding Window 滑动窗口

    POJ 2823 Luogu P1886 [解题思路] 这是一个单调队列算法的经典题目,几乎学习单调队列的人都接触过这题. 利用单调队列算法求出每一个固定区间内的最(大/小)值. 以下以最大值为例: ...

  2. PostgreSQL的使用向导

    目录 数据库 创建数据库 进入数据库 查看版本 查看当前时间日期 简单的select 获得帮助命令 退出psql客户端 创建表 weather和cities表的创建 删除表 插入数据 数据库导出成cs ...

  3. Linux高级命令-sort、uniq、 cut、sed、grep、find、awk

    sort(参考学习网站:http://www.cnblogs.com/dong008259/archive/2011/12/08/2281214.html) 功能:根据不同的数据类型进行排序 格式:s ...

  4. Linux如何切换图形界面和命令行界面

    在命令行,输入 init 3 命令,并按回车键执行,切换到命令行界面 切换到命令行界面后,在界面上只显示一个闪烁的光标,按下 Ctrl+Alt+F6(非虚拟机)或者 Alt+F6(虚拟机),显示用户登 ...

  5. 数据结构与算法之java语言实现(一):稀疏数组

    一.概念&引入 什么是稀疏数组? 稀疏数组是面对一个二维数组中有众多重复元素的情况下,为了节省磁盘空间,将此二维数组转化为更加节省空间的一种数组,我们叫他稀疏数组. 只是听概念或许会看不明白, ...

  6. HTML+Jquery实现多图片上传预览功能

    HTML:使用input的onchange事件,它一改变就触发事件 <p id="p3"> <input name="File" onchan ...

  7. Leecode_137_singleNumberII

    参考: http://blog.csdn.net/jocyln9026/article/details/19397477

  8. 【我的物联网成长记8】超速入门AT指令集【华为云技术分享】

    [摘要] 在物联网中,AT命令集可用于控制&调测设备.通信模块入网等.本文为您介绍NB-IoT常用的AT命令集及其调测工具. 什么是AT指令集 AT命令,用来控制TE(Terminal Equ ...

  9. eclipse m2eclipse 从Maven的本地库中读取依赖库

    在Mac pro的终端中执行命令 mvn package 后,已经把该工程所需要的依赖库(dependancies)下载到本地库,但在把该工程 import 到 eclipse中时,发现m2eclip ...

  10. WeihanLi.Npoi 支持 ShadowProperty 了

    WeihanLi.Npoi 支持 ShadowProperty 了 Intro 在 EF 里有个 ShadowProperty (阴影属性/影子属性)的概念,你可以通过 FluentAPI 的方式来定 ...