Найти в Дзене
Halibut Testing

ПРИМЕРЫ ТЕСТОВ С ИСПОЛЬЗОВАНИЕМ @pytest.mark.parametrize

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.