pytest
是一个流行的 Python 测试框架,用于编写和运行单元测试、集成测试和功能测试。参数化测试允许你使用不同的输入数据来运行同一个测试函数,从而减少代码重复。
pytest
提供了几种参数化测试的方法:
@pytest.mark.parametrize
装饰器:这是最常用的方法。pytest_generate_tests
钩子函数:适用于更复杂的参数化需求。indirect
参数化:允许将参数传递给测试函数时进行进一步处理。假设你有一个函数 add(a, b)
,你想测试它在不同输入下的行为:
def add(a, b):
return a + b
你可以使用 @pytest.mark.parametrize
装饰器来参数化测试:
import pytest
@pytest.mark.parametrize("a, b, expected", [
(1, 2, 3),
(0, 0, 0),
(-1, 1, 0),
])
def test_add(a, b, expected):
assert add(a, b) == expected
在 @pytest.mark.parametrize
装饰器中,你可以为每个参数指定一个自定义名称,这样在测试报告中会更清晰。
import pytest
@pytest.mark.parametrize("first_number, second_number, result", [
(1, 2, 3),
(0, 0, 0),
(-1, 1, 0),
])
def test_add(first_number, second_number, result):
assert add(first_number, second_number) == result
在这个例子中,first_number
和 second_number
是自定义的参数名称,result
是期望的结果。
import pytest
def add(a, b):
return a + b
@pytest.mark.parametrize("first_number, second_number, result", [
(1, 2, 3),
(0, 0, 0),
(-1, 1, 0),
])
def test_add(first_number, second_number, result):
assert add(first_number, second_number) == result
通过这种方式,你可以清晰地重命名参数化测试中的参数,使测试代码更易读和维护。
领取专属 10元无门槛券
手把手带您无忧上云