接口測試中,有些場景接口間存在着數據依賴的問題,比如說提交訂單前需要用戶先登錄等等,下面就用兩個小案例說說數據依賴的問題。
兩個接口,一個接口(project_add)用來創建測試項目,一個接口(env_add)用來創建測試環境,env_add接口需依賴project_add接口返回的project_id字段數據。
一、Postman解決數據依賴的問題
第一步,project_add接口,Tests中寫js代碼,將需依賴的字段添加到環境變量中
第二步:在env_add接口的Pre-request Script 中寫js代碼,把第一個接口拿到的參數賦值
第三步:再將project_id配置到Body中prj_id字段中
這樣數據依賴的問題就搞定了
二、用python代碼實現接口數據依賴
用代碼解決數據依賴的方法有多種,下面用反射來解決數據依賴的問題。
反射它可以把字符串映射到實例的變量或者實例的方法然后,可以去執行調用、修改等操作。
它有四個重要的方法:
- getattr 獲取指定字符串名稱的對象屬性
- setattr 為對象設置一個對象
- hasattr 判斷對象是否有對應的對象(字符串)
- delattr 刪除指定屬性
class RelyData(object): project_id = None print(RelyData.project_id) setattr(RelyData, "project_id", "111") print(getattr(RelyData, "project_id"))
定義了一個RelyData()類,里面設置了一個類屬性,project_id=None,然后再用setattr函數為對象RelyData里面project_id屬性設置了新值,最后再用getattr函數取出里面的值,這是個屬性值替換的過程。
class Test(unittest.TestCase): def setUp(self): pass def test_1(self): """添加項目接口""" url = "http://127.0.0.1:8000/base/project_add/" headers = {'Content-Type': 'application/x-www-form-urlencoded'} datas = {"prj_name": "baidu search", "description": "百度搜索"} response = requests.post(url, data=datas, headers=headers) print("response: ", response.json()) result = response.json() # 給RelyData里面的project_id=None的類屬性設置新的屬性 setattr(RelyData, "project_id", result.get("project_id")) def test_2(self): """添加環境接口,需依賴添加項目接口返回的project_id字段數據""" url = "http://127.0.0.1:8000/base/env_add/" headers = {'Content-Type': 'application/x-www-form-urlencoded'} datas = { "env_name": "百度測試環境", "url": "www.baidu.com", # getattr(RelyData,'project_id'),取出里面的屬性值 "prj_id": getattr(RelyData, "project_id"), "description": "SIT測試環境" } response = requests.post(url, data=datas, headers=headers) print("response: ", response.json()) if __name__ == '__main__': unittest.main()
新開了個QQ群,有問題歡迎進群溝通:976036741