Параметризация
Поддержка параметризации: pytest
позволяет легко создавать параметризованные тесты, которые выполняются с разными входными данными.
@pytest.mark.parametrize
- это декоратор, предоставляемый pytest
для параметризации тестов. Этот механизм позволяет вам запускать одну и ту же тестовую функцию с разными наборами входных данных. Такие тесты становятся более компактными, легко читаемыми и обеспечивают широкий охват возможных вариантов использования.
В примере:
@pytest.mark.parametrize("input, expected", [(1, 2), (2, 4), (3, 6)])
: Этот декоратор говоритpytest
, что функцияtest_multiply_by_two
должна быть выполнена трижды с разными значениями параметровinput
иexpected
.def test_multiply_by_two(input, expected)
: Это сама тестовая функция. В данном случае, она принимает два параметра:input
иexpected
.
Таким образом, тест будет выполнен трижды с параметрами (1, 2)
, (2, 4)
и (3, 6)
. В каждом случае переменная input
принимает первое значение из кортежа, а переменная expected
- второе значение. Тест проверяет, что умножение значения input
на 2 действительно равно ожидаемому значению expected
.
Преимущества использования параметризованных тестов:
Компактность: Вы можете тестировать множество случаев с одной и той же логикой в одной тестовой функции, делая код более компактным.
Читаемость: Параметризованные тесты легко читаются и понимаются. Вы видите все входные значения и ожидаемые результаты в одном месте.
Легкость добавления новых случаев: При необходимости добавить новый тестовый случай, вам просто нужно добавить новую строку в параметризацию, что делает расширение тестов простым.
Легкость отладки: Если один из случаев не проходит,
pytest
выведет подробные сведения о том, какие именно параметры вызвали проблему, что значительно упрощает отладку.
В pytest
, параметризация тестов позволяет вам определить набор различных входных данных для одного и того же тестового случая. Это удобно, когда вы хотите протестировать функцию или метод с разными входами и ожидаемыми результатами. Вот более подробная информация о параметризации и ее возможностях:
Основы параметризации:
Простая параметризация:
В этом примере тест
test_multiply_by_two
будет выполнен трижды с разными значениямиinput
иexpected
.Использование множественных параметров:
Этот тест принимает три параметра (
a
,b
, иexpected
) и будет выполнен трижды с различными значениями.
Дополнительные возможности параметризации:
Использование динамических значений с помощью параметризации:
Можно определить набор значений вне декоратора
parametrize
и использовать его для параметризации теста.Использование маркеров в параметризации:
Маркеры, такие как
xfail
(ожидание неудачи), могут быть использованы в параметризации для обработки особых случаев.Параметризация с использованием функции:
Вы можете использовать функцию для предоставления данных для параметризации, что полезно, если данные должны быть вычислены динамически.
Расширенная параметризация:
Параметризация с помощью фикстур:
Вы можете использовать фикстуры для параметризации тестов. В этом примере, тест
test_square
будет выполнен трижды с параметрами 1, 2 и 3.Комбинированная параметризация:
Можно комбинировать несколько декораторов
parametrize
для создания всех возможных комбинаций параметров.
Важно отметить, что pytest
предоставляет широкие возможности для параметризации, и эти примеры представляют лишь некоторые из вариантов использования. Параметризация тестов делает код более читаемым, легким в поддержке и улучшает общую эффективность тестирования.
Last updated