需求:
首先定位是一个小工具,配置好之后,case写在表格中,批量请求后,将结果批量输出到另一个表格,
tip:我们这里用之前写的接口做测试,详细参考以下链接,如果嫌麻烦我这里推在了云服务器上,有需要可以私聊我~
https://www.jianshu.com/p/296e05c635d2
🐷先看输出结果:
image.png
😘G列开始:预期结果,实际结果,是否通过,时间,响应时间
🐷看一下输入的表格:
image.png
😘G列是预期结果
分析:
- 通过配置文件把url拼接好
- 通过配置文件读取相应输入表格
- 输入表格一一对应请求
- 将结果等输出到另一个表格
开始:
我们先把配置文件给出来:
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库把一些参数配置管理起来
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表路径,传入绝对路径
self.sheetname = sheetname #表格内sheet名
self.data = xlrd.open_workbook (self.data_path) #打开excl表格
self.table = self.data.sheet_by_name (self.sheetname) #切换到响应的sheet
self.keys = self.table.row_values (0) #第一行的数据为key值
self.rowNum = self.table.nrows #获取表格行数
self.colNum = self.table.ncols #获取表格列数
self.url = url
def readExcel(self):
if self.rowNum<2:
print("表格内小于两行数据")
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')#获取当前时间
i = 0
for data1 in data:
value = data1["code"] # 取出预期结果
del data1["code"]
url = self.url+self.sheetname
r = requests.post(url=url, data=data1)
m = r.json()['code'] # 取出返回的结果
if m == value: # 比对与之前取出的预期结果
time_r = r.elapsed.total_seconds()
data1.update(Expecte=value, Actual=m, res='pass', time=time, respose=time_r) # 通过的结果字典中加入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) # 通过的结果字典中加入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分别传入用例的文件,表名和请求的地址
m = m.data_handing()
最后看一些结果:
image.png这个是用例
image.png这个是输出结果
tips:
- readexcl方法我是参考这里,将用例表格中一行数据与首行数据组成key-value形式的字典再将所有数据组成列表。这里写的更详细详情见下链接
https://www.bbsmax.com/A/x9J26AoZJ6/ - data_handing方法取出测试表格中的预期结果,比对请求的结果,然后将所有参数、请求时间、实际结果、预期结果、响应时间一个一个写到另一个表格中。
- 但是这种方法需要接口的格式不怎么变化,而且扩展性较差,接口测试最好还是使用pytest,不要重复造轮子。
- 实现多表读写。
- 把data_handing拆分,数据处理和读写表格分开,对方法体解耦
- 将记录写入数据库
网友评论