首先说下为什么要做用例可配置,有时候跑测试用例,并不需要全部都运行一遍,只需要运行部分用例就行了。这个时候就需要你在设计用例的时候,做到用例可配置化。说白点就是可以选择执行部分用例,或者默认运行全部测试用例。
假设我有测试数据如下,里面有cese_id,method,url,data,headers,expected:
现在我要根据case_id来判断只运行2条测试用例,或者1条用例。怎么做呢?
首先创建一个以.config结尾的配置文件,内容如下图所示:
不要问我为啥这么写,这是配置文件的固定格式。
接下来写一个读取配置文件的方法:配置文件要和读取配置文件的方法放在一起,否则会报文件找不到的错误
读取结果如图所示:
代码如下:
import configparser
class ReadConfig():
'''读取配置文件,需要传递3个参数,配置文件路径,section,option'''
def read_config(self,file_path,section,option):
cf = configparser.ConfigParser()
cf.read(file_path,encoding='utf-8')
return cf.get(section,option)
if __name__ == '__main__':
print(ReadConfig().read_config(r'D:\File\yoyo_api\conf\host.config','MODE','mode'))
如图:配置文件的section,option
最后在返回数据前面加上判断:判断mode如果等于all,就执行全部用例。如果mode等于列表,就判断传入列表是否在case_id中,最后在执行要执行的用例。
执行结果如下图所示,只运行了第一条和第三条用例:
代码如下:
from openpyxl import load_workbook from API_AUTO.tools.read_conf import ReadConfig class ReadExcel(): def get_data(self, file_path, sheet_name): '''获取数据''' # 从配置文件读取值 mode = ReadConfig().read_config('case.config', 'MODE', 'mode') wb = load_workbook(file_path) sheet = wb[sheet_name] test_data = [] for i in range(2, sheet.max_row + 1): row_data = {} row_data['case_id'] = sheet.cell(i, 1).value row_data['method'] = sheet.cell(i, 2).value row_data['login_url'] = sheet.cell(i, 3).value row_data['login_data'] = sheet.cell(i, 4).value row_data['title'] = sheet.cell(i, 5).value test_data.append(row_data) if mode == 'all': final_data = test_data else: final_data = [] for item in test_data: if item['case_id'] in eval(mode): final_data.append(item) return final_data if __name__ == '__main__': data = ReadExcel().get_data('test_data.xlsx', 'login') for i in data: print(i.items())