前言
当你做接口自动化测试时, 测试用例逐渐变多情况下, 如果所有测试用例都通过代码管理将会使得代码十分臃肿, 而且维护成本会很高;
所以我们一般会通过 Excel 去管理所有的测试用例, 而 openpyxl 库提供了访问 Excel 的方法
openpyxl 简单介绍
一个 Python 库, 用于读取 / 写入 Excel 2010 xlsx ,xlsm ,xltx ,xltm 文件
不能操作 xls 文件
openpyxl 简单概念
Workbook:Excel 工作表
Sheet: 工作表中的一张表
Cell: 其中的一个单元格
简单步骤: 打开 Workbook, 选中 Sheet, 操作 Cell
openpyxl 简单使用
- import openpyxl
- if __name__ == '__main__':
- path = 'F:/imocInterface/case/imooc.xlsx'
- # 读取 Excel 文件
- workbook = openpyxl.load_workbook(path)
- # 读取所有 sheet
- sheet = workbook.get_sheet_names()
- # 获取某个 sheet
- sheet = workbook[sheet[0]]
- # 获取某个 cell 的值
- cell_val = sheet.cell(row=2, column=2).value
- print(cell_val)
包含知识点
调用 load_workbook() 等同于调用 open()
第 8,10 行代码可能浓缩成一行代码 workbook.get_sheet_by_name("sheet 的名字") , 前提是你得知道 sheet 的命名
cell(row, column, value=None) 三个参数分别是: 行, 列, 值; 若设置了 value 相当于赋值操作, 会覆盖原本的值
openpyxl 操作单元格
访问单个 cell
- # 方式一: 获取 A4 单元格的值
- cell_val = sheet['A4'].value
- # 方式二: 获取第二行, 第二列的单元格的值
- cell_val = sheet.cell(row=2, column=2).value
访问多个 cell
- # A1-B3 的单元格 共 6 个
- cell_range = sheet['A1':'B3']
- # A1-A3 的单元格 共 3 个
- cell_range = sheet['A1:A3']
- # 第十行的单元格
- cell_range = sheet[10]
- # 第 1,2 行的单元格
- cell_range = sheet[1:2]
注意: 以上方法返回的是都是 cell 对象组成 tuple
获取指定范围的 cell
- # 返回行
- for col in sheet.iter_rows(min_row=1, min_col=1, max_col=3, max_row=2):
- for cell in col:
- print(cell)
- # 返回列
- for col in sheet.iter_cols(min_row=1, min_col=1, max_col=3, max_row=2):
- for cell in col:
- print(cell)
获取指定范围 cell 的测试结果
- # 返回行
- <Cell 'Sheet1'.A1>
- <Cell 'Sheet1'.B1>
- <Cell 'Sheet1'.C1>
- <Cell 'Sheet1'.A2>
- <Cell 'Sheet1'.B2>
- <Cell 'Sheet1'.C2>
- # 返回列
- <Cell 'Sheet1'.A1>
- <Cell 'Sheet1'.A2>
- <Cell 'Sheet1'.B1>
- <Cell 'Sheet1'.B2>
- <Cell 'Sheet1'.C1>
- <Cell 'Sheet1'.C2>
官方提醒: 出于性能考虑, sheet.iter_cols() 方法不支持在只读模式使用
获取 sheet 内所有行和列的 cell
- # 以列的形式, 获取 sheet 的全部 cell
- data = tuple(sheet.columns)
- # 以行的形式, 获取 sheet 的全部 cell
- data = tuple(sheet.rows)
- # 获取所有数据
- data = tuple(sheet.values)
- # 指定返回某一行数据
- print(data[2])
注意: sheet.rows 返回的是一个对象, 需要用 tuple() 才能将对象转换成 tuple
官方提醒: 出于性能考虑, sheet.cloumns 方法不支持在只读模式使用
获取 sheet 的行数, 列数
- # 获取 sheet 最大行
- data = sheet.max_row
- # 获取 sheet 最多列
- data = sheet.max_column
- # 获取 sheet 最小行
- data = sheet.min_row
- # 获取 sheet 最小列
- data = sheet.min_column
openpyxl 写入数据
- workbook = openpyxl.load_workbook(path)
- sheet = workbook.active
- sheet.cell(row=2, col=2, value="213")
- workbook.save(filename=path)
包含知识点
写入数据的文件需要是可写文件, 需要已关闭; 若打开着 Excel 的话无法写入会报 PermissionError: [Errno 13] Permission denied: 'XXXXX.xlsx'
其实就是四部曲: 获取 Excel - 执行 workbook.active - 赋值操作 - 保存文件
赋值操作还可以是
sheet["B2"] = "213"
, 等价于上面第三行代码
save() 会覆盖原有文件, 不会有提醒
来源: https://www.cnblogs.com/poloyy/p/12239344.html