pytest
是一个强大的 Python 测试框架,它提供了多种参数化测试的方法。参数化测试允许你使用不同的输入集来运行相同的测试逻辑,从而确保代码在各种条件下都能正常工作。以下是 pytest
中几种常用的参数化方法:
@pytest.mark.parametrize
装饰器这是 pytest
中最常用的参数化方法。你可以使用 @pytest.mark.parametrize
装饰器来指定测试函数的参数和对应的值。
示例:
import pytest
@pytest.mark.parametrize("input, expected", [
(1, 2),
(2, 4),
(3, 6),
])
def test_multiplication(input, expected):
assert input * 2 == expected
在这个例子中,test_multiplication
函数会被调用三次,每次使用不同的 (input, expected)
对作为参数。
pytest-cases
是一个第三方插件,它提供了更强大和灵活的参数化方法。你可以使用它来定义和组合测试用例,并将它们作为参数传递给测试函数。
安装:
pip install pytest-cases
示例:
import pytest
from pytest_cases import case, parametrize_with_cases
@case(id="case1")
def case_data1():
return 1, 2
@case(id="case2")
def case_data2():
return 2, 4
@parametrize_with_cases("input, expected", cases=[case_data1, case_data2])
def test_multiplication(input, expected):
assert input * 2 == expected
在这个例子中,我们使用了 pytest-cases
插件来定义了两个测试用例 case_data1
和 case_data2
,并将它们作为参数传递给 test_multiplication
函数。
pytest-subtests
插件允许你在一个测试函数中运行多个子测试,每个子测试都有自己的输入和预期输出。这对于测试具有多个分支或条件的函数非常有用。
安装:
pip install pytest-subtests
示例:
import pytest
from pytest_subtests import SubTests
def test_multiplication():
with SubTests() as subtests:
for input, expected in [(1, 2), (2, 4), (3, 6)]:
with subtests.test(input=input, expected=expected):
assert input * 2 == expected
在这个例子中,我们使用 pytest-subtests
插件在一个测试函数中运行了多个子测试。每个子测试都使用不同的 (input, expected)
对作为参数。
这些是 pytest
中常用的参数化方法。你可以根据你的具体需求选择适合你的方法来进行参数化测试。