python接口自動化框架搭建


一、在搭建接口自動化測試框架前,我覺得先需要想明白以下幾點:

  ① 目前情況下,絕大部分接口協議是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()

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM