Параметризация — это мощный инструмент в pytest, который позволяет выполнять один и тот же тестовый метод с различными входными данными. Это существенно упрощает написание кода, уменьшает дублирование и делает тесты более читаемыми.
Допустим, у вас есть функция, которая проверяет, является ли число четным, и вы хотите протестировать ее с несколькими значениями.
import pytest
def is_even(n):
return n % 2 == 0
@pytest.mark.parametrize("number, expected_result", [(2, True), (3, False), (4, True)])
def test_is_even(number, expected_result):
assert is_even(number) == expected_result
В данном примере тест test_is_even
будет запущен три раза с различными наборами данных.
Вы можете параметризировать несколько аргументов одновременно, передавая их в кортеже.
@pytest.mark.parametrize("a, b, expected_sum", [(1, 2, 3), (4, 5, 9), (10, 20, 30)])
def test_addition(a, b, expected_sum):
assert a + b == expected_sum
Чтобы упростить структуру и повысить читаемость, вы можете вынести тестовые данные в отдельный список.
data = [
(1, 2, 3),
(4, 5, 9),
(10, 20, 30)
]
@pytest.mark.parametrize("a, b, expected_sum", data)
def test_addition(a, b, expected_sum):
assert a + b == expected_sum
Вы можете комбинировать параметризованные декораторы для создания различных комбинаций аргументов.
@pytest.mark.parametrize("a", [1, 2, 3])
@pytest.mark.parametrize("b", [4, 5])
def test_combinations(a, b):
pass
В этом примере test_combinations
будет запущен 6 раз с каждой комбинацией значений a
и b
.
Параметризация с использованием @pytest.mark.parametrize
предоставляет гибкий и эффективный способ написания тестов, когда требуется проверить функцию или метод с различными входными данными. Это не только улучшает структуру и читаемость вашего кода тестов, но и обеспечивает широкое покрытие тестами без необходимости дублирования кода.
Содержание: