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

摘要:
HttpRunner实际上是一个从单元测试框架,它也有一个前端设置_钩子和后拆卸_钩子的概念。将hook机制添加到config将setup添加到config_ Hooks和teardown_ Hooks实际上等同于unittest中setUpClass和teardDownClass的概念。“)在test_hook_demo.yml文件#Shanghai Youyou,QQ通讯组:750815713 config:name:test_demoveables:{}setup_hooks:-${hook_up()}teardown_hooks:-${hook_down()}-test:name:test _democase1request:url:http://127.0.0.1:8000/api/test/demomethod:GETheaders:Content-类型:application/jsonUser Agent:python requests/2.18.4 json:用户名:测试密码:123456extract:-mail:content。数据0.mail#提取mailvalidate:-eq:[status_code,200]-equals:[content.code,0]-eequals:[content.msg,success!INFOStartorenderHtmlreport…INFOGeneratedHtmlreport:D:softuntitledprojectdemoreports1569512002.html执行后,您会发现config中的setup_hooks作用域是整个脚本文件,它只在测试开始前执行一次,通常用于测试的数据准备。teardown_hooks只在测试用例结束后执行一次ch通常用于数据清理。
前言

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:softuntitledprojectdemo>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:softuntitledprojectdemo
eports1569512002.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:softuntitledprojectdemo>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:softuntitledprojectdemo
eports1569512879.html

运行结果可以看出,在test用例里面的前置和后置操作是针对单个用例的

转:https://www.cnblogs.com/yoyoketang/p/11595125.html

免责声明:文章转载自《httprunner学习-hook 机制实现setup和teardown》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Mysql导出逗号分隔的csv文件WPF笔记(3)TreeView下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

linux 中awk命令实现统计列的频数

linux 中awk命令实现统计频数 1、 root@PC1:/home/test# ls a.txt root@PC1:/home/test# cat a.txt 3 4 6 3 2 4 8 2 1 5 6 2 4 3 6 1 2 4 7 3 3 4 7 2 root@PC1:/home/test# awk '{s[$3]++} END {for (i...

ubuntu安装配置telnet

1. sudo apt-get install xinetd telnetd 2. 安装成功后,系统也会有相应提示: sudo vi /etc/inetd.conf并加入以下一行 telnet stream tcp nowait telnetd /usr/sbin/tcpd /usr/sbin/in.telnetd 3. sudo vi /etc/xin...

logstash配置文件详解

logstash配置文件详解 logstash pipeline 包含两个必须的元素:input和output,和一个可选元素:filter。 从input读取事件源,(经过filter解析和处理之后),从output输出到目标存储库(elasticsearch或其他)。 在生产环境使用logstash,一般使用都将配置写入文件里面,然后启动logst...

[精华] FreeBSD-FAQ集锦(二)

3:我现在开始学习使用FreeBSD,我应该从什么地方开始? Resources for Newbies http://www.freebsd.org/projects/newbies.html 4:可以从什么地方得到FreeBSD的光盘? ftp://ftp.freebsd.org/pub/FreeBSD/releases/i386/ 5:我应该怎么安装...

MySQL慢日志功能分析及优化增强

此文已由作者温正湖授权网易云社区发布。 欢迎访问网易云社区,了解更多网易技术产品运营经验。 MySQL慢日志(slow log)是MySQL DBA及其他开发、运维人员需经常关注的一类信息。使用慢日志可找出执行时间较长或未走索引等SQL语句,为进行系统调优提供依据。本文结合线上案例分析如何正确设置MySQL慢日志参数和使用慢日志功能,并介绍网易云RDS对M...

vue 文件上传

  学习参考地址: http://www.cnblogs.com/zhengweijie/p/6922808.html#3920491 依赖js文件: http://files.cnblogs.com/files/zhengweijie/jquery.form.rar HTML 文本内容: <template>   <div id="ac...