在Postman,JMeter中进行接口测试,用过 CSV 数据文件驱动的方式来做。
在Python中,也可以进行数据驱动进行单接口的测试。
主要数据文件
- json文件
- yaml文件
- csv文件
- Excel文件
json文件操作
https://docs.python.org/zh-cn/3/library/json.html
json模块是Python自带的模块,可以对json文件进行编码和解码。
解析json文件
定义json文件
data.json
{"casename":"登录","url":"http://49.233.108.117:28019/api/v1/user/register","body":{"loginName": "17011112222","password": "123456"}}
解析json文件。
"""文件解析"""import json# 打开json文件with open('./data.json',mode='r',encoding='utf8') as file:# 加载json文件data = json.load(file)# json文件中的内容转换为字典格式。print(data,type(data))
保存json文件
使用json的dump方法可以将数据保存到文件中
"""文件解析"""import jsonimport requests# 打开json文件with open('./data.json',mode='r',encoding='utf8') as file:# 加载json文件data = json.load(file)# json文件中的内容转换为字典格式。print(data,type(data))r = requests.post(data['url'],json=data['body'])print(r.json())# 将服务器返回的结果保存到data中data["result"] = r.json()# 将data数据保存到data.json中with open('./data.json',mode='w',encoding='utf8') as f:# 将数据存放在文件中json.dump(data,f,ensure_ascii=False)
执行完成之后 可以将运行的结果保存到 data.json 文件中。
yaml文件操作
yaml 文件教程
https://www.ruanyifeng.com/blog/2016/07/yaml.html
yaml文件解析
https://pyyaml.org/
安装pyyaml
python本身并不支持yaml文件的解析,需要安装第三方的库进行文件解析。
pip install pyyaml
准备yaml数据文件
data.yaml
casename: 登录url: http://49.233.108.117:28019/api/v1/user/registerbody:loginName: 17011112222password: 123456
解析yaml文件
使用yaml模块的load方法进行加载。
import yaml# 打开yaml文件with open('./data.yaml',mode="r",encoding="utf8") as file:# 添加 loader 加载器data = yaml.load(file,Loader=yaml.SafeLoader)print(data,type(data))
保存yaml文件
使用 yaml文件的 dump 方法 保存数据。
import requestsimport yaml# 打开yaml文件with open('./data.yaml',mode="r",encoding="utf8") as file:# 添加 loader 加载器data = yaml.load(file,Loader=yaml.SafeLoader)print(data,type(data))r = requests.post(data["url"],json=data["body"])print(r.json())data["result"] = r.json()# 把data数据存放到文件中with open('./data.yaml',encoding='utf8',mode='w') as f:# 将结果保存到文件中yaml.safe_dump(data,f,allow_unicode=True)
csv文件操作
https://docs.python.org/zh-cn/3/library/csv.html
不需要安装,python自带,可以直接使用。
csv文件写入
import csvwith open('./data.csv',mode='w',encoding='utf8',newline='') as file:# 写入csv文件f = csv.writer(file)f.writerow(["用户名","密码"])for i in range(10):f.writerow([f"test{i}","123456"])
这里需要注意: newline=”” 主要是为写入文件的时候 新的一行不能换行。
读取csv数据文件
"""文件解析"""# 导入csv模块import csvwith open('./data.csv',mode='w',encoding='utf8',newline='') as file:# 写入csv文件f = csv.writer(file)f.writerow(["用户名","密码"])for i in range(10):f.writerow([f"test{i}","123456"])with open('./data.csv',mode='r',encoding='utf8') as f:# 读取文件lines = csv.reader(f)next(lines) #去掉第一行内容# 循环里面的内容for line in lines:print(line)
读取csv文件内容。并将接口运行的新结果 保存到新文件中。
csv文件读取内容,并将结果保存到文件中
"""文件解析读取csv文件中的内容,发送请求,并将服务器返回的结果进行保存"""# 导入csv模块import csv# 读取csv数据import jsonimport requeststestdata=[]with open('./data.csv',mode='r',encoding='utf8') as file:lines = csv.reader(file)headers = next(lines)# 表头添加新的字段headers.append('result')# 添加表头testdata.append(headers)for line in lines:print(line)# 请求地址url = line[0]# 请求方法method = line[1]# 请求数据data = line[2]print(type(data),data)# 字符串转换为 字典data_dict = json.loads(data)print(data_dict,type(data_dict))if method=='post':r = requests.post(url,json=data_dict)print(r.json())# 将服务器返回结果 保存list 中# 将字典转换为字符串类型result_str = json.dumps(r.json(),ensure_ascii=False)line.append(result_str)print(line)testdata.append(line)# 执行完成之后, 查看 testdata数据print(testdata)# 将testdata中的数据 写入到csv文件中with open('./data_result.csv',mode='w',encoding='utf8',newline='') as f:cf = csv.writer(f)for data in testdata:cf.writerow(data)
这里主要需要使用到 数据转换。
- 字符串 转 字典 json.loads() 方法。
- 字典转 字符串 json.dumps() 方法。
Excel文件操作
安装
pip install openpyxl
写入Excel文件
"""文件解析读取Excel文件中的内容,发送请求,并将服务器返回的结果进行保存"""# 导入openpyxlimport jsonfrom openpyxl import Workbook# 写入Excel文件wb = Workbook() # 创建workbook# 使用默认的工作表ws = wb.active# 工作表中添加内容 添加一列内容ws.append(["url",'method','data'])data = {"loginName": "17011112222","password": "123456"}# 将字典格式转换为字符串保存到excel文件中ws.append(['http://49.233.108.117:28019/api/v1/user/register','post',json.dumps(data)])# 保存到excel文件中wb.save('./data.xlsx')
读取Excel文件
import json# 读取Excel文件from openpyxl import load_workbook# 加载excel文件wb = load_workbook(filename='./data.xlsx')# 打开默认的工作薄ws = wb.active# 循环工作表中的数据 从第1行,第1列开始读取数据for line in ws.iter_rows(min_row=1,max_row=ws.max_row,min_col=1,max_col=ws.max_column,values_only=True):print(line)
作业
根据如下Excel文件
设计自动化代码
要求:
- 根据Excel中提供请求数据,能够自动发送请求。
- 将服务器返回的结果存到Excel文件中【运行结果】
- 发送请求的时候需要有日志记录。
下载附件。
"""文件解析Excel文件中的内容,发送请求,并将服务器返回的结果进行保存"""# 导入openpyxlimport json# 读取Excel文件from openpyxl import load_workbookimport requests# 加载excel文件wb = load_workbook(filename='./测试用例.xlsx')# 打开默认的工作薄ws = wb.activetestdata = []# 循环工作表中的数据for line in ws.iter_rows(min_row=1,max_row=ws.max_row,min_col=1,max_col=ws.max_column,values_only=True):# print(line)# print(f'现在开始运行{line[0]},请求方法是{line[1]},请求路径为{line[2]},请求数据{line[3]}')if line[1] == "post":# 发送请求,因为从excel文件中读取出来的数据默认为字符串格式,将字符串转换为字典r = requests.post(url=line[2],json=json.loads(line[3]))# print(f'服务器返回结果为{r.json()}')testdata.append((line[0],line[1],line[2],line[3],r.text))else:testdata.append(line)# 读取完成所有的数据之后print(testdata)# 将数据保存到文件中from openpyxl import Workbookwb = Workbook()ws = wb.create_sheet("测试用例执行")for data in testdata:ws.append(data)wb.save('测试用例-执行.xlsx')
