前言
在httprunner里面,每個 YAML / JSON
文件的腳本都是獨立運行的,有時候我們希望能跨文件使用公用的參數。
比如登錄生成一個token,后面的用例都可以去引用這個token值,或者有些復雜的邏輯,需要寫個函數去實現,比如操作數據庫,加密解密等。
httprunner中可以使用 debugtalk.py
寫輔助函數,實現復雜的功能。
登錄函數獲取token
新建一個debugtalk.py
文件,寫個登錄函數,返回token值
import requests
host = "http://127.0.0.1:8000/"
def token(user="test", psw="123456"):
'''
登錄獲取token # # 上海悠悠,QQ交流群:750815713
:param user: 用戶名
:param psw: 密碼
:return: token
'''
login_url = host+"api/v1/login/"
headers = {
"Content-Type": "application/json"
}
body = {
"username": user,
"password": psw
}
r = requests.post(login_url, headers=headers, json=body)
try:
return_token = r.json()["token"]
except:
print("大兄弟,返回的不是標准json格式,或者沒取到token, 別問我為什么報錯, 因為返回內容:\n %s" % r.text)
return_token = ''
return return_token
if __name__ == "__main__":
print("獲取到token值:%s" % token())
運行結果:
獲取到token值:e388bfc10ca99135d1d58c00a1091311a0f0d48c
引用token
debugtalk.py
同一目錄下新建一個 test_info_demo.yml
文件,引用 debugtalk.py
里面的函數使用${token()}
- config:
name: logincase
variables: {}
# 上海悠悠,QQ交流群:750815713
- test:
name: get user info case1
request:
url: http://127.0.0.1:8000/api/v1/user/info/
method: GET
headers:
Content-Type: application/json
User-Agent: python-requests/2.18.4
Authorization: Token ${token()} # 引用token
validate:
- eq: [status_code, 200]
- eq: [headers.Content-Type, application/json]
- eq: [content.0.age, 20]
- eq: [content.0.name, yoyo]
- eq: [content.0.mail, 283340479@qq.com]
給函數傳參數,可以使用 ${token(test1, 123456)}
或者傳變量 ${token($user, $psw)}
運行用例
hrun test_info_demo.yml
D:\soft\projectdemo>hrun test_info_demo.yml
get user info case1
INFO GET http://127.0.0.1:8000/api/v1/user/info/
INFO status_code: 200, response_time(ms): 199.26 ms, response_length: 190 bytes
INFO start to validate.
.
----------------------------------------------------------------------
Ran 1 test in 0.653s
OK
INFO Start to render Html report ...
INFO Generated Html report: D:\soft\projectdemo\reports\1569424911.html