Как отключить тест с помощью py.тест?
Скажем, у меня есть куча тестов:
def test_func_one():
...
def test_func_two():
...
def test_func_three():
...
Есть ли декоратор или что-то подобное, что я мог бы добавить к функциям, чтобы предотвратить от py.тест от выполнения только этого теста? Результат может выглядеть примерно так...
@pytest.disable()
def test_func_one():
...
def test_func_two():
...
def test_func_three():
...
Я искал что-то подобное в py.тестовые документы, но я думаю, что могу что-то упустить.
4 ответов:
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(): ...Первый пример всегда пропускает тест, второй пример позволяет условно пропустить тесты (отлично, когда тесты зависят от платформы, исполняемой версии или дополнительных библиотек.
Например, если я хочу проверить, есть ли у кого-то библиотека панды установлены для проверки.
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декоратор сделает свою работу:@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.отметка.xfail
@pytest.mark.xfail def test_function(): ...В этом случае Pytest все равно выполнит ваш тест и позволит вам сейчас, если он пройдет или сейчас, но не будет жаловаться и ломать сборку.
Comments