httprunner学习12-hook 机制实现setup和teardown
前言
unittest框架里面有个非常好的概念:前置( setUp )和后置( tearDown )处理器,真正会用的人不多。
HttpRunner 实际上也是从用的unittest框架,里面也有前置 setup_hooks 和后置 teardown_hooks 的概念。
- setup_hooks: 在整个用例开始执行前触发 hook 函数,主要用于准备工作。
- teardown_hooks: 在整个用例结束执行后触发 hook 函数,主要用于测试后的清理工作。
config添加hook机制
在config里添加 setup_hooks 和 teardown_hooks 实际上相当于unittest里面的 setUpClass 和 tearDownClass 的概念。
它的作用是在整个 YAML/JSON 文件的用例只执行一次。接下来看下案例的执行情况就知道了,在debugtalk.py写2个简单函数
# debugtalk.py
# 上海悠悠,QQ交流群:750815713
def hook_up():
print("前置操作:setup!")
def hook_down():
print("后置操作:teardown!")
在 test_hook_demo.yml 文件写以下2个test用例
# 上海悠悠,QQ交流群:750815713
- config:
name: test_demo
variables: {}
setup_hooks:
- ${hook_up()}
teardown_hooks:
- ${hook_down()}
- test:
name: test_demo case1
request:
url: http://127.0.0.1:8000/api/test/demo
method: GET
headers:
Content-Type: application/json
User-Agent: python-requests/2.18.4
json:
username: test
password: 123456
extract:
- mail: content.datas.0.mail # 提取mail
validate:
- eq: [status_code, 200]
- equals: [content.code, 0]
- equals: [content.msg, success!]
- test:
name: test_demo case2
request:
url: http://127.0.0.1:8000/api/test/demo
method: GET
headers:
Content-Type: application/json
User-Agent: python-requests/2.18.4
json:
username: test
password: 123456
extract:
- mail: content.datas.0.mail # 提取mail
validate:
- eq: [status_code, 200]
执行用例
D:\soft\untitled\projectdemo>hrun test_hook_demo.yml
前置操作:setup!
test_demo case1
INFO GET http://127.0.0.1:8000/api/test/demo
INFO status_code: 200, response_time(ms): 0.0 ms, response_length: 255 bytes
INFO start to extract from response object.
INFO start to validate.
.
test_demo case2
INFO GET http://127.0.0.1:8000/api/test/demo
INFO status_code: 200, response_time(ms): 15.66 ms, response_length: 255 bytes
INFO start to extract from response object.
INFO start to validate.
.
----------------------------------------------------------------------
Ran 2 tests in 0.031s
OK
后置操作:teardown!
INFO Start to render Html report ...
INFO Generated Html report: D:\soft\untitled\projectdemo\reports\1569512002.html
执行后会发现config里面的 setup_hooks 作用域是整个脚本文件,并且在测试开始前只执行一次,一般用于测试的数据准备工作。
teardown_hooks 在测试用例结束后只执行一次,一般用于数据清理。
test用例添加hook机制
在test测试用例里面也可以添加 setup_hooks 和 teardown_hooks,它的作用域是当前test用例有效,以下是用过简单的输出log的函数,主要看下运行的顺序
# debugtalk.py
def hook_log(var=''):
print("用例执行log:%s" % var)
在test_hook_demo2.yml 文件写以下2个test用例
# 上海悠悠,QQ交流群:750815713
- config:
name: test_demo
variables: {}
setup_hooks:
- ${hook_up()}
teardown_hooks:
- ${hook_down()}
- test:
name: test_demo case1
request:
url: http://127.0.0.1:8000/api/test/demo
method: GET
headers:
Content-Type: application/json
User-Agent: python-requests/2.18.4
json:
username: test
password: 123456
extract:
- mail: content.datas.0.mail # 提取mail
validate:
- eq: [status_code, 200]
- equals: [content.code, 0]
- equals: [content.msg, success!]
setup_hooks:
- ${hook_log(--------测试用例 1 开始前的准备-------)}
teardown_hooks:
- ${hook_log(-------测试用例 1 结束--------)}
- test:
name: test_demo case2
request:
url: http://127.0.0.1:8000/api/test/demo
method: GET
headers:
Content-Type: application/json
User-Agent: python-requests/2.18.4
json:
username: test
password: 123456
extract:
- mail: content.datas.0.mail # 提取mail
validate:
- eq: [status_code, 200]
setup_hooks:
- ${hook_log(---------测试用例 2 开始前的准备---------)}
teardown_hooks:
- ${hook_log(----------测试用例 2 结束---------)}
运行结果
D:\soft\untitled\projectdemo>hrun test_hook_demo2.yml
前置操作:setup!
test_demo case1
用例执行log:--------测试用例 1 开始前的准备-------
INFO GET http://127.0.0.1:8000/api/test/demo
INFO status_code: 200, response_time(ms): 15.62 ms, response_length: 255 bytes
用例执行log:-------测试用例 1 结束--------
INFO start to extract from response object.
INFO start to validate.
.
test_demo case2
用例执行log:---------测试用例 2 开始前的准备---------
INFO GET http://127.0.0.1:8000/api/test/demo
INFO status_code: 200, response_time(ms): 0.0 ms, response_length: 255 bytes
用例执行log:----------测试用例 2 结束---------
INFO start to extract from response object.
INFO start to validate.
.
----------------------------------------------------------------------
Ran 2 tests in 0.016s
OK
后置操作:teardown!
INFO Start to render Html report ...
INFO Generated Html report: D:\soft\untitled\projectdemo\reports\1569512879.html
运行结果可以看出,在test用例里面的前置和后置操作是针对单个用例的
httprunner学习12-hook 机制实现setup和teardown的更多相关文章
- HttpRunner学习10--hook机制
前言 对于使用过 Python结合Unittest 框架来做自动化测试的同学,应该知道在 Unittest 中,有这样2个方法:setUp() 和 tearDown() ,即前置和后置操作.通常 se ...
- PostgreSQL的hook机制初步学习
磨砺技术珠矶,践行数据之道,追求卓越价值 回到上一级页面:PostgreSQL内部结构与源代码研究索引页 回到顶级页面:PostgreSQL索引页 本文的目的一是为了备忘,二是为了抛砖引玉,希望 ...
- httprunner学习1-环境与登录接口案例
前言 HttpRunner 是一款面向 HTTP(S) 协议的通用测试框架,只需编写维护一份 YAML/JSON 脚本,即可实现自动化测试. 具有以下优点: 继承 Requests 的全部特性,轻松实 ...
- 【repost】JS中的hook机制
hook机制也就是钩子机制,由表驱动实现,常用来处理多种特殊情况的处理.我们预定义了一些钩子,在常用的代码逻辑中去适配一些特殊的事件,这样可以让我们少些很多if else语句.举个高考加分的例子,比如 ...
- Android插件化原理解析——Hook机制之动态代理
转自 http://weishu.me/2016/01/28/understand-plugin-framework-proxy-hook/ 使用代理机制进行API Hook进而达到方法增强是框架的常 ...
- Asp.NetCore源码学习[1-2]:配置[Option]
Asp.NetCore源码学习[1-2]:配置[Option] 在上一篇文章中,我们知道了可以通过IConfiguration访问到注入的ConfigurationRoot,但是这样只能通过索引器IC ...
- HttpRunner学习8--使用debugtalk.py辅助函数
前言 在HttpRunner中,我们的测试用例都是写在 YAML/JSON 文件中,有时候我们想借助代码来实现某些较复杂的功能,但在 YAML/JSON 中是无法直接写代码来处理的,这个时候,我们可以 ...
- httprunner学习15-运行用例命令行参数详解
前言 HttpRunner 在命令行中启动测试时,通过指定参数,可实现丰富的测试特性控制. 命令行参数CLI 使用 -h 查看相关命令行参数 hrun -h 参数名称 参数值 参数说明 -h, --h ...
- Nova中的Hook机制
Nova的代码中支持Hook机制,也就是在某些函数的前后,可以加入自己的代码逻辑.Hook代码可以完全独立于Nova开发,本质上使用setuptools的entry points机制.K版本的Open ...
随机推荐
- 异步IRP的教训(已附DUMP)
[教训]异步IRP中,IoSetCompletionRoutine()要在IoCallDriver()的前面,不然底层驱动完成了读写之后,找不到完成例程,会导致出错.看似简单,不小心却可能带来大麻烦. ...
- CentOS环境设置Hbase自启动
1.在/etc/init.d/目录创建hbase文件 #!/bin/bash # chkconfig: #export JAVA_HOME=/usr/local/jdk1.8.0_191 HBASE_ ...
- C的位运算符
1.前言 C的位运算符有&(按位与).|(按位或).^(按位异或).~(按位取反),位运算符把运算对象看作是由二进制位组成的位串信息,按位完成指定的运算,得到相应的结果. 2.位运算符 在上面 ...
- unity的yield
这里说的是Unity通过StartCoroutine开启IEnumerator协程里的yield相关 1.yield return 0,yield return null 等待下一帧接着执行下面的内容 ...
- C#怎么判断字符是不是汉字 汉字和Unicode编码互相转换
判断一个字符是不是汉字通常有三种方法,第1种用 ASCII 码判断(在 ASCII码表中,英文的范围是0-127,而汉字则是大于127,根据这个范围可以判断),第2种用汉字的 UNICODE 编码范围 ...
- Docker安装Consul集群
Docker 安装Consul集群 使用windows 环境,Docker desktop community 构建consul集群. 1.docker 容器网络 docker安装后,默认会创建三种网 ...
- Vue--基础2
目录 Vue--基础2 vue成员获取 分隔符成员 计算属性成员 什么是计算属性 计算属性的用法 注意: 监听属性成员 组件 组件的介绍 组件的优点: 局部组件 全局组件 组件复用的数据隔离 组件之间 ...
- 阿里和Google的JAVA开发规约
<阿里 JAVA开发规约> 阿里巴巴Java开发手册终极版v1.3.0.pdf 出处:github地址:https://github.com/alibaba/p3c <Google ...
- angularJS中select元素的应用浅析
select array 数据: select ng-model 用法: 1.可以是一个对象形式,ng-model="test" $scope.test = {name: &quo ...
- Springboot2 jpa druid多数据源
package com.ruoyi; import org.mybatis.spring.annotation.MapperScan; import org.springframework.beans ...