HttpRunner學習8--使用debugtalk.py輔助函數


前言

在HttpRunner中,我們的測試用例都是寫在 YAML/JSON 文件中,有時候我們想借助代碼來實現某些較復雜的功能,但在 YAML/JSON 中是無法直接寫代碼來處理的,這個時候,我們可以借助 HttpRunner 中的輔助函數 debugtalk.py 來完成。

HttpRunner使用文檔中的說明:

  • HttpRunner 的實現方式為,支持熱加載的插件機制(debugtalk.py),可以在 YAML/JSON 中調用 Python 函數。
  • 具體地做法,我們可以在測試用例文件的同級或其父級目錄中創建一個 debugtalk.py 文件,然后在其中定義相關的函數和變量。

本人環境:HttpRunner V1.5.8

測試場景

在之前的文章 HttpRunner學習3--extract提取數據和引用 中,我們模擬的是一個學生充值金幣的接口,這個接口有權限驗證,我們需要先通過接口A登錄,然后在接口B中進行充值操作。

學生金幣充值接口:http://doc.nnzhp.cn/index.php?s=/6&page_id=11

在這里,我們可以借助輔助函數,在 debugtalk.py 中寫python代碼實現登錄,並返回后續cookie進行身份驗證所需要的信息,最后直接在 YAML 用例腳本中進行引用。

通過Python代碼登錄獲取Cookie

首先,創建一個Python文件,文件名為 debugtalk.py ,我們需要把一個登錄函數的代碼寫到該文件中。在這里,登錄函數將直接返回后續充值操作所需要的 cookie ,格式如下:用戶名=登錄接口返回的sign,debugtalk.py 文件內容如下:

import requests

base_url = "http://api.nnzhp.cn"
def get_cookie(username="test1010", passwd="aA123456"):
    url = base_url + "/api/user/login"
    headers = {
        "Content-Type":"application/x-www-form-urlencoded",
        "User-Agent": "Fiddler"
    }
    body = {
        "username": username,
        "passwd": passwd
    }
    res = requests.post(url, headers=headers, data=body)
    try:
        sign = res.json()["login_info"]["sign"]
    except:
        sign = ""
    cookie = "{}={}".format(username, sign)
    return cookie

if __name__ == '__main__':
    cookie = get_cookie()
    print(cookie)

上面的代碼中,如果登錄失敗時,res.json()["login_info"]["sign"] 會提示錯誤 "KeyError" ,因此用 try...except 進行了簡單的異常處理,當登錄失敗時,返回一個 "" 空字符串。

YAML文件中引用Cookie

在 debugtalk.py 中自定義函數返回數據后,我們要怎么去引用返回的數據呢?

先在 debugtalk.py 同一目錄下創建 YAML/JSON 測試用例文件,如在YAML 測試用例中,對 debugtalk.py 中自定義的 get_cookie() 函數進行引用,可使用 ${get_cookie()}

        Cookie: ${get_cookie()}

當然,也可以在引用的時候給函數傳參數,如果參數是固定值,則可以這樣寫 ${get_cookie(test1010, aA123456)},如果參數是變量,則是 ${get_cookie($username, $passwd)} 等。

運行用例

完整的YAML格式用例如下:

- config:
    name: debugtalk test
    request:
      base_url: http://api.nnzhp.cn

- test:
    name: add gold
    request:
      url: api/user/gold_add
      method: POST
      headers:
        Content-Type: application/x-www-form-urlencoded
        User-Agent: Fiddler
        Cookie: ${get_cookie()}
      data:
        stu_id: 2114
        gold: 500
    validate:
      - eq: [status_code, 200]
      - eq: [content.error_code, 0]
      - eq: [content.msg, "操作成功!"]

接下來便可以運行用例了,得到后的報告如下:

測試報告


免責聲明!

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



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