python读取excel测试用例数据
# excel_readUtil.py from openpyxl import load_workbook import pandas class HandleExcel: """ 封装excel文件处理类 """ def __init__(self, filename, sheetname=None): """ 定义构造方法 :param filename: 文件名=实例属性 :param sheetname: 表单名,如果表单名只有一个可以设置为默认值 """ self.filename = filename self.sheetname = sheetname def get_cases(self): """ 获取所有的测试用例,实例方法 :return:为嵌套字典的列表 """ # 打开文件:使用load_workbook传入文件名 wb = load_workbook(self.filename) # 返回创建一个Workbook的对象, 相当是一个excel文件 if self.sheetname is None: # 定位表单,判断是否制定表单默认空,为第一个表单 ws = wb.active # active 获取第一个表单 else: ws = wb[self.sheetname] # 否则获取指定的表单 # min_row = 最小行号,max_row=最大行号(可以不写) # min_col = 最小列号,max_col=最大列号 # values_only = 获取单元格的值 # 获取表头的信息,使用 iter_rows方法,嵌套元祖的元祖,省略最小行号 head_data_tuple = tuple(ws.iter_rows(max_row=1, values_only=True))[0] one_list = [] for one_tuple in tuple(ws.iter_rows(min_row=2, values_only=True)): # 不需要表头最小行号为2,不需要最大行号,最大最小列号 # zip 函数将表头的元祖与每一行用例所在的元祖进行拼接,dict转换为字典后,添加到列表当中 one_list = [] one_list.append(dict(zip(head_data_tuple, one_tuple))) return one_list # 为嵌套字典的列表 def get_sheet_name(self): excel_total = pandas.ExcelFile(filename) if self.sheetname is None: sheet_names = excel_total.sheet_names # print(sheet_names) return sheet_names else: print("当前标签名: " + self.sheetname) def get_one_case(self, row): """ 获取某一条测试用例 :param row: 行号 :return:嵌套字典的列表,使用位置进行获取 """ return self.get_cases()[row - 1] def get_max_row(self): # 获取用例数量 list1 = self.get_cases() max_num = len(list1) return max_num def write_result(self, row, actual, result): """ 写入数据到测试用例指定的行列中 :param row: 行号 :param actual: 实际结果 :param result: 用例执行的结果(Pass或者Fail) :return: """ # 同一个Workbook对象, 如果将数据写入到多个表单中, 那么只有最后一个表单能写入成功,需要创建不同的对象 other_wb = load_workbook(self.filename) # 创建对象 = 打开一个文件 if self.sheetname is None: other_ws = other_wb.active else: other_ws = other_wb[self.sheetname] # 写入 if isinstance(row, int) and (2 <= row <= other_ws.max_row): # 不能修改表头,下一行开始,行号大于2,小于最大的行号 other_ws.cell(row=row, column=6, value=actual) # 在第六行写入实际结果 other_ws.cell(row=row, column=7, value=result) # 在第七行写入用例执行的结果 other_wb.save(self.filename) # save 保存文件 other_wb.close() # close关闭 ----- 读数据的时候不需要关闭,写数据的时候可关闭或不关闭 else: # 如果不是整数,行号小于2,并且大于最大的行号 print("传入的行号有误, 行号应为大于1的整数") def choose_case(self): list_case =self.get_cases() num_case = self.get_max_row() run_list = [] for i in range(0, num_case): y = list_case[i]["是否执行"] if y == 'y': aa = list_case[i]["步骤名"] run_list.append(aa) else: print("跳过该用例: "+list_case[i]["步骤名"]) print(run_list) return run_list if __name__ == '__main__': # 自己写的模块自己用使用 main 函数 filename = "C://study//pythonT//pythonProject//test_cases//caseqq.xlsx" sheetname = "case" # 指定第二个表单名 # 创建一个对象,filename=文件名和sheetname=表单名可以不传 # do_excel = HandleExcel(filename) # 传文件名,不传默认第一个表单 do_excel = HandleExcel(filename, sheetname) # 获取所有的测试用例cases,使用对象调用实例方法 cases = do_excel.get_cases() # print(cases) # print(cases[0]['序号']) # 写入,在第二行写入"20230918", "设置Pass" # do_excel.write_result(2, "20230918", "设置pass") # sheets = do_excel.get_sheet_name() do_excel.choose_case()