httprunner學習12-hook 機制實現setup和teardown


前言

unittest框架里面有個非常好的概念:前置( setUp )和后置( tearDown )處理器,真正會用的人不多。
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個簡單函數

# 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_hooksteardown_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用例里面的前置和后置操作是針對單個用例的


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM