计算测试示例

在前面的例子中,我们只对测试步骤做了【加法计算】这一种处理,

在实际项目中,测试步骤的类型往往有多种 不同的步骤类型 ,需要不同的方式去执行。

接下来我们实现支持加、减、乘、除这4种类型的的计算测试,来模拟演示不同步骤类型的实现方式

设计用例

这一次,我们将每一行数据的 关键字 字段进行修改,用以表示步骤的类型

test_case.xlsx

关键字

name

计算测试

add

111

222

333

subtract

111

333

-111

multiply

111

333

222

divide

111

222

0.5

为了保持简单,本例不同的步骤类型中内容格式是相同的,但这不是强制要求,你可以为不同的步骤类型定义不同的内容格式、不同的处理方式。

警告

如果每个步骤的参数数量不一致,则需要在钩子中小心处理

实现钩子

由于测试步骤发生了变化,钩子必须更新才正确处理。

在新的钩子实现中,我们需要做到2点:

  1. 判断具体的步骤类型

  2. 根据不同的步骤类型,做出不同的测试动作

from pytest_xlsx import XlsxItem

def pytest_xlsx_run_step(item: XlsxItem):
    step = item.current_step
    action = step.get("关键字")
    # `_BlankField`  # `_BlankField`  存储所有空白字段数据
    num1, num2, expected_results = (step.get("_BlankField"))

    match action:  # 根据不同的步骤类型,匹配不同的测试动作
        case 'add':  # 加
            actual_results = num1 + num2
        case 'subtract':  # 减
            actual_results = num1 - num2
        case 'multiply':  # 乘
            actual_results = num1 * num2
        case 'divide':  # 除
            actual_results = num1 / num2

        case _:
            raise ValueError('无法识别的步骤类型')

    # 对步骤的执行结果进行断言
    assert actual_results == expected_results
    return True

执行结果如下:

(.venv) C:\demo\pytest-xlsx-demo>pytest
=========================== test session starts ============================
platform win32 -- Python 3.12.0, pytest-8.2.2, pluggy-1.5.0
rootdir: C:\demo\pytest-xlsx-demo
configfile: pytest.ini
plugins: xlsx-2.0.0
collected 1 item

tests\example\test_case.xlsx F                                        [100%]

================================= FAILURES =================================
_______________________________ Sheet1.计算测试 ________________________________
xlsx content:
|     | 关键字   |   _BlankField |     |        |
|-----|----------|---------------|-----|--------|
|     | add      |           111 | 222 |  333   |
| >>> | subtract |           111 | 333 | -111   |
|     | multiply |           111 | 333 |  222   |
|     | divide   |           111 | 222 |    0.5 |
C:\demo\pytest-xlsx-demo\conftest.py:47: AssertionError
assert -222 == -111
========================= short test summary info ==========================
FAILED tests/example/test_case.xlsx::Sheet1::计算测试
============================ 1 failed in 0.03s =============================

在结果中可以看到详细的说明:第二个测试步骤 断言失败

小结

至此,便实现了四种不同步骤类型的计算测试,根据需要,你还可以再定义更多的步骤类型。 在符合xlsx用例基本格式的前提下,用例的步骤可以写任意内容,只需要钩子函数对其进行处理即可。

简而言之:

  • xlsx记录步骤内容

  • 钩子执行步骤内容