前言
httprunner 2.x 的版本,testcase 可以引用 api, 同樣的 testcase 也可以引用另外一個 testcase 文件
在2個 testcase 中傳遞變量可以用到 output 關鍵字
testcase 導入 api
測試用例(testcase) 是測試步驟的按順序組織的,測試步驟也就是對應 api 里面的每個接口
場景案例:
A接口登錄接口文檔基本信息
訪問地址:http://127.0.0.1:8000/api/v1/login/
請求類型:POST
請求頭部:application/json
請求參數:{"username":"test", "password":"123456"}
B接口查詢商品信息
訪問地址:http://127.0.0.1:8000/api/v2/goods?page=1&size=2
請求類型:GET
請求頭部token參數: Authorization: Token xxxxx login token xxxxx
於是在 api 層寫 2 個 api
login.yml
# 作者-上海悠悠 QQ交流群:717225969
# blog地址 https://www.cnblogs.com/yoyoketang/
name: 用戶賬戶登錄
base_url: http://127.0.0.1:8000
variables:
user: test1
psw: "123456"
request:
url: /api/v1/login
method: POST
json:
username: $user
password: $psw
validate:
- eq: [status_code, 200]
- eq: [headers.Content-Type, application/json]
get_goods.yml
# 作者-上海悠悠 QQ交流群:717225969
# blog地址 https://www.cnblogs.com/yoyoketang/
name: 查詢全部商品
base_url: http://127.0.0.1:8000
variables:
page: 1
size: 5
request:
url: /api/v2/goods
method: GET
headers:
Authorization: Token $token
params:
page: $page
size: $size
validate:
- eq: [status_code, 200]
在 testcases 層引用 api ,步驟1 用extract 提取token變量,在步驟2里面,api里面雖然沒定義token,但是可以引用到步驟1 提取的token。
# 作者-上海悠悠 QQ交流群:717225969
# blog地址 https://www.cnblogs.com/yoyoketang/
config:
name: 登陸后,查詢商品詳情
teststeps:
-
name: 測試步驟:login
api: api/login.yml
extract:
token: content.token
-
name: 測試步驟:查詢商品詳情
variables:
page: 1
size: 2
api: api/get_goods.yml
validate:
- eq: [content.code, 0]
- eq: [content.msg, success!]
output 全局變量
如果對上面的參數傳遞不太理解,可以在config 加上 output 關鍵字,把步驟 1 提取的token變量設置為全局變量,使它在整個yaml文件的步驟中都會生效
# 作者-上海悠悠 QQ交流群:717225969
# blog地址 https://www.cnblogs.com/yoyoketang/
config:
name: 登陸后,查詢商品詳情
output:
- token
teststeps:
-
name: 測試步驟:login
api: api/login.yml
extract:
token: content.token
-
name: 測試步驟:查詢商品詳情
variables:
page: 1
size: 2
api: api/get_goods.yml
validate:
- eq: [content.code, 0]
- eq: [content.msg, success!]
運行結果會看到 Output 把變量輸出到控制台,這樣有個好處,可以方便查看變量的值是否正確,方便調試
INFO
==================== Output ====================
Variable : Value
---------------- : -----------------------------
token : 85da1cb0448b62d451bb5db1cd214cccd1bc139a
------------------------------------------------
INFO Start to render Html report ...
INFO Generated Html report: D:\hrun2\reports\20210415T041914.869893.html
Sentry is attempting to send 0 pending error messages
Waiting up to 2 seconds
Press Ctrl-Break to quit
output 可以在 testcase 間傳遞變量值
httprunner 2.x 的版本,testcase 可以引用 api, 同樣的,testcase 也可以引用另外一個 testcase 文件,如何2個 testcase 之間需要傳遞變量,這個時候可以用output把變量暴露出來,給下個步驟引用。
有些同學喜歡偷懶,覺得前面的用例是一大串的步驟,下個用例的步驟接着前面的用例,於是可以導入前面的用例。
當然 httprunner2.x 是支持這樣做的,其它的框架並不支持。(我個人也不建議這樣做,測試用例容易混亂,測試用例設計原則:我們要保證每個用例的獨立性,不要依賴其它用例的結果。)
先在 testcases/test_login_success.yml 中提取 token,接着在 config 里 設置全局變量 token
# 作者-上海悠悠 QQ交流群:717225969
# blog地址 https://www.cnblogs.com/yoyoketang/
config:
name: 登陸接口-輸入正確賬號,正確密碼,登陸成功
output:
- token
teststeps:
-
name: 測試步驟:login
api: api/login_base_url.yml
variables:
user: test1
psw: "123456"
extract:
token: content.token
validate:
- eq: [content.code, 0]
- eq: [content.msg, login success!]
- len_eq: [content.token, 40]
於是下個testcase/test_goods_all.yml 可以引用testcase
# 作者-上海悠悠 QQ交流群:717225969
# blog地址 https://www.cnblogs.com/yoyoketang/
config:
name: 登陸后,查詢商品詳情
teststeps:
-
name: 測試步驟:引用testcases test_login_success.yml
testcase: testcases/test_login_success.yml
-
name: 測試步驟:查詢商品詳情
variables:
page: 1
size: 2
token: $token
api: api/get_goods.yml
validate:
- eq: [content.code, 0]
- eq: [content.msg, success!]
下個 api 步驟需重新引用下 $token 就可以找到了。