httprunner 2.x學習12-在testcase中傳遞變量(output)


前言

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 就可以找到了。


httprunner 2.x實戰教程點我 ->立即報名


免責聲明!

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



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