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 ...
随机推荐
- docker 镜像加速,修改为阿里云镜像
首先访问 登录阿里云 https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors,会获取专属的镜像地址 centos用户执行下列操作即可 s ...
- 可能是全网最好的MySQL重要知识点 | 面试必备
可能是全网最好的MySQL重要知识点 | 面试必备 mp.weixin.qq.com 点击蓝色“程序猿DD”关注我 回复“资源”获取独家整理的学习资料! 标题有点标题党的意思,但希望你在看了文章之后 ...
- 【原】无脑操作:Markdown可以这样玩
一.背景: Markdown是一种纯文本格式的标记语言.通过简单的标记语法,可以使普通文本内容具有一定的格式.因为语法简单明了.功能又比纯文本强大,所以很适合作为开发人员的书写工具.Markdown的 ...
- Linux ssh 公私钥配置
Linux ssh 公私钥配置 ssh 公私钥可实现无密码的情况下直接直接登录到服务端.方便我们管理,而且也可以设置ssh完全通过公私钥登录,不可通过密码登录,来提高我们的服务器安全程度. 配置 生成 ...
- MQTTv5.0 ---AUTH – 认证交换
AUTH报文被从客户端发送给服务端,或从服务端发送给客户端,作为扩展认证交换的一部分,比如质询/ 响应认证.如果CONNECT报文不包含相同的认证方法,则客户端或服务端发送AUTH报文将造成协议错 误 ...
- ES7.3.0配置
# elasticsearch.yml cluster.name: my-application node.name: node-1 node.master: true node.ingest: tr ...
- 【Linux】CentOS7 打开关闭防火墙及端口
一.centos7版本对防火墙进行加强,不再使用原来的iptables,启用firewalld1.firewalld的基本使用启动: systemctl start firewalld查状态:syst ...
- IP地址和MAC地址绑定的必要性
计算机网络是一个共通的网络,世界上任何计算机都可以互相访问. 实现的原理基于网络通讯的互联网交互五层模型. 计算机网络的历史发展 当计算机网络技术初始利用的时代,几台计算机通过集线器连接,就可以实现网 ...
- 入门-windows下安装ETH挖矿
对刚入门的区块链开发者来说,刚开始可以在windows本地搭建私有链,便于操作,毕竟,要想真正挖到币还是有难度的,下面以ETH为例,在windows环境下安装并实现挖矿. 步骤一.安装geth环境.下 ...
- 关于visual studio 2015 智能提示英文,而非中文的解决方案
关于visual studio 2015 智能提示英文,而非中文的解决方案: 找到这个目录 C:\Program Files (x86)\Reference Assemblies\Microsof ...