zoukankan      html  css  js  c++  java
  • python接口自动化测试

    前言

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

    openpyxl简单介绍

    • 一个Python库,用于读取/写入Excel 2010  xlsx 、xlsm 、xltx 、xltm 文件
    • 不能操作 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() 会覆盖原有文件,不会有提醒
  • 相关阅读:
    【树链剖分】【线段树】bzoj2157 旅游
    【高斯消元】【异或方程组】poj1222 EXTENDED LIGHTS OUT
    【树链剖分】【线段树】bzoj3626 [LNOI2014]LCA
    【dfs】bzoj3563 DZY Loves Chinese
    【高斯消元】【异或方程组】【bitset】bzoj1923 [Sdoi2010]外星千足虫
    【高斯消元】bzoj1013 [JSOI2008]球形空间产生器sphere
    【博弈论】bzoj1115 [POI2009]石子游戏Kam
    【最近公共祖先】【树链剖分】CODEVS 1036 商务旅行
    【块状树】【博弈论】bzoj3729 Gty的游戏
    【博弈论】【SG函数】bzoj1777 [Usaco2010 Hol]rocks 石头木头
  • 原文地址:https://www.cnblogs.com/poloyy/p/12239344.html
Copyright © 2011-2022 走看看