代碼結構:

目標架構:
1.用例分析器,自動根據接口的參數,類型生成測試用例
2.數據分析器,自動維護接口參數數據,動態數據自動生成,返回結果自動查詢判斷
3.核心調用引擎,分SOAP和HTTP兩種,調用用例,返回接口調用的結果
4.報告輸出,統計用例通過率,錯誤日志,數據庫持久化,持續集成
目前實現功能:
核心調用引擎,數據分析器(demo)
1.用例結構(更新)
excel分兩個sheet,sheet1中存放用例,結構如下

sheet2中存放測試環境host,接口wsdl地址,接口方法間的映射關系,結構如下:

第一行是host和wsdl路徑的映射關系,
2,3,4列就是wsdl和接口方法的映射關系
建立這個映射關系呢有幾點好處:
1.sheet1中的用例設計簡潔了不少;2.測試環境變更或者wsdl變化的話,改動很方便
映射關系保存為兩個字典,實現方法如下:
def getSoaConf(uri,sheetIndex=1): """ :rtype : list """ confList = data2List(uri,sheetIndex) max_len = len(confList[0]) #列數,即有多少wsdl row_len = len(confList) #行數,即最多的方法數 Ip_Wsdl_dict = {} Wsdl_Method_dict = {} Ip_Wsdl_dict[confList[0][0]] = [] #confList[0][0]是ip地址 for i in range(1,max_len): Ip_Wsdl_dict[confList[0][0]].append(confList[0][i]) #ip_wsdl字典的key是ip,value就是對應的wsdl路徑列表了 Wsdl_Method_dict[confList[0][i]] = [] #wsdl_method字典的key是wsdl,value定義為列表 for j in range(1,row_len): method=confList[j][i] if method != '': Wsdl_Method_dict[confList[0][i]].append(confList[j][i]) return [Ip_Wsdl_dict,Wsdl_Method_dict]
傳參即文件地址,默認讀取sheet2中的配置信息
2.SOAP調用通用方法更新
運用反射機制實現接口和接口方法的傳參調用,實現方法如下:
#! /usr/bin/python # coding:utf-8 import sys reload(sys) sys.setdefaultencoding( "utf-8" ) from suds.client import Client from suds.xsd import sxbasic def SoaRequest(wsdl,fnname,data): #soap接口調用方法 sxbasic.resultList=[] #初始化location列表 soaService = Client(wsdl).service soaRep = getattr(soaService,fnname)(data) return soaRep
【PS: sxbasic.resultList=[] #初始化location列表 這句的意思請參考我的另一篇博文《記 suds 模塊循環依賴的坑-RuntimeError: maximum recursion depth exceeded》】
實現通用的好處就是不用每個接口方法都單獨在代碼中定義對應的類和方法以實現調用
3.數據分析器的實現(demo)
接口自動化有個麻煩的地方就是數據庫中的數據每天都有變化,不能保證每次調用的結果都和最初設計的時候一致,而保持數據新鮮有效的方案就是:指定一個規則自動生成(從數據庫中查詢或隨機生成)
數據的對接就在參數傳入調用方法前進行替換就OK了
如接口傳入參數中有手機號,而手機號的規則我們都知道,在excel中定義對應的value格式為"[Phone]"
代碼中遍歷字符串類型的value查到以[,]包括的值,再字符串匹配對應的判斷分支,執行對應的處理方法,再把返回值賦值給對應的Key就可以實現數據的動態更新和替換
