1 import json 2 import os 3 from openpyxl import load_workbook 4 from common.path_handler import testDatas_path 5 6 """ 7 需求: 8 1- 需要对测试用例进行挑选 9 全部:1,2,3,4,5 10 挑选出:优先级高/特定用例bug回归 11 分析需求: 12 用例挑选的方式: 13 1- 全部 all 14 2- 只选择某一个用例 tc001 15 3- 连续的用例 tc003-tc005 16 4- 复合型 ['tc003','tc007-tc009','tc010'] 17 """ 18 19 class ExcelHandler: 20 file = os.path.join(testDatas_path, "工作簿1.xlsx") 21 22 def __init__(self, sheet_name, case_name, *args, file_name=file, runCase=["all"]): 23 """ 24 初始化方法 25 :param sheet_name: 指定表单 26 :param case_name: 用例名 27 :param args: 需要获取的用例参数 28 :param file_name: excel文件 29 :param runCase:需要执行的用例 30 """ 31 self.sheet_name = sheet_name 32 self.case_name = case_name 33 self.args = args 34 self.file_name = file_name 35 self.runCase = runCase 36 37 def is_json(self, data: str): 38 """ 39 判断参数是否是json格式 40 :param data: 41 :return: 42 """ 43 try: 44 json.loads(data) 45 return True # 是json格式 46 except: 47 return False # 不是json格式 48 49 def read_excel(self): 50 """ 51 读取excel文件数据 openpyxl只支持.xlsx 52 :return: 53 """ 54 # 定义空列表存储最终的用例数据 55 data_list = [] 56 # 加载工作薄 57 wb = load_workbook(self.file_name) 58 # 指定表单 59 sh = wb[self.sheet_name] 60 # 获取标题行数据 61 title = [i.value for i in list(sh.rows)[0]] 62 # 获取第一列数据 63 first_column = [i.value for i in list(sh.columns)[0]] 64 # ---------------------获取列对应的编号-------------------------- 65 col_list = [] # 定义空列表,存储列编号 66 # 遍历传入的列 67 for i in self.args: 68 # 获取对应列名在第一行中的下标编号,并添加到列表中 69 col_list.append(title.index(i) + 1) 70 # ----------------------筛选用例--------------------------------- 71 case_list = [] # 定义空列表,存储筛选后的用例 72 if "all" in self.runCase: 73 case_list = first_column # 选择全部用例 74 else: 75 for item in self.runCase: 76 if "-" in item: # 如果是区间 如:002-005 77 start, end = item.split("-") # 通过“-”进行分割 78 for i in range(int(start), int(end) + 1): 79 # 将分割得到的数字和用例名拼接,数据不足3位补0,追加到列表 80 case_list.append(self.case_name + "{:0>3}".format(i)) 81 else: 82 # 将传入的数字和用例名拼接,数据不足3位补0,追加到列表 83 case_list.append(self.case_name + "{:0>3}".format(item)) 84 # ------------------------获取需要执行的用例数据--------------------------- 85 row_index = 1 # 初始行号为0 86 # 遍历第一列 87 for item in first_column: 88 # 判断传入的用例名在第一列用例编号中并且用例编号在要执行的用例内 89 if self.case_name in item and item in case_list: 90 get_column_list = [] # 定义空列表,存在单元格数据 91 for col_index in col_list: 92 # 获取单元格数据 93 temp = sh.cell(row_index, col_index).value 94 # 判断单元格内的数据是不是json 95 if self.is_json(temp): 96 # 将单元格数据转成json格式 97 temp = json.loads(temp) 98 get_column_list.append(temp) # 将单元格数据添加到列表中 99 data_list.append(get_column_list) 100 row_index += 1 101 return data_list 102 103 104 if __name__ == '__main__': 105 obj = ExcelHandler("Sheet1", "login", "标题", "请求参数", runCase=["2-5"]) 106 res = obj.read_excel() 107 for one in res: 108 print(one)
标签:case,openpyxl,excel,self,list,用例,json,name From: https://www.cnblogs.com/Nichs/p/16772288.html