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