(1)接口自动化之openpyxl操作excel

注:没有python基础的同学,请先移步"python基础专栏"

https://blog.csdn.net/annlin_/category_11671481.html
目录

一、接口自动化做什么?

二、为什么学openpyxl?

三、开始学习

1、安装:pip install openpyxl

2、excel组成:xlsx文件、sheet表单、单元格

3、读取excel数据

4、往excel写或者修改数据(自动化阶段,不太用的上)

一、接口自动化做什么?

1、接口自动化,就是获取用例,根据用例数据(数据驱动)去发请求,结束后查看测试结果
2、接口自动化就是在围绕全局变量、参数传递、参数化来做的

二、为什么学openpyxl?

1、openpyxl是用来操作excel
2、数据驱动(接口请求参数的数据都放在excel)
3、测开阶段用数据库来管理用例,目前使用excel来管理用例

三、开始学习

1、安装:pip install openpyxl

2、excel组成:xlsx文件、sheet表单、单元格

3、读取excel数据

        1)、导入模块 

# 导入openpyxl包中的加载方法load_workbook
from openpyxl import load_workbook

        2)、获取excel文件对象

        示例文件:case_data.xlsx

        load_workbook(filename, read_only=False, keep_vba=KEEP_VBA,data_only=False,         keep_links=True)

    参数:
    filename:excel文件名称
    read_only=False:只读,不可编辑
    data_only=False:只读取公式,True:读取计算结果
    该方法返回的是一个对象
# 将获取到的excel对象赋值给wb_obj
wb_obj = load_workbook(filename="case_data.xlsx", read_only=False)
# 结果为<openpyxl.workbook.workbook.Workbook object at 0x7f87f06158d0>

        3)、获取sheet表单对象

        方法1,获取所有的表单名称组成的列表

names = wb_obj.sheetnames
print(names)
# 输出为['login', 'upload']

        方法2,根据名字获取,这个方法是比较常用的

sheet_obj = wb_obj["login"]
print(sheet_obj)
# 输出为<Worksheet "login">一个表单对象

        方法3,根据索引获取 

sheet_obj = wb_obj.worksheets[0]
print(sheet_obj)
# 输出为<Worksheet "login">一个表单对象

        4)、获取单元格内容

        方法1,使用行号获取

# 获取单元格对象sheet_obj["单元格标识"]
cell_obj = sheet_obj["B3"]
# 获取单元格内容
value = cell_obj.value
print(value)
# 输出结果为:校验短信

        方法2,使用具体的行列号获取

# 使用cell(行号,列号)方法获取
res = sheet_obj.cell(2, 6)
# 将获取到的对象值读出来
res = res.value
print(res)
# 输出为:
#  {
#    "mobile": "#mobile#"
#  }

      5)、每次使用完要关闭文件

wb_obj.close()

     6)、行操作的两种方法

        方法1:按行获取内容,先获取最大行,再获取所有行号,然后使用行号循环去取每一行的内容。这种方法不智能,仅作为了解,可以熟悉一下获取原理

# 行操作
# 按行获取
max_row = sheet_obj.max_row  # 获取最大行
max_column = sheet_obj.max_column  # 获取最大列
print(max_row, max_column)  # 输出4 10 (最大4行10列)
# 获取航对象
res = sheet_obj.rows
print(res)  
# 输出<generator object Worksheet._cells_by_row at 0x7fa889f335d0>是一个生成器,
# 从生成器中获取单元格的对象(元组)
for obj in res:
    print(obj) 
    # 输出为(<Cell 'login'.A1>, <Cell 'login'.B1>, <Cell 'login'.C1>, <Cell 'login'.D1>, <Cell 'login'.E1>......的元组
    # 从元组中获取行号
    for i in obj:
        print(i) 
        # 输出为A1,B1,C1....A2,B2.....
        # 获取每一行的值,等同于print(A1.value)
        print(i.value)
        # 输出为每一个单元格的值

        方法2:行切片获取,使用如下方法iter_rows(min_row=None,max_rows=None,min_col=None,max_col=None,values_only=False)# 参数说明
# min_row=None,起始行的索引值(从1开始,int类型,默认1)
# max_row=None,结束行的索引值(从1开始,int类型,默认最大行的值)
# min_col=None,起始列的索引值(从1开始,int类型,默认1)
# max_col=None,结束列的索引值(从1开始,int类型,默认最大列的值)
# (重点)values_only=False,False返回单元格对象,True返回单元格对应的数据
# 切片原则是两头都包含,包含起始索引位置也包含索引结束位置

# 行切片
result = sheet_obj.iter_rows(min_row=None, max_row=None, min_col=None, max_col=None, values_only=True)
# 返回的是生成器,所以需要使用list转一下
print(list(result))
# 输出结果为[('id', 'title', 'method', 'is_upload', 'url', 'data', 'replace_sql', 'expected_data', 'extract_data', 'check'), ......]。
# 将每一行放在一个元组里,所有的行元组组成一个列表

6)、列切片,使用iter_cols()方法,用法同上述的行切片

result = sheet_obj.iter_cols(min_row=None, max_row=None, min_col=None, max_col=None, values_only=True)  
print(list(result))
# 输出结果为:[('id', 1, 2, 3, None), ('title', '发送短信', '校验短信', '用户注册', '写进去的数据'), ('method', 'put', 'put', 'put', 'test_demo'),.....]
# 每一列的数据组成一个元组,所有的列元组组成一个列表。

4、往excel写或者修改数据(自动化阶段,不太用的上)

from openpyxl import load_workbook

wb_obj = load_workbook(filename="case_data.xlsx")
sheet_obj = wb_obj["login"]
# 这里有一个坑,修改数据或者写数据的之前,要先关掉文件,不然写不进去
# 写数据方法1,通过给单元格复制,修改数据或者写数据
sheet_obj["B3"] = "写进去的数据"
# 写数据方法2,使用具体的行列号,修改或者写数据
res = sheet_obj.cell(row=2, column=6, value="test_demo")
# 写完之后需要保存一下
wb_obj.save("case_data.xlsx")
wb_obj.close()

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值