from collections import namedtuple from openpyxl import load_workbook # 1.如何將一些操作(Excel讀寫)進(jìn)行封裝?(寫出封裝的思路) # a、加載excel文件,定位表單; # b、定位單元格,讀取所有用例數(shù)據(jù); # c、遍歷所有單元格數(shù)據(jù),或使用ddt; # d、寫入指定單元格數(shù)據(jù),保存excel文件; class ReadExcelData(object): """封裝讀取excel表單數(shù)據(jù)的工具類""" def __init__(self, file_path, sheet_name=None): """ 初始化openpy加載excel文件 定位表單及初始化參數(shù) """ self.file_path = file_path self.sheet_name = sheet_name # 打開已存在Excel文件 self.wb = load_workbook(self.file_path) #打開指定的excel # 定位表單 self.ws = self.wb[self.sheet_name] if self.sheet_name is not None else self.wb.active # 獲取第一個表單 self.sheet_head_tuple = tuple(self.ws.iter_rows(max_row=self.ws.min_row, values_only=True))[0] self.cases_list = [] # 定義一個存放元組的對象 self.Cases = namedtuple("cases", self.sheet_head_tuple) # 創(chuàng)建一個命名元組類 def get_all_cases(self): """ 獲取excel所有測試用例 """ for tuple_data in self.ws.iter_rows(min_row=self.ws.min_row + 1, values_only=True): # 每次遍歷,返回由某行所有單元格值組成的一個元組 self.cases_list.append(self.Cases(*tuple_data)) return self.cases_list def get_one_case(self, row): """ 獲取一條case :return一個case對象 """ if isinstance(row, int) and (self.ws.min_row + 1 <= row <= self.ws.max_row): return tuple(self.ws.iter_rows(min_row=row, max_row=row, values_only=True))[0] else: print("傳入行號不正確,應(yīng)為大于1的整數(shù)!") def write_file(self, row, actul_result, result_status): ''' 執(zhí)行用例結(jié)果寫入excel,并保存 ''' if isinstance(row, int) and (self.ws.min_row + 1 <= row < self.ws.max_row): self.ws.cell(row=row, column=self.ws.max_column - 1, value=actul_result) self.ws.cell(row=row, column=self.ws.max_column, value=result_status) self.wb.save(self.file_path) else: print("處理失??!") if __name__ == '__main__': file_path = u'E:\\heguanghua\\python\\接口自動化\\api.xlsx' sheet_name = 'Sheet1' res = ReadExcelData(file_path,sheet_name).get_all_cases() print(res) print('================================================') re = ReadExcelData(file_path,sheet_name).get_one_case(2) print(re) |
|