需求:
首先定位是一個(gè)小工具,配置好之后毅该,case寫在表格中,批量請(qǐng)求后仔蝌,將結(jié)果批量輸出到另一個(gè)表格煞额,
tip:我們這里用之前寫的接口做測試,詳細(xì)參考以下鏈接,如果嫌麻煩我這里推在了云服務(wù)器上沾谜,有需要可以私聊我~
http://www.reibang.com/p/296e05c635d2
??先看輸出結(jié)果:
image.png
??G列開始:預(yù)期結(jié)果膊毁,實(shí)際結(jié)果,是否通過基跑,時(shí)間婚温,響應(yīng)時(shí)間
??看一下輸入的表格:
image.png
??G列是預(yù)期結(jié)果
分析:
- 通過配置文件把url拼接好
- 通過配置文件讀取相應(yīng)輸入表格
- 輸入表格一一對(duì)應(yīng)請(qǐng)求
- 將結(jié)果等輸出到另一個(gè)表格
開始:
我們先把配置文件給出來:
http_conf.ini
[HTTP]
host = 192.168.0.44
port = 5001
[MODEL]
server = xxx/system
[FILE]
data_path= D:\\工作\\python_py\\XYZ\\XYZ\\test.xlsx
讀取配置文件
configrunmodel
import configparser
import os
class ReadConfig():
def get_server_path(self):
config = configparser.ConfigParser ()
config.read('http_conf.ini')
host = (config['HTTP']['host'])
port = (config['HTTP']['port'])
sever_module=(config['MODEL']['server'])
server_interfaces_dir = "http://" + host + ':' + port + '/' + sever_module + '/'
return server_interfaces_dir
利用configparser庫把一些參數(shù)配置管理起來
import xlrd
import sys
import configrunmodel
import xlwt
import datetime
import json
import requests
class ExcelData():
def __init__(self,data_path,sheetname,url):
self.data_path = data_path #excle表路徑,傳入絕對(duì)路徑
self.sheetname = sheetname #表格內(nèi)sheet名
self.data = xlrd.open_workbook (self.data_path) #打開excl表格
self.table = self.data.sheet_by_name (self.sheetname) #切換到響應(yīng)的sheet
self.keys = self.table.row_values (0) #第一行的數(shù)據(jù)為key值
self.rowNum = self.table.nrows #獲取表格行數(shù)
self.colNum = self.table.ncols #獲取表格列數(shù)
self.url = url
def readExcel(self):
if self.rowNum<2:
print("表格內(nèi)小于兩行數(shù)據(jù)")
else:
L = [] #列表L
for i in range(1,self.rowNum):
sheet_data = {}
for j in range (self.colNum):
sheet_data[self.keys[j]]=self.table.row_values(i)[j]
L.append (sheet_data)
#print(sheet_data)
return L
def data_handing(self):
data = ExcelData.readExcel(self)
file = xlwt.Workbook()
table = file.add_sheet(sheetname=self.sheetname)
time = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')#獲取當(dāng)前時(shí)間
i = 0
for data1 in data:
value = data1["code"] # 取出預(yù)期結(jié)果
del data1["code"]
url = self.url+self.sheetname
r = requests.post(url=url, data=data1)
m = r.json()['code'] # 取出返回的結(jié)果
if m == value: # 比對(duì)與之前取出的預(yù)期結(jié)果
time_r = r.elapsed.total_seconds()
data1.update(Expecte=value, Actual=m, res='pass', time=time, respose=time_r) # 通過的結(jié)果字典中加入res=pass
lst = list(data1)
lst2 = list(data1.values())
i = i + 1
for index in range(len(lst2)):
table.write(i, index, lst2[index])
else:
time_r = r.elapsed.total_seconds()
data1.update(Expecte=value, Actual=m, res='false', time=time, respose=time_r) # 通過的結(jié)果字典中加入res=pass
lst = list(data1)
lst2 = list(data1.values())
i = i + 1
for index in range(len(lst)):
if i < 2:
table.write(0, index, lst[index])
for index in range(len(lst2)):
table.write(i, index, lst2[index])
file.save('res.xlsx')
if __name__ == '__main__':
f = configrunmodel.ReadConfig()
url = f.get_server_path() 獲取配置文件的
m=ExcelData('test_1.xlsx' ,'add_staff', url=url)#初始化ExcelData分別傳入用例的文件媳否,表名和請(qǐng)求的地址
m = m.data_handing()
最后看一些結(jié)果:
這個(gè)是用例
image.png
這個(gè)是輸出結(jié)果
image.png
tips:
- readexcl方法我是參考這里栅螟,將用例表格中一行數(shù)據(jù)與首行數(shù)據(jù)組成key-value形式的字典再將所有數(shù)據(jù)組成列表。這里寫的更詳細(xì)詳情見下鏈接
https://www.bbsmax.com/A/x9J26AoZJ6/ - data_handing方法取出測試表格中的預(yù)期結(jié)果篱竭,比對(duì)請(qǐng)求的結(jié)果力图,然后將所有參數(shù)、請(qǐng)求時(shí)間掺逼、實(shí)際結(jié)果吃媒、預(yù)期結(jié)果、響應(yīng)時(shí)間一個(gè)一個(gè)寫到另一個(gè)表格中吕喘。
- 但是這種方法需要接口的格式不怎么變化赘那,而且擴(kuò)展性較差,接口測試最好還是使用pytest氯质,不要重復(fù)造輪子募舟。
- 實(shí)現(xiàn)多表讀寫。
- 把data_handing拆分闻察,數(shù)據(jù)處理和讀寫表格分開拱礁,對(duì)方法體解耦
- 將記錄寫入數(shù)據(jù)庫