Пропуск тестов

Пропускаем тесты в pytest с помощью skip() и skipif()

В процессе разработки и тестирования программы иногда возникает необходимость временного пропуска определенных тестов. Это может быть связано с тем, что функционал еще не реализован, есть известные проблемы или тесты могут быть не актуальными для определенной платформы или конфигурации. pytest предоставляет удобные механизмы для этого.

skip()

Метод skip() позволяет явно пропустить тест.

Пример:

import pytest

def test_function():
    pytest.skip("причина пропуска теста")

Когда этот тест будет выполняться, он будет пропущен, и pytest покажет причину пропуска.

skipif()

skipif() — это более гибкий способ пропуска тестов на основе определенного условия.

Пример:

import pytest
import sys

@pytest.mark.skipif(sys.version_info < (3,7), reason="Требуется Python 3.7 и выше")
def test_function():
    ...

В этом примере тест будет пропущен, если версия Python меньше 3.7.

Еще один распространенный сценарий — пропуск тестов на определенной платформе:

@pytest.mark.skipif(sys.platform == 'win32', reason="Не работает на Windows")
def test_function():
    ...

Давайте рассмотрим еще несколько возможностей и дополнений к механизмам пропуска тестов в pytest.

xfail

xfail означает "expected to fail". Используйте эту маркировку, когда вы знаете, что тест должен упасть, и это будет считаться нормальным. Таким образом, если тест упадет, он не будет отмечен как неудачный.

import pytest

@pytest.mark.xfail
def test_function():
    assert 1 == 2
Вы также можете указать причину:
@pytest.mark.xfail(reason="Известный баг, ожидается исправление в следующем релизе")
def test_function():
    ...

xfail с условиями

Как и с skipif, вы можете использовать условия для xfail.

@pytest.mark.xfail(sys.platform == 'linux', reason="Баг в Linux версии")
def test_function():
    ...

strict в xfail

Параметр strict в xfail позволяет контролировать, как pytest будет реагировать, если тест, помеченный как xfail, неожиданно пройдет успешно.

@pytest.mark.xfail(strict=True)
def test_function():
    ...

Если этот тест пройдет успешно, pytest будет считать его неудачным из-за параметра strict=True.

Заключение

В дополнение к базовым механизмам пропуска тестов, pytest предоставляет множество дополнительных инструментов и настроек для гибкого управления тестами. Это позволяет разработчикам легко адаптировать тестирование к различным условиям и потребностям, при этом сохраняя строгость и качество тестового покрытия.

Содержание: