接口自动化--读取Excel操作(openpyxl)
上次我们已经将requests库封装成我们想要的样子了,我们的接口自动化已经完成了最开始的一步了,接下来我们需要完成我们相应的其他模块的封装,下面简单介绍下我们在接口自动化需要用到的模块吧
在接口自动化中我们常用的模块有requests、openpyxl、pymysql、configparser、ddt、HTMLTestRunner等一些模块
下面介绍下openpyxl是怎么用的吧
安装方式
pip install openpyxl
使用方式
直接看代码块吧,详细描述在代码块里面的注释会写的
1 import openpyxl 2 3 4 # 获取wb的对象 5 wb = openpyxl.load_workbook(r"D:\test.xlsx") 6 # 获取工作表 7 sheet = wb["test1"] 8 # 读取改工作表的最大行 9 print(sheet.max_row)
上面的只是一个openpyxl的简单用法,获取Excel里面的数据我直接封装到类里面了
下面的封装方法都是适用任何项目的
import openpyxl class ReadExcel: """读取Excel""" def __init__(self, file_path, sheet_name): self.file_path = file_path self.sheet_name = sheet_name def open(self): """获取wb对象""" self.wb = openpyxl.load_workbook(self.file_path) def get_sheet(self): """ 获取sheet """ self.open() sheet = self.wb[self.sheet_name] self.wb.close() return sheet def get_cell(self, row, col): """ 获取单元格对象 """ object = self.get_sheet().cell(row, col) self.wb.close() return object def get_cell_value(self, row, col): """ 获取某一个单元格的值 """ data = self.get_cell(row, col).value self.wb.close() return data def read(self): """读取所有数据""" # 运用列表推导式获取title headers = [i.value for i in self.get_sheet()[1]] row_data = [] for row in range(2, self.get_sheet().max_row+1): data = [] for col in range(1, self.get_sheet().max_column+1): data.append(self.get_cell_value(row, col)) # 用zip函数将两个列表组合成字典 data_info = dict(zip(headers, data)) row_data.append(data_info) self.wb.close() return row_data def write(self, row, col, values): """ 回写数据 :param row: :param col: :param values: :return: """ self.get_cell(row, col).value = values self.save() return self.get_cell(row, col).value def save(self): """ 保存 :return: """ self.wb.save(self.file_path)
读取所有的数据展示是这样的:
其实在做Excel的数据回写,一般是采用静态方法,我上面没有采用静态方法的原因是因为我的每一个wb对象使用完之后都是进行关闭的,所以不会有什么影响,但是如果说你的wb对象是在init方法中获取,建议还是回写操作用静态方法。
--------------------------------------------------------------------------------------------------------------------------------------学无止境,欢迎大家提意见,共同交流进步----------------------------------------------------------------------------------------------------------------------------------------------------------------------