python接口自动化测试 - openpyxl基本使用

简介: python接口自动化测试 - openpyxl基本使用

前言


  • 当你做接口自动化测试时,测试用例逐渐变多情况下,如果所有测试用例都通过代码管理将会使得代码十分臃肿,而且维护成本会很高;
  • 所以我们一般会通过Excel去管理所有的测试用例,而openpyxl库提供了访问Excel的方法

 

openpyxl简单介绍


  • 一个Python库,用于读取/写入Excel 2010  xlsxxlsmxltxxltm 文件
  • 不能操作 xls 文件

 

openpyxl简单概念


  • Workbook:excel工作表
  • Sheet:工作表中的一张表
  • Cell:其中的一个单元格
  • 简单步骤:打开Workbook,选中Sheet,操作Cell

 

openpyxl简单使用


1 import openpyxl
 2 
 3 if __name__ == '__main__':
 4     path = 'F:/imocInterface/case/imooc.xlsx'
 5     # 读取excel文件
 6     workbook = openpyxl.load_workbook(path)
 7     # 读取所有sheet
 8     sheet = workbook.get_sheet_names()
 9     # 获取某个sheet
10     sheet = workbook[sheet[0]]
11     # 获取某个cell的值
12     cell_val = sheet.cell(row=2, column=2).value
13     print(cell_val)


包含知识点


  • 调用 load_workbook() 等同于调用 open()
  • 第8、10行代码可能浓缩成一行代码 workbook.get_sheet_by_name("sheet的名字") ,前提是你得知道sheet的命名
  • cell(row, column, value=None) 三个参数分别是:行,列,值;若设置了value相当于赋值操作,会覆盖原本的值

 

openpyxl操作单元格


访问单个cell

1     # 方式一:获取A4单元格的值
2     cell_val = sheet['A4'].value
3     # 方式二:获取第二行,第二列的单元格的值
4     cell_val = sheet.cell(row=2, column=2).value


访问多个cell


1     # A1-B3的单元格 共6个
 2     cell_range = sheet['A1':'B3']
 3 
 4     # A1-A3的单元格 共3个
 5     cell_range = sheet['A1:A3']
 6 
 7     # 第十行的单元格
 8     cell_range = sheet[10]
 9 
10     # 第1、2行的单元格
11     cell_range = sheet[1:2]


注意:以上方法返回的是都是cell对象组成tuple

 

获取指定范围的cell


1     # 返回行
2     for col in sheet.iter_rows(min_row=1, min_col=1, max_col=3, max_row=2):
3         for cell in col:
4             print(cell)
5 
6     # 返回列
7     for col in sheet.iter_cols(min_row=1, min_col=1, max_col=3, max_row=2):
8         for cell in col:
9             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


1     # 以列的形式,获取sheet的全部cell
 2     data = tuple(sheet.columns)
 3 
 4     # 以行的形式,获取sheet的全部cell
 5     data = tuple(sheet.rows)
 6 
 7     # 获取所有数据
 8     data = tuple(sheet.values)
 9     # 指定返回某一行数据
10     print(data[2])


注意:sheet.rows 返回的是一个对象,需要用 tuple() 才能将对象转换成tuple

官方提醒:出于性能考虑, sheet.cloumns 方法不支持在只读模式使用

 

获取sheet的行数、列数


1     # 获取sheet最大行
 2     data = sheet.max_row
 3 
 4     # 获取sheet最多列
 5     data = sheet.max_column
 6 
 7     # 获取sheet最小行
 8     data = sheet.min_row
 9 
10     # 获取sheet最小列
11     data = sheet.min_column


openpyxl写入数据


1     workbook = openpyxl.load_workbook(path)
2     sheet = workbook.active
3     sheet.cell(row=2, col=2, value="213")
4     workbook.save(filename=path)


包含知识点

  • 写入数据的文件需要是可写文件,需要已关闭;若打开着excel的话无法写入会报 PermissionError: [Errno 13] Permission denied: 'XXXXX.xlsx'
  • 其实就是四部曲:获取excel - 执行 workbook.active - 赋值操作 - 保存文件
  • 赋值操作还可以是 sheet["B2"] = "213" ,等价于上面第三行代码
  • save() 会覆盖原有文件,不会有提醒

 

相关文章
|
13天前
|
C语言 Python
python 调用c接口
【10月更文挑战第12天】 ctypes是Python的一个外部库,提供和C语言兼容的数据类型,可以很方便地调用C DLL中的函数
37 0
|
7天前
|
数据安全/隐私保护 Python
python之自动化进入CSDN
python之自动化进入CSDN
13 0
|
2天前
|
JSON 测试技术 持续交付
自动化测试与脚本编写:Python实践指南
自动化测试与脚本编写:Python实践指南
9 1
|
4天前
|
数据采集 机器学习/深度学习 搜索推荐
Python自动化:关键词密度分析与搜索引擎优化
Python自动化:关键词密度分析与搜索引擎优化
|
16天前
|
运维 监控 网络安全
自动化运维的魔法:如何用Python简化日常任务
【10月更文挑战第9天】在数字时代的浪潮中,运维人员面临着日益增长的挑战。本文将揭示如何通过Python脚本实现自动化运维,从而提高效率、减少错误,并让运维工作变得更具创造性。我们将探索一些实用的代码示例,这些示例将展示如何自动化处理文件、监控系统性能以及管理服务器配置等常见运维任务。准备好让你的运维工作升级换代了吗?让我们开始吧!
|
17天前
|
JSON 算法 数据可视化
测试专项笔记(一): 通过算法能力接口返回的检测结果完成相关指标的计算(目标检测)
这篇文章是关于如何通过算法接口返回的目标检测结果来计算性能指标的笔记。它涵盖了任务描述、指标分析(包括TP、FP、FN、TN、精准率和召回率),接口处理,数据集处理,以及如何使用实用工具进行文件操作和数据可视化。文章还提供了一些Python代码示例,用于处理图像文件、转换数据格式以及计算目标检测的性能指标。
29 0
测试专项笔记(一): 通过算法能力接口返回的检测结果完成相关指标的计算(目标检测)
|
22天前
|
运维 监控 网络安全
Python 在网络运维方面的自动化应用实例
Python 在网络运维方面的自动化应用实例
47 4
|
24天前
|
JSON 缓存 API
在 Python 中使用公共类处理接口请求的响应结果
在 Python 中使用公共类处理接口请求的响应结果
21 1
|
22天前
|
存储 BI 数据库
使用 Python 实现自动化办公
使用 Python 实现自动化办公
24 0
|
23天前
|
数据采集 消息中间件 API
Python爬虫验证码识别——手机验证码的自动化处理
Python爬虫验证码识别——手机验证码的自动化处理
31 0