📜  框架中的参数化测试 (1)

📅  最后修改于: 2023-12-03 15:10:50.212000             🧑  作者: Mango

框架中的参数化测试

在软件测试中,参数化测试是一种测试方法,它允许测试人员使用不同的输入参数执行相同的测试用例,并比较不同的测试运行结果。这种方法消除了针对每种可能的输入参数编写单独测试用例的需要。

在软件开发中,使用测试框架编写参数化测试可以大大提高测试效率,避免对大量数据和场景的手工测试。本文将介绍测试框架中参数化测试的实现方法。

第一步:安装测试框架

大部分主流的编程语言都有测试框架可用,例如:

  • Java:JUnit、TestNG
  • Python:unittest、pytest
  • JavaScript:Mocha、Jasmine
  • Ruby:RSpec
  • PHP:PHPUnit

在安装测试框架之前,确保已经安装了与其兼容的开发工具和语言环境。

以Python中的pytest为例,可以通过pip命令进行安装:

pip install pytest
第二步:编写测试用例

编写测试用例包括两项任务。首先,我们需要定义测试目标;其次,我们需要编写测试代码。

在编写测试用例时,考虑实现方法的功能。我们需要为每个测试方法编写测试数据和预期结果。

# content of test_sample.py
import pytest

def func(x):
    return x + 1

def test_answer():
    assert func(3) == 5

@pytest.mark.parametrize("input,expected", [
    (1, 2),
    (2, 3),
    (3, 4),
])
def test_increment(input, expected):
    assert func(input) == expected

解释:

第7行:定义一个函数func,它接受一个参数x并返回一个增加1的值。

第9行-12行:一个简单的参数化测试用例,在参数化测试中定义了输入参数(input)和期望的输出结果(expected)列表,使用pytest.mark.parametrize作为装饰器进行修饰,pytest运行后将执行这三个测试用例。这里使用了Unittest中的assertEqual。

第三步:运行测试用例

运行测试用例通常是命令行模式下运行的。如果使用pytest,我们可以运行:

pytest

或者:

pytest test_sample.py

以运行单独的测试用例。

在运行测试时,pytest收集和执行测试用例,输出测试结果,如果测试用例发生错误,则输出关于错误发生的详细信息。在本示例中,输出应如下所示:

$ pytest
=================== test session starts ===================
platform linux -- Python 3.x.y, pytest-5.x.y, py-1.x.y, pluggy-0.x.y
rootdir: /path/to/project/root
collected 4 items

test_sample.py .F.                                     [100%]

=================== FAILURES ===================
___________________ test_increment[2-3] ________________

input = 2, expected = 3

    @pytest.mark.parametrize("input,expected", [
        (1, 2),
        (2, 3),
        (3, 4),
    ])
    def test_increment(input, expected):
>       assert func(input) == expected
E       assert 3 == 4
E        +  where 3 = func(2)

test_sample.py:16: AssertionError
================= short test summary info =================
FAILED test_sample.py::test_increment[2-3] - AssertionError: assert 3 == 4
==================== 1 failed, 3 passed in 0.10s =====================

解释:

在本示例中,UnaryOperator添加了一个订单时有问题。

  • 在第10行中的第一个测试用例,我们期望函数func(3)的结果为5。实际上,结果是4,因此测试失败。

  • 第15行-18行,这个测试用例包含三组输入参数以及相应的预期输出结果。pytest会在遍历每组参数输入并执行相应的测试用例时,将这些参数发送给test_increment()函数。

  • 在第16行,使用assert语句来断言函数func()的输出是否与预期的输出匹配。如果不匹配,测试将失败。

报告生成

可选

运行pytest -v可以获得详细的测试过程和结果。同时,pytest通常会自动生成HTML格式的测试结果报告。

在安装了pytest-html后,可以运行以下命令生成测试报告:

pytest --html=report.html

其中report.html可以替换为你想要存储测试报告的任何文件名。 自动生成的报告将在浏览器中自动打开,报告中包含有关每个测试用例的详细信息和错误堆栈跟踪。