pytest.mark.parameterize - это декоратор, который позволяет параметризовать тесты в pytest, что позволяет запускать один и тот же тест с разными входными данными.
1. Пример с использованием списка параметров:
import pytest
@pytest.mark.parametrize("input, expected", [(1, 2), (2, 3), (3, 4)])
def test_increment_function(input, expected):
assert input + 1 == expected
В этом примере тест test_increment_function будет запущен трижды с разными параметрами (1, 2), (2, 3) и (3, 4).
2. Пример с использованием параметризации по именованным аргументам:
import pytest
@pytest.mark.parametrize("input, expected", [
(1, 2),
pytest.param(2, 4, marks=pytest.mark.xfail)
])
def test_double_function(input, expected):
assert input * 2 == expected
В этом примере второй тест с параметрами (2, 4) помечен как ожидаемо падающий с помощью pytest.mark.xfail.
3. Пример с динамической генерацией параметров:
import pytest
@pytest.mark.parametrize("input", range(5))
def test_square_function(input):
assert input ** 2 == input * input
В этом примере тест test_square_function будет запущен пять раз с параметрами от 0 до 4.
4. Пример с использованием параметризации по словарю:
import pytest
@pytest.mark.parametrize("name, age", [
("Alice", 25),
("Bob", 30),
("Eve", 28)
])
def test_person_age(name, age):
assert age > 20
В этом примере тест test_person_age будет запущен трижды с разными параметрами (имя, возраст).
5. Пример с использованием параметризации по различным типам входных данных:
import pytest
@pytest.mark.parametrize("input, expected", [
(1, 2),
("hello", "hello world"),
([1, 2, 3], [1, 2, 3, 4])
])
def test_append_function(input, expected):
result = input + [4]
assert result == expected
В этом примере тест test_append_function будет запущен трижды с различными типами входных данных: целое число, строка и список.
6. Пример использования параметризации с использованием фабричных функций:
import pytest
def data_provider():
return [
(1, 2),
(2, 3),
(3, 4)
]
@pytest.mark.parametrize("input, expected", data_provider())
def test_increment_function(input, expected):
assert input + 1 == expected
В этом примере функция data_provider используется для генерации параметров для теста test_increment_function.
7. Пример с использованием параметризации с фильтрацией параметров:
import pytest
@pytest.mark.parametrize("input", range(10), ids=lambda x: f"input={x}")
def test_even_number(input):
pytest.skip("Skipping the test for odd numbers")
assert input % 2 == 0
В этом примере тест test_even_number будет пропущен для нечетных чисел с помощью pytest.skip.