分層封裝的介面測試框架
阿新 • • 發佈:2021-11-10
目的:
避免自動化工程的多耦合性和維護性差的問題:介面、引數、斷言糅雜在case中,一個改變則整個工程都改變
實現:
工程分為api層+配置層+util層+日誌+報告+資料層
-
Baseapi層是api的父類,其中在__init方法中初始化一個requestUtil物件
(RequestUtil物件實現了從配置檔案中讀取對應域名,完成請求url的拼接,請求引數的替換)
class base_api: def __init__(self): self.req = requestUtil() def api(self,reqdata):#將引數轉化為字典結構 #將字典使用關鍵字傳參**req傳遞給request方法 '''關鍵字傳參,引數有啥就傳啥,不用指定''' result = requests.request(**reqdata)#關鍵字傳參 return result
2.Api層:
一個介面是一個方法 ,請求資訊配置在yaml檔案中(yaml檔案封裝了請求url、method、parm)
#1.從yaml讀取到對應url的配置 #2.替換url的域名 #3.替換引數 queryparm: method: get url: /mtx/queryparam params: id: $id name: $name getuser: method: get url:/getuser params: id: $id
【說明】api層繼承baseapi父類,api層的每一個方法就實現了一個介面呼叫,有3個步驟:
1.從yaml讀取到對應url的配置
2.呼叫requestUtil的方法去替換url的域名和引數
3.請求介面並返回
from api.base_api import base_api from util.yamlUtil import yamlUtil class testApi(base_api): def queryparm(self, parms): # 將引數寫在yaml檔案中,作為資料驅動# 1.從yaml讀取到對應url的配置 # 2.呼叫requestUtil的方法去替換url的域名和引數 # 3.請求介面並返回 data = yamlUtil("../api/getquery.yaml").readyaml() interface = data["queryparm"] interface = self.req.makeInterface(interface,parms) result = self.api(interface) return result
3.用例資料的傳遞
用例資料使用yaml資料驅動完成,寫在data這個package下
4.用例層
Base_testcase :將case中都需要用到的例項化的步驟寫在basecase的__init方法中
Testcase層:呼叫api層,完成業務呼叫,並進行斷言,如果是資料驅動的用例,需要將斷言也寫到datayaml中
5.配置層
util 這個package下目前僅將環境資訊配置到yaml中
- RequestUtil:使用對應環境的域名拼接url,並替換引數
- StringUtil:實現字串的處理,主要進行yaml中引數替換
- YamlUtil:讀取yaml
11月10日備註:
此文章僅為學習pytest介面自動化框架初步整理,後期還需要增加post等其他請求方法、日誌、報告處理部分,增加多業務case執行,繼續優化完善框架。