您好,登錄后才能下訂單哦!
這篇文章主要介紹了怎么利用Python實現數據驅動的接口自動化測試,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。
1、需求
某API,GET方法,token,mobile,email三個參數
token為必填項
mobile,email 必填其中1項
mobile為手機號,email為email格式
2、方案
針對上面的API,在做接口測試時,需要的測試用例動輒會多達10+, 這個時候采用數據驅動的方式將共性的內容寫入配置文件或許會更合適。
這里考慮把API、參數、以及預期結果預行在格式化的CSV里保存,利用csv組件從CSV里讀取URL、參數以及預期結果,Requests組件發起請求,將響應結果與預期結果進行比對,最后把比對結果寫到結果CSV。
流程如下圖 ?
3、實現
1、在上代碼之前,先安裝好如下幾個組件:
csv 讀寫CSV文件
json
requests 發起請求,獲取響應結果
unittest 測試用例調度
2、data.csv(本示例選取部分用例)
3、reader_CSV函數代碼示例
import csv import json import requests import time import unittest def readCSV(self,filename): ''' :param filename: 需要讀取的數據文件 :return: [{data1},{data2}...] ''' datas = [] try: #以DictReader的方式讀取數據文件,方便與json互做轉換 with open(filename,'r') as csvfile : #從文件里讀取到的數據轉換成字典列表的格式 reader = csv.DictReader(csvfile) for row in reader: data = {} data['id'] = row['id'] data['url'] = row['url'] data['token'] = str(row['token']) data['mobile'] = row['mobile'] data['email'] = row['email'] data['expect'] = json.dumps(row['expect']) \ if isinstance(row['expect'],dict) \ else row['expect'] #如果expect讀取出來的不是json則取其原值,否則轉為json格式保存到result里 datas.append(data) return datas #如果文件找不到,返回空的datas except FileNotFoundError: print("文件不存在",filename) return datas
4、request_URL函數示例(包含GET請求和POST請求2個方法)
def get_request(self,url,params): ''' 通用的調用GET接口方法 :param url:string 接口路徑 :param params:{"":"","":""} 需要傳入的參數 :return: response響應體 ''' print("調用API...") r = requests.get(url,params=params) print(r.text) return r def post_request(self,url,params): ''' 通用的調用POST接口方法 :param url: string 接口路徑 :param params: {"":"","":""} 需要傳入的參數 :return:response響應體 ''' print("調用API...") r = requests.post(url,params=json.dumps(params)) #post的方法必須用json.dumps()轉化成json格式 print(r.text) return r
5、assert_Result函數示例
def assertResult(self,except_value,real_value): ''' 校驗樣本字符串中是否包含指定字符串 :param except_value: string 指定字符串 :param real_value: string 樣本字符串 :return: Boolean 樣本中包含指定字符串返回True,否則返回False ''' ifsuccess = except_value in str(real_value) return ifsuccess
6、write_CSV函數示例
def writeCSV(self,filename,results): ''' 寫入csv文件指定內容 :param filename: string 需要寫入的文件名稱 :param results: [{data1},{data2},...] 寫入的內容 :return: 無 ''' print("寫文件:",filename) #以DictWriter的方式寫文件 with open(filename,'w+') as csvfile: headers="id,url,token,mobile,email,expect,real_value,assert_value".split(",") writer = csv.DictWriter(csvfile,fieldnames=headers) #寫表頭 writer.writeheader() #寫數據 if results.__len__() > 0 : for result in results: writer.writerow(result) csvfile.close()
7、test_interface1函數示例
def test_interface1(self): #指定讀取的數據文件名稱 data_file = "../data/data.csv" #指定最終結果生成的數據文件名稱 result_file = "../data/result_{}.csv".format(str(time.time()).split(".")[0]) #讀取指定文件的數據 datas = self.readCSV(data_file) #數據文件有內容則調用接口,否則直接測試結束 if datas.__len__() > 0: results =[] #獲取數據文件里的每一行 for testcase in datas : result = {} result["id"] = testcase["id"] result["url"] = testcase["url"] result["token"] = testcase["token"] result["mobile"] = testcase["mobile"] result["email"] = testcase["email"] result["expect"] = testcase["expect"] #組裝參數 params = { "token":result["token"], "mobile":result["mobile"], "email":result["email"] } #調用API接口,獲取響應結果 real_value = self.get_request(result["url"],params) #調用assert方法,檢查預期結果是否在響應結果中存在 assert_value = self.assertResult(result["expect"],real_value.text) result["real_value"] = real_value.text result["assert_value"] = assert_value #獲取每一行里的所有字段以及實際結果和驗證結果 results.append(result) #執行完所有記錄后,將所有結果寫入result.csv self.writeCSV(result_file,results) #寫入csv文件 print("測試結束")
8、result_1523956055.csv(本示例中的測試結果請忽略)
感謝你能夠認真閱讀完這篇文章,希望小編分享的“怎么利用Python實現數據驅動的接口自動化測試”這篇文章對大家有幫助,同時也希望大家多多支持億速云,關注億速云行業資訊頻道,更多相關知識等著你來學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。