Pytest имеет декораторы skip и skipif, аналогичные модулю Python unittest (который использует skip
и skipIf
), который можно найти в документации здесь .
Примеры из ссылки можно найти здесь:
@pytest.mark.skip(reason="no way of currently testing this")
def test_the_unknown():
...
import sys
@pytest.mark.skipif(sys.version_info < (3,3),
reason="requires python3.3")
def test_function():
...
Первый пример всегда пропускает тест, второй пример позволяет вам условно пропускать тесты (отлично, когда тесты зависят от платформы, исполняемой версии или дополнительных библиотек.
Например, если я хочу проверить, установлена ли у кого-то библиотека pandas для тестирования.
import sys
try:
import pandas as pd
except ImportError:
pass
@pytest.mark.skipif('pandas' not in sys.modules,
reason="requires the Pandas library")
def test_pandas_function():
...
.skip
что есть в Mocha (Node.js)?it('tests something'...)
->it.skip('tests something'...)
который отключил бы этот конкретный тест. У него также есть удобная противоположность:.only
он запускает только этот тест и ничего больше.only
стороны вы можете сделать это через командную строку или что-то еще, что вы используете для инициализации средства запуска тестов: stackoverflow.com/a/36539692/4131059 Что касаетсяit
иit.skip
, я считаю, что функциональность здесь полностью покрывает это.skip
Декоратор будет делать эту работу:@pytest.mark.skip(reason="no way of currently testing this") def test_func_one(): # ...
(
reason
аргумент не является обязательным, но всегда полезно указать, почему тест пропускается).Также есть
skipif()
возможность отключить тест, если выполняется какое-то конкретное условие.Эти декораторы можно применять к методам, функциям или классам.
Чтобы пропустить все тесты в модуле , определите глобальную
pytestmark
переменную:# test_module.py pytestmark = pytest.mark.skipif(...)
источник
Я не уверен, устарел ли он, но вы также можете использовать эту
pytest.skip
функцию внутри теста:def test_valid_counting_number(): number = random.randint(1,5) if number == 5: pytest.skip('Five is right out') assert number <= 3
источник
Вы также можете запустить тест, даже если подозреваете, что тест завершится неудачно. Для такого сценария https://docs.pytest.org/en/latest/skipping.html предлагает использовать декоратор @ pytest.mark.xfail.
@pytest.mark.xfail def test_function(): ...
В этом случае Pytest все равно будет запускать ваш тест и сообщать вам, прошел он или нет, но не будет жаловаться и нарушать сборку.
источник
Если вы хотите пропустить тест, но не жестко запрограммировать маркер, лучше используйте выражение ключевого слова, чтобы избежать его.
pytest test/test_script.py -k 'not test_func_one'
источник
Вы можете отметить тест с
skip
иskipif
декораторами , когда вы хотите , чтобы пропустить тест вpytest
.Пропуск теста
@pytest.mark.skip(reason="no way of currently testing this") def test_func_one(): ...
Самый простой способ пропустить тест - это пометить его
skip
декоратором, который можно передать как необязательныйreason
.Также можно принудительно пропустить во время выполнения или настройки теста, вызвав
pytest.skip(reason)
функцию. Это полезно, когда невозможно оценить условие пропуска во время импорта.def test_func_one(): if not valid_config(): pytest.skip("unsupported configuration")
Пропуск теста по условию
@pytest.mark.skipif(sys.version_info < (3, 6), reason="requires python3.6 or higher") def test_func_one(): ...
Если вы хотите пропустить на основе условного выражения, вы можете использовать
skipif
вместо этого. В предыдущем примере тестовая функция пропускается при запуске в интерпретаторе более ранней версии, чем Python3.6.Наконец, если вы хотите пропустить тест, потому что уверены, что он не работает, вы также можете рассмотреть возможность использования
xfail
маркера, чтобы указать, что вы ожидаете, что тест завершится неудачно.источник