读取excel测试用例:通过多个sheet组装测试数据,解决参数多层嵌套问题

it2023-02-28  102

通过读取excel sheet1

一、示例接口参数:

{     "referenceList": [{         "isTrusted": true,         "keyList": [],         "sexTypeChecked": true,         "ageChecked": false,         "samptypeChecked": false,         "sexCode": "1",         "referenceLow": "22",         "referenceHigh": "222",         "referenceShow": "22--222",         "crisesHigh": "2222",         "crisesLow": "2",         "onlyIndex": 1     }],     "isFormula": false,     "sexTypeChecked": true,     "ageChecked": false,     "samptypeChecked": false,     "businessType": "1",     "projectCode": "bm10001",     "projectName": "名称",     "inputCode": "MC",     "referenceLow": "11",     "referenceHigh": "111",     "referenceShow": "11--111",     "crisesLow": "1",     "crisesHigh": "1111",     "wordResults": [{         "status": "1",         "wordDescrips": [],         "crisesFlag": "2",         "resultStatus": "2",         "recheckFlag": "2",         "wordDescription": "描述",         "resultStatusValue": "2",         "crisesFlagValue": "2",         "recheckFlagValue": "2",         "onlyIndex": 1     }],     "orgId": 54,     "referenceSelected": "性别",     "referenceValueVos": [{         "isTrusted": true,         "keyList": [],         "sexTypeChecked": true,         "ageChecked": false,         "samptypeChecked": false,         "sexCode": "1",         "referenceLow": "22",         "referenceHigh": "222",         "referenceShow": "22--222",         "crisesHigh": "2222",         "crisesLow": "2",         "onlyIndex": 1     }] }

二、测试用例设计;

实例:

1、第一层中:referenceList、wordResults、referenceValueVos存在嵌套参数,数据存储在同名sheet中,path[2,4]代表同名sheet的3,4行

2、第一个嵌套参数referenceList需要组装的数据

三、实现

# -*- coding: gbk -*- import re import xlrd class ReadReqParams(): """读测试用例文件""" def __init__(self, data): # self.file_path = file_path self.data = data def __tablecells(self, table): for item in table.merged_cells: # 合并单元格坐标 return item def __sheet_others(self, sheetname, beginrows, endrows): """ 获取sheet中从m行到n行的数据 :param sheetname: sheet名称 :param beginrows: 起始行m :param endrows: 结尾行n :return: """ table = self.data.sheet_by_name(sheetname) keys = table.row_values(0) colnum = table.ncols sheet_others_lists = [] for i in range(int(beginrows), int(endrows)): data_dict = {} values = table.row_values(i) for x in range(colnum): data_dict[keys[x]] = values[x] sheet_others_lists.append(data_dict) return sheet_others_lists def __sheet1(self, table): """ 获取sheet1的数据 :param table: :return: """ row1_values = table.row_values(0) rownum = table.nrows colnum = table.ncols if rownum <= 1: print('Can not find TestCase') else: file_lists = [] for i in range(2, rownum): data_dict = {} rowvalues = table.row_values(i) for x in range(colnum): data_dict[row1_values[x]] = rowvalues[x] file_lists.append(data_dict) return file_lists def __update_sheet(self, table, sheet_names): """ 将sheet1中有路径坐标的path[m,n]单元格,使用对应sheet中m,n行数据替换 :param table: :param sheet_names: :return: """ file_lists = self.__sheet1(table) params_lists = [] for data_dict in file_lists: for sheet_name in sheet_names: if sheet_name in data_dict.keys(): position = re.findall('\d', data_dict[sheet_name]) # 匹配入参嵌套对象坐标 sheet_others_lists = self.__sheet_others(sheet_name, position[0], position[1]) data_dict[sheet_name] = sheet_others_lists params_lists.append(data_dict) return params_lists def read_excel_more_sheets(self): """ 获取测试数据 :return: """ # 获取所有sheet名字 sheet_names = self.data.sheet_names() # 打开sheet1 table = self.data.sheet_by_index(0) params_lists = self.__update_sheet(table, sheet_names) return params_lists def read_excel_file(self): """ 读excle文件 """ table = self.data.sheet_by_index(0) keys = table.row_values(0) rownum = table.nrows colnum = table.ncols if rownum <= 1: print('Can not find TestCase') else: file_list = [] for i in range(2, rownum): data_list = {} values = table.row_values(i) for x in range(colnum): data_list[keys[x]] = values[x] file_list.append(data_list) return file_list def judge_isvalid(file_path_testcase): """调用读配置文件""" try: data = xlrd.open_workbook(file_path_testcase) except FileNotFoundError: find_testcase_error = 'Can Not Find TestCase' return find_testcase_error except xlrd.biffh.XLRDError: open_testcase_error = 'Can Not Open TestCase' return open_testcase_error else: sheet_names = data.sheet_names() # 无嵌套请求参数类型 if len(sheet_names) == 1: test_cases = ReadReqParams(data).read_excel_file() # 有嵌套请求参数类型 elif len(sheet_names) > 1: test_cases = ReadReqParams(data).read_excel_more_sheets() else: test_cases = 'No Sheet' return test_cases file_path_testcase = '' test_cases = judge_isvalid(file_path_testcase) # 测试用例集
最新回复(0)