Httprunner框架背景介紹略
參考本博客的另一篇文章![搭建HTTPRUNNER框架接口測試DEMO](https://blog.csdn.net/u011466469/article/details/103049963)
熟知的動態參數關聯
這裏不講參數化數據驅動:csv或者其他數據類型的形式
先以一個用戶成功登錄之後獲取登錄token的參數關聯爲例
下一個接口需要登錄接口返回的token進行身份驗證
- 思路:按照接口測試工具的用法:獲取登錄接口返回的token,或是代碼實現接口測試
- 好在httprunner框架中,提供了extract關鍵字:提取響應報文中的動態參數
"extract":[{
"token":"content.content.token"
}]
tips:第一個content是接口響應報文的整體,後面.接的纔是json報文的關鍵字參數
- 這是一種方法,但有一個弊端:如果有多個json測試用例文件都需要用到token,需要每個測試用例文件都請求一次登錄接口,那麼有沒有解決辦法呢?
在每個json測試用例中都加入一個登錄接口,並且提取token有效參數,在一定場景中引用並無不妥
- 框架中支持debugtalk.py熱處理文件,那麼將登錄接口寫在debugtalk.py文件中,json測試用例文件${your_function()}調用即可:
#!/usr/bin/python3
'''
# -*- encoding=utf-8 -*-
Created on 2019年11月18日下午12:11:17
@author: qguan
@file:smallTools.debugtalk.py
'''
import requests
import json
def get_token(token=1):
session=requests.Session()
data= { "app_version": "8.10.7",
"channel": "ios",
"device": "ios",
"device_name": "iPhone 8 Plus",
"device_uid": "9E6C9FFF-21DF-4B6D-B05B-FF4C30203406",
"mobile": "13800138000",
"password": "123456",
"push_token": "be279582bfbf63ec5f80ee79471ee75c",
"system_version": "13.1.3",
"zone": "+86"
}
headers={ "Content-Type": "application/x-www-form-urlencoded; charset=utf-8",
"__btg_request_identify_uuid": "1234567",
"User-Agent": "IeltsBro/1 CFNetwork/1107.1 Darwin/19.0.0"
}
res=session.request(method="POST", url="https://xxxxxxxxxxxxxx/v1/app_users/password_login", data=data,headers=headers)
json_data=json.loads(res.text)
if token==1:
return json_data['content']['token']
else:
return json_data['content']['user_center_token']
if __name__ == '__main__':
print(get_token(1))
- 示例:json測試用例中調用debugtalk.py寫好的方法即可:
"teststeps": [
{
"name": "/info/basic_info",
"request": {
"url": "https://xxxxxxx/info/basic_info",
"params": {
"token": "${get_token(1)}"
},
"method": "GET",
"headers": {
"User-Agent": "IeltsBro/1 CFNetwork/1107.1 Darwin/19.0.0"
}
},
"validate": [
{
"eq": [
"status_code",
200
]
},
{
"eq": [
"content.status",
0
]
}
]
}
]
- 上面一看並沒有什麼不妥,但是當測試用例teststeps多的時候,在reports查看報告中發現每次token的值都不一樣?那麼是什麼意思?你懂的。爲了避免多次請求登錄接口該如何做?
- 框架在json測試用例中提供了公共參數變量variables
"variables": {
"token":${get_token(1)}
}
- 在測試用例直接$token引用參數即可,與extract關鍵字提取參數用法無異,保證了登錄接口只調用了一次。
如此簡單的解決了httprunner動態參數關聯的方案。