1. 程式人生 > 其它 >分層封裝的介面測試框架

分層封裝的介面測試框架

目的:

避免自動化工程的多耦合性和維護性差的問題:介面、引數、斷言糅雜在case中,一個改變則整個工程都改變

實現:

  工程分為api層+配置層+util層+日誌+報告+資料層

  1. 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執行,繼續優化完善框架。