目的:将数据写入csv文件,并保存
要求:现在有多个测试用例,每个用例都是一个dict,需要将所有用例存储到一个csv文件中
#将数据存入csv
# case1 = [{'name': 'Tony', 'age': 17}]
# case2 = [{'name': '李华', 'age': 21}]
#数据样例
flag = 0
def write_csv(self, case):
header = list(case.keys())#将key作为表头(列名)
global flag #使用关键字声明全局变量
path ='/Users/test.csv'#文件存储路径,没有的话会新建文件
with open(path,'a',newline='',encoding='utf—8') as f:
#以‘a'方式打开,是追加写入,newline 等于空字符,避免空行,编码为utf-8
writer = csv.DictWriter(f,fieldnames=header)
if flag == 0:#第一次写入时写入表头
writer.writeheader()
writer.writerow(case)#写入一行
flag = 1
else:#再次调用时只写入值
writer.writerow(case)
目的:读取csv文件中的数据,做接口自动化测试
要求:每行数据是一个测试用例,运行脚本后,自动按顺序执行测试用例
1.请求方式不同,需要的参数不同。所以有缺失值需要处理
2.需要将返回的状态码写入原文件
参考:pandas选择单元格,选择行列 - GUXH - 博客园
import pandas as pd
#使用pandas库读取csv文件
class option_csv(object):
def __init__(self):
self.file = pd.read_csv(path,index_col=0,header=0)
self.file = self.file.where(self.file.notnull(),None)#将nan替换为none
def get_line(self):#获取所有行数
lens = len(self.file)
return lens
def get_row(self,row):#获取某列的所有数据
return self.file.iloc[row,:]
def write_result(self,result,row):#修改第row行result的内容
self.file.loc[row,'result'] = result
self.file.to_csv(path)
'''
将数据从csv中取出
'''
from DataBase import read_excel
class read_data(object):
def __init__(self):
self.files = read_excel.option_csv()
def get_value(self,row):
self.case = self.files.get_row(row)
self.name = self.case["case_name"]
self.method = self.case['method']
self.params = self.case['parame']
self.url = self.case['url']
self.data = self.case['data']
self.body = self.case['body']
self.espect_code = str(self.case["espect_code"])
return self
这里简单用了unittest和requests库
'''
读取测试用例运行
'''
import unittest
import requests
from DataBase import read_data, read_excel
class test_run(unittest.TestCase):
def setUp(self) -> None:
print("====begin the test====")
def test_run(self):
nrows = read_excel.option_csv().get_line()
get = read_data.read_data()
for i in range(1, nrows):
case = read_data.read_data().get_value(i)
try:
req = requests.request(method=case.method, url=case.url, params=case.params, json=case.body,
data=case.data)
res = req.status_code
self.assertEqual(case.espect_code, res, msg=f"{case.name}is failed" + "\n" + f"{req.text}")
read_excel.option_csv().write_result(res, i)
except (requests.ConnectionError, requests.HTTPError, requests.URLRequired, requests.Timeout) as e:
print(e)
def tearDown(self) -> None:
print("====end the test====")
if __name__ == '__main__':
unittest.main()