通过读取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) # 测试用例集