前言
大家在介面測驗的程序中,很多時候會用到對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是測驗開發不容錯過的利器之一,
好了,以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者作業具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持,
軟體測驗是IT相關行業中最容易入門的學科~不需要開發人員燒腦的邏輯思維、不需要運維人員24小時的隨時待命,需要的是細心認真的態度和IT相關知識點廣度的了解,每個測驗人員從入行到成為專業大牛的成長路線可劃分為:軟體測驗、自動化測驗、測驗開發工程師 3個階段,
如果你
①從事功能測驗,想進階自動化測驗
②在測驗界混了1、2年,依然不會敲代碼
③面試大廠卻屢屢碰壁
我邀你進群吧!來吧~~測驗員,313782132(Q群里有技術大牛一起交流分享,學習資源的價值取決于你的行動,莫做“收藏家”)獲取更多大廠技術、面試資料
如果對python自動化測驗、web自動化、介面自動化、移動端自動化、面試經驗交流等等感興趣的測驗人,可以關注微信公眾號:【傷心的辣條】,獲取軟體測驗工程師大廠面試資料!
最后:
凡事要趁早,特別是技術行業,一定要提升技術功底,豐富自動化專案實戰經驗,這對于你未來幾年職業規劃,以及測驗技術掌握的深度非常有幫助,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/232928.html
標籤:其他
上一篇:API檔案實踐
