Как работает @pytest.mark.parametrize
1️⃣ Как кратко ответить
@pytest.mark.parametrize — это декоратор в библиотеке Pytest, который позволяет запускать один и тот же тест с разными наборами входных данных. Он упрощает тестирование функций с различными параметрами, улучшая покрытие тестами и снижая дублирование кода.
2️⃣ Подробное объяснение темы
@pytest.mark.parametrize — это мощный инструмент в Pytest, который позволяет тестировать функции с различными входными данными без необходимости писать отдельные тесты для каждого набора данных. Это особенно полезно, когда нужно проверить, как функция ведет себя с разными входными значениями, и убедиться, что она правильно обрабатывает все возможные случаи.
Зачем это нужно
- Улучшение покрытия тестами: Позволяет протестировать функцию на большем количестве случаев, что увеличивает вероятность обнаружения ошибок.
- Снижение дублирования кода: Вместо написания нескольких тестов с разными данными, можно использовать один тест с параметризацией.
- Удобство и читаемость: Код тестов становится более компактным и легким для понимания.
Как это работает
Декоратор @pytest.mark.parametrize принимает два основных аргумента:
- Список параметров: Перечисление имен переменных, которые будут использоваться в тесте.
- Список значений: Наборы значений, которые будут подставляться в параметры.
Пример использования
Рассмотрим пример, где у нас есть функция, которая проверяет, является ли число четным:
def is_even(number):
return number % 2 == 0
Теперь создадим тест с использованием @pytest.mark.parametrize:
import pytest
@pytest.mark.parametrize("input,expected", [
(2, True), # Четное число, ожидаем True
(3, False), # Нечетное число, ожидаем False
(0, True), # Ноль, четное число, ожидаем True
(-2, True), # Отрицательное четное число, ожидаем True
(-3, False) # Отрицательное нечетное число, ожидаем False
])
def test_is_even(input, expected):
assert is_even(input) == expected
Объяснение кода
-
@pytest.mark.parametrize("input,expected", [...]): Декоратор принимает два аргумента. Первый — это строка с именами параметров, которые будут использоваться в тесте. Второй — список кортежей, где каждый кортеж содержит набор значений для параметров. -
def test_is_even(input, expected):: Определение тестовой функции, которая принимает параметрыinputиexpected. Эти параметры будут автоматически заполняться значениями из списка значений, переданных в декоратор. -
assert is_even(input) == expected: Проверка, что результат вызова функцииis_evenс параметромinputсоответствует ожидаемому значениюexpected.
Применение
Этот подход позволяет легко добавлять новые тестовые случаи, просто добавляя новые кортежи в список значений. Это делает тесты более гибкими и масштабируемыми. @pytest.mark.parametrize широко используется в автоматизированном тестировании для проверки функций с различными входными данными, что делает его незаменимым инструментом для специалистов по AQA.
🔒 Подпишись на бусти автора и стань Алигатором, чтобы получить полный доступ к функционалу сайта и отслеживать свой прогресс!
Подписаться