API自动化测试笔记(二):测试数据
(一)说明
相信不管是GUI自动化测试,亦或者是API自动化测试,都离不开测试数据。
这里说的测试数据我理解分为2部分:
1、用例执行前需要的前置条件,例如我验证正确账户、密码能否成功登录,首先就需要一个已经注册的用户。
2、测试用例本身需要的输入及预期结果。例如:调用一个API,我需要设置不同的请求参数,验证不同请求参数下的响应是否符合预期。这里的请求参数和预期结果也是我们的测试数据。
这里主要提供个思路,在API自动化,亦或者GUI自动化中,该怎么管理我们的测试数据(这里针对的是第二种测试数据)。思路大概是:应用工厂设计模式
1、工厂类:接受不同格式的数据,解析并处理为DataFrame格式数据
2、将DataFrame格式的数据处理成字典或列表。
使用工厂模式有个优点是,方便以后的扩展,例如如果有新增的文件格式,只要在工厂类中新增该文件格式的实现即可。
(二)简单实现代码
1 import os 2 import pandas as pd 3 4 5 class ParamConfigSourceFactory(): 6 7 def __init__(self,filename,sheet_name=None): 8 """ 9 工厂设计模式:接受不同格式数据,解析并转换为DataFrame格式数据 10 :param filename: 11 :param sheet_name: 12 """ 13 self.filename = filename 14 self.sheet_name = sheet_name 15 self.df = self.get_file_data() 16 17 def get_file_data(self): 18 file_type = os.path.splitext(self.filename)[1] 19 if file_type == '.xlsx': 20 df = pd.read_excel(io=self.filename, 21 sheet_name=self.sheet_name) 22 else: 23 raise ValueError("不支持的文件格式{},仅支持xlsx格式".format(file_type)) 24 return df 25 26 27 class ParamConfigSource(): 28 29 def __init__(self,filename,sheet_name=None): 30 self.filename = filename 31 self.sheet_name = sheet_name 32 self.df = ParamConfigSourceFactory(filename=self.filename,sheet_name=self.sheet_name).df 33 34 def get_all_test_data_format_dict(self,flag=0): 35 """ 36 :param flag 37 flag=0 返回 {0:{key1:value1,key2:value2..},1:{...}}格式数据 38 flag=1 返回 {0:[value1,value2...],1:[...]}格式数据 39 :return: 40 """ 41 col_name = [col for col in self.df] 42 data = {} 43 num = 0 44 for indexs in self.df.index: 45 if flag == 0: 46 row_data = {} 47 for i in range(len(self.df.loc[indexs].values)): 48 row_data[col_name[i]] = self.df.loc[indexs].values[i] 49 elif flag == 1: 50 row_data = [] 51 for i in range(len(self.df.loc[indexs].values)): 52 row_data.append(self.df.loc[indexs].values[i]) 53 else: 54 raise ValueError("不支持的参数:{}".format(flag)) 55 data[num] = row_data 56 num += 1 57 return data 58 59 def get_all_test_data_format_list(self): 60 """ 61 返回[(value1,value2...),(...)]格式数据 62 :return: 63 """ 64 data = [] 65 for indexs in self.df.index: 66 row_data = [] 67 for i in range(len(self.df.loc[indexs].values)): 68 row_data.append(self.df.loc[indexs].values[i]) 69 data.append(tuple(row_data)) 70 return data 71 72 # 执行下看下结果 73 pcs = ParamConfigSource(filename="./测试1.xlsx",sheet_name="Sheet1") 74 print(pcs.get_all_test_data_format_dict()) 75 print(pcs.get_all_test_data_format_dict(flag=1)) 76 print(pcs.get_all_test_data_format_list())