python自动化测试数据驱动_利用Python如何实现数据驱动的接口自动化测试
大家在接口測試的過程中,很多時候會用到對CSV的讀取操作,本文主要說明Python3對CSV的寫入和讀取。下面話不多說了,來一起看看詳細的介紹吧。
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封裝了很多方法,對于測試來說開發速度相對較快,接口自動化測試如果采用CSV管理的數據驅動方式,使用csv+requests是測試開發不容錯過的利器之一。
好了,以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。
如果你
①從事功能測試,想進階自動化測試
②在測試界混了1、2年,依然不會敲代碼
③面試大廠卻屢屢碰壁
我邀你進群吧!來吧~~測試員,313782132(Q群里有技術大牛一起交流分享,學習資源的價值取決于你的行動,莫做“收藏家”)獲取更多大廠技術、面試資料
如果對python自動化測試、web自動化、接口自動化、移動端自動化、面試經驗交流等等感興趣的測試人,可以關注微信公眾號:【傷心的辣條】,獲取軟件測試工程師大廠面試資料!
最后:
凡事要趁早,特別是技術行業,一定要提升技術功底,豐富自動化項目實戰經驗,這對于你未來幾年職業規劃,以及測試技術掌握的深度非常有幫助。
總結
以上是生活随笔為你收集整理的python自动化测试数据驱动_利用Python如何实现数据驱动的接口自动化测试的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 超过200m文件发送_喜大普奔!微信官宣
- 下一篇: 二叉树初始化_Java实现二叉树