首先说下为什么要做用例可配置,有时候跑测试用例,并不需要全部都运行一遍,只需要运行部分用例就行了。这个时候就需要你在设计用例的时候,做到用例可配置化。说白点就是可以选择执行部分用例,或者默认运行全部测试用例。

假设我有测试数据如下,里面有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())