前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >httprunner学习12-hook机制

httprunner学习12-hook机制

作者头像
上海-悠悠
发布2019-09-29 14:07:52
7250
发布2019-09-29 14:07:52
举报

前言

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

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

config添加hook机制

在config里添加 setup_hooksteardown_hooks 实际上相当于unittest里面的 setUpClasstearDownClass 的概念。 它的作用是在整个 YAML/JSON 文件的用例只执行一次。接下来看下案例的执行情况就知道了,在debugtalk.py写2个简单函数

代码语言:javascript
复制
# debugtalk.py
# 上海悠悠,QQ交流群:750815713

def hook_up():
    print("前置操作:setup!")

def hook_down():
    print("后置操作:teardown!")

test_hook_demo.yml 文件写以下2个test用例

代码语言:javascript
复制
# 上海悠悠,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]

执行用例

代码语言:javascript
复制
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_hooksteardown_hooks,它的作用域是当前test用例有效,以下是用过简单的输出log的函数,主要看下运行的顺序

代码语言:javascript
复制
# debugtalk.py

def hook_log(var=''):
    print("用例执行log:%s" % var)

在test_hook_demo2.yml 文件写以下2个test用例

代码语言:javascript
复制
# 上海悠悠,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 结束---------)}

运行结果

代码语言:javascript
复制
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用例里面的前置和后置操作是针对单个用例的

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-09-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 从零开始学自动化测试 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • config添加hook机制
  • test用例添加hook机制
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档