Skip to content

Pytest结合数据驱动 excel

Pytest 结合数据驱动-excel

Excel 简介

Excel 是一种电子表格程序,由微软公司开发和发布,是 Microsoft Office 套件的一部分。它广泛用于各种领域,包括商业、科学、教育和个人用途。Excel 提供了强大的数据分析、计算、图表制作和数据管理功能,使用户能够轻松地创建、编辑和分析电子表格。

Excel 文件的优点

  1. 灵活性:使用 Excel 作为数据源,可以方便地对测试数据进行管理和维护,而无需修改测试代码。当测试数据发生变化时,只需更新 Excel 文件,而不需要修改代码。

  2. 可扩展性:通过将测试数据存储在 Excel 文件中,可以轻松地添加新的测试数据,甚至可以使用不同的数据文件来执行相同的测试用例。这种灵活性使得很容易地进行大规模的数据驱动测试。

  3. 可读性:Excel 文件以表格形式展示测试数据,每个单元格都有明确的含义,使得测试数据易于理解和维护。这对于与非技术人员协作时,特别有帮助。

  4. 可重用性:将测试数据与测试代码分离,可以重复使用相同的测试代码,只需更换不同的数据文件即可。这样,可以通过多个数据文件执行相同的测试用例,从而增加测试覆盖率。

Excel 文件的使用

读取 Excel 文件的方法

  • 第三方库
  • xlrd
  • xlwings
  • pandas
  • openpyxl
  • 官方文档:https://openpyxl.readthedocs.io/en/stable/

openpyxl 库的安装

  • 安装:pip install openpyxl
  • 导入:import openpyxl

openpyxl 库的操作

  • 读取工作簿
  • 读取工作表
  • 读取单元格
import openpyxl

# 获取工作簿
book = openpyxl.load_workbook('../data/params.xlsx')

# 读取工作表
sheet = book.active

# 读取单个单元格
cell_a1 = sheet['A1']
cell_a3 = sheet.cell(column=1, row=3)  # A3

# 读取多个连续单元格
cells = sheet["A1":"C3"]

# 获取单元格的值
cell_a1.value

对应练习

工程目录结构:

  • data 目录:存放 excel 数据文件。
  • func 目录:存放被测函数文件。
  • testcase 目录:存放测试用例文件。
#工程目录结构
.
├── data
│   └── params.excel
├── func
│   ├── __init__.py
│   └── operation.py
└── testcase
    ├── __init__.py
    └── test_add.py

测试准备:

  • 被测对象:operation.py

  • 测试用例:test_add.py

  • 测试数据:params.xlsx

代码示例:

# operation.py 文件内容
def my_add(x, y):
    result = x + y
    return result

# test_add.py 文件内容
import openpyxl
import pytest

def get_excel():
    # 获取工作簿
    book = openpyxl.load_workbook('../data/params.xlsx')

    # 获取活动行(非空白的)
    sheet = book.active

    # 提取数据,格式:[[1, 2, 3], [3, 6, 9], [100, 200, 300]]
    values = []
    for row in sheet:
        line = []
        for cell in row:
            line.append(cell.value)
        values.append(line)
    return values

class TestWithEXCEL:
    @pytest.mark.parametrize('x,y,expected', get_excel())
    def test_add(self, x, y, expected):
        assert my_add(int(x), int(y)) == int(expected)

测试结果:

总结

  • 数据驱动-excel 的优点。
  • openpyxl 库的安装与使用。