一、在搭建接口自動化測試框架前,我覺得先需要想明白以下幾點:
① 目前情況下,絕大部分接口協議是http,所以需要對http協議有個基本的了解,如:http協議請求、響應由哪些部分組成,常用的method,對應的請求傳參方式等等
② 需要對接口發送請求,所以要對可以發送http請求的模塊比較熟悉,如python 的requests、urllib 等
③ 使用的數據承載工具,如使用excel、mysql、oracle 等
④ 實現哪些需求,如 在用例層面控制是否執行用例,響應信息、執行結果、失敗原因等等寫入數據載體,可變參數分離的配置化,測試結束后郵件發送結果給相關人員等等
⑤ 發送請求前需要解決哪些問題,如 上下接口間的關聯(包含請求參數與關聯參數的映射關系)、url的拼接等等;請求后的斷言等等
⑥ 其他的,如涉及到接口加密、調用其他語言的方法等等
二、下面是實現的思路:
先遍歷接口列表》查找出需要測試的接口》根據接口找到對應的用例》
遍歷該接口的用例》找出需要執行的用例》判斷用例是否與其他接口有關聯》
處理關聯關系》拼接請求url及參數》發送請求》斷言用例是否通過》寫入結果內容》發送郵件
三、框架模塊基本結構(數據載體使用excel)
關聯示例:

參數配置示例:

日志示例:

四、主函數詳細代碼(即第二步的思路實現)
from utils.ParseExcel import *
from config.PbulicConfigData import *
from action.GetRely import GetRely
from utils.HttpRequest import HttpRequest
from action.AssertResult import AsserResult
from utils.GetDateOrTime import GetDateOrTime
from utils.SendEmail import Carry_files_EmailSender
import time
def main():
parseE=ParseExcel(ExcelPathAndName)
#遍歷接口列表
wb=parseE.GetWorkBook()
for idx,cell in enumerate(parseE.GetColumns("API",API_active)[1:],2):
#print(idx,cell.value)
if cell.value=="y":
#print(ord(API_apiName)-64,API_apiName)
#ApiName=parseE.GetValueOfCell("API",columnNo=ord(API_apiName)-64,rowNo=idx)
RequestUrl=parseE.GetValueOfCell("API",columnNo=ord(API_requestUrl)-64,rowNo=idx)
RequestMothod=parseE.GetValueOfCell("API",columnNo=ord(API_requestMothod)-64,rowNo=idx)
ParamsType=parseE.GetValueOfCell("API",columnNo=ord(API_paramsType)-64,rowNo=idx)
ApiCaseSheet=parseE.GetValueOfCell("API",columnNo=ord(API_apiTestCaseFileName)-64,rowNo=idx)
#print(ApiName,RequestUrl,RequestMothod,ParamsType,ApiCaseSheet)
for i,c in enumerate(parseE.GetColumns(ApiCaseSheet,CASE_active)[1:],2):
#print(i,c.value)
if c.value=="y":
RequestData=parseE.GetValueOfCell(ApiCaseSheet,columnNo=ord(CASE_requestData)-64,rowNo=i)
RelyData=parseE.GetValueOfCell(ApiCaseSheet,columnNo=ord(CASE_relyData)-64,rowNo=i)
CheckPoint=parseE.GetValueOfCell(ApiCaseSheet,columnNo=ord(CASE_checkPoint)-64,rowNo=i)
#依賴關系處理
RequestData=GetRely(parseE,RequestData,RelyData)
print("-----------處理依賴關系后的請求參數---------:",RequestData)
print("-----------依賴關系---------:",RelyData)
print( "-----------檢查點參數---------:",CheckPoint)
Response=HttpRequest.request(RequestUrl,RequestMothod,ParamsType,spacer,requestData=RequestData)
print("-------------------接口響應-----------------:",Response.text)
Assertresult=AsserResult.CheckResult(Response.text,CheckPoint)
print(Assertresult)
testTime=GetDateOrTime.GetDates("-")
#寫入結果
parseE.WriteValueInCell(ApiCaseSheet,Response.status_code,rowNo=i,columnNo=ord(CASE_responseCode)-64)
parseE.WriteValueInCell(ApiCaseSheet,Response.text,rowNo=i,columnNo=ord(CASE_responseData)-64)
print("-----------",Assertresult[1])
if Assertresult[0]=="ture":
parseE.WriteValueInCell(ApiCaseSheet, Assertresult[0], rowNo=i, columnNo=ord(CASE_status) - 64,colour="green")
else:
parseE.WriteValueInCell(ApiCaseSheet,str(Assertresult[1]), rowNo=i, columnNo=ord(CASE_failedReason)-64,colour="red")
parseE.WriteValueInCell(ApiCaseSheet, Assertresult[0], rowNo=i, columnNo=ord(CASE_status) - 64,colour="red")
parseE.WriteValueInCell(ApiCaseSheet, testTime, rowNo=i, columnNo=ord(CASE_testTime) - 64)
wb.save(ResultPathAndName)
time.sleep(10)
#發送郵件
if switch==1:
sender=Carry_files_EmailSender()
sender.send_email(to_email_list,subject,body,files_part=ResultPathAndName)
if __name__=="__main__":
main()
