- 做接口自动化测试时,测试用例逐渐变多情况下,如果所有测试用例都通过代码管理将会使得代码十分臃肿,而且维护成本会很高;
- 所以我们一般会通过Excel去管理所有的测试用例,而openpyxl库提供了访问Excel的方法
一、openpyxl介绍
- 一个Python库,用于读取/写入Excel 2010 xlsx 、xlsm 、xltx 、xltm 文件
- 不能操作 xls 文件
二、openpyxl简单概念
- Workbook:excel工作表
- Sheet:工作表中的一张表
- Cell:其中的一个单元格
- 简单步骤:打开Workbook,选中Sheet,操作Cell
三、使用场景
数据驱动ddt,所有的方法和业务逻辑保持不变,变的是你的接口的数据
- 1.自动化测试用例(excel保存接口数据)
- 2.自动化测试用例(数据库保存接口数据),学习成本高一些,熟悉数据库操作;
- 3.办公自动化(财务)
四、具体使用
1.安装openpyxl
pip install openpyxl
2.读取excel数据
1):打开excel:创建表对象
2):获取表单:获取表单对象
3):查看单元格:获取单元格对象
4):获取单元格数据:获取单元格内容
5):关闭excel:表:关闭excel
3.写excel数据
基本使用案例
import openpyxl
# 1):打开excel:创建表对象
wb_obj = openpyxl.load_workbook(filename="test.xlsx")
# 2):获取表单:获取表单对象
sheet_obj = wb_obj["can"]
# 3):查看单元格:获取单元格对象
cell_obj = sheet_obj["B6"]
# 4):获取单元格数据:获取单元格内容
result = cell_obj.value
print(result)
# 5):关闭excel:表:关闭excel
wb_obj.close()
执行结果
五、参数解释
wb_obj = openpyxl.load_workbook(filename="test.xlsx")
#filename:文件名称(要带路径)
#read_only=FalseL:读写控制,默认是False,可读可写
#keep_vba=KEEP_VBA:是否保留vba代码
#data_only=False:只显示公式,True:自动计算公式,读出结果
#keep_links=True:保留默认外部链接
获取表单对象
sheet_obj = wb_obj["can"]
#如果不知道表单名称,可获取所有的表单名称
res=wb_obj.sheetnames
print(res)#['can', 'Sheet2', 'Sheet3']
sheet_obj = wb_obj["can"]等价于wb.get_sheet_by_name("sheet的名字")
六、访问cell
- 访问单个cell
cell_obj=sheet_obj["C6"]
res=cell_obj.value
print(res)
cell_obj=sheet_obj.cell(row=3,column=3)
print(cell_obj.value)
- 行切片与列切片
import openpyxl
# 1):打开excel:创建表对象
wb_obj = openpyxl.load_workbook("test.xlsx")
# # 2):获取表单:获取表单对象
sheet_obj = wb_obj["can"]
# print(sheet_obj)
# 3):查看单元格:获取单元格对象
cell_obj = sheet_obj.cell(row=3, column=3)
# 4):查看单元格:获取单元格对象
print(cell_obj.value)
# 行切片
results = sheet_obj.iter_rows(min_row=1, max_row=4, min_col=1, max_col=3, values_only=True)
for lis in results:
print(lis)
"""
min_row=None:行切片的起始索引,默认为1
max_row=None:行切片的结束索引,默认为1
min_col=None:列切片的起始索引,默认为1
max_col=None列切片的结束索引,默认为1
values_only=False:是否直接返回对象的属性(数据还是对象),True:返回数据,False:返回对象
"""
# 列切片(参数与行切片一致)
results1 = sheet_obj.iter_cols(min_row=1, max_row=2, min_col=1, max_col=2, values_only=True)
for lis1 in results1:
print(lis1)
运行结果
湖北3
(1, '北京1', '湖北1')
(2, '北京2', '湖北2')
(3, '北京3', '湖北3')
(4, '北京4', '湖北4')
(1, 2)
('北京1', '北京2')
- 获取所有的行和列
# 以列的形式,获取sheet的全部cell
data = tuple(sheet_obj.columns)
# 以行的形式,获取sheet的全部cell
data = tuple(sheet_obj.rows)
# 获取所有数据
data = tuple(sheet_obj.values)
#打印所有行的数据
print(data)
# 指定返回某一行数据
print(data[1])
wb_obj.close()
七、openpyxl写入数据
sheet=wb_obj.active
sheet.cell(row=1,column=1,value="6666")
wb_obj.save("test.xlsx")
执行结果
知识点
- 写入数据的文件需要是可写文件,需要已关闭;
- 若打开着excel的话无法写入会报 PermissionError: [Errno 13] Permission denied: ‘XXXXX.xlsx’
- 其实就是四部曲:获取excel - 执行
wb_obj.active
- 赋值操作 -保存文件; - 赋值操作还可以是
sheet["A1"] = "6666"
,等价于上面第三行代码; - save() 会覆盖原有文件,不会有提醒