接口自動化測試框架封裝目的:
簡化自動化框架的落地,提高投入和產出比,只要一個人封裝好框架,另外的測試通過寫yaml測試用例即可實現接口自動化
1.統一請求的封裝
去除多余重復的代碼
可跨py文件實現通過一個session來自動關聯有cookie的接口
設置統一公共參數,統一文件處理,統一異常處理,統一日志監控,統一的用例校驗等
import requestsclass RequestUtil:sess = requests.session();def send_all_request(self,**kwargs):#處理公共參數total_headers= {'Accept-Encoding': 'gzip, deflate','Accept-Language': 'zh-CN,zh;q=0.9,kog=0.8','User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36','X-Requested-With': 'XMLHttpRequest'}for key,value in kwargs.items():if key == 'headers':kwargs["headers"].update(total_headers)res = RequestUtil.sess.request(**kwargs)return res
class Test_api:def test_login(self):headers = {'Content - Type': 'application/json','Accept': ' * / * '}res=RequestUtil().send_all_request(method=method,url=url,json=jsondata,headers=headers)data = {"token":jsonpath.jsonpath(res.json(),'$.data.token',)[0]}write_yaml(data)print(data)print(res.json())
2.數據和代碼分離實現數據驅動
將測試數據與測試代碼完全分離,提高代碼復用性,便于維護和擴展測試用例
直接把測試數據寫入yaml文件,寫一個讀取yaml文件的方法即可訪問數據
讀取yaml文件前需要線安裝pyyaml和導入yaml模塊
在common目錄下新建yaml_util.py文件
讀取yaml文件方法?
def read_testcasecreatAC(yaml_path):with open("test_creatActivity.yaml",encoding="utf-8")as f:value = yaml.safe_load(f)return value
- 數據提取:
- URL:caseinfo["request"]["url"]
- 方法:caseinfo["request"]["method"]
- 數據:caseinfo["request"]["json"]
- 頭部:caseinfo["request"]["headers"]
@pytest.mark.parametrize("caseinfo", read_testcasecreatAC("test_creatActivity.yaml"))def test_creatActivity(self,caseinfo):url = caseinfo["request"]["url"]method = caseinfo["request"]["method"]headers = caseinfo["request"]["headers"]headers["User_token"] = read_yaml("token")e = headers["User_token"]json= caseinfo["request"]["json"]res = RequestUtil().send_all_request(method=method,url=url,json=json,headers=headers)res.status_code == 200
- 動態傳參:從yaml讀取token值并更新請求數據
- 用例結構:
- 參數傳遞:caseinfo參數接收yaml中的數據字典
- 讀取方法:使用@pytest.mark.parametrize裝飾器讀取yaml文件
- feature:表示接口所屬模塊
- story:接口名稱
- title:用例標題
- request:包含method、url等請求信息
- validate:斷言內容
yaml文件數據用例:?
-feature: 抽獎系統story: 創建活動接口title: 驗證創建活動接口正常返回request:method: posturl: http://82.157.143.27:8083/activity/createjson:activityName: "抽獎測試"description: "測試"activityPrizeList:- prizeId: 26prizeAmount: 1prizeTiers: "FIRST_PRIZE"- prizeId: 25prizeAmount: 1prizeTiers: "SECOND_PRIZE"activityUserList:- userId: 61userName: "李向陽"- userId: 60userName: "張三"headers:User_token: ""Content-Type: 'application/json'Accept: "application/json"validate: null