Как отключить тест с помощью 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.тестовые документы, но я думаю, что могу что-то упустить.

609   4  

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

    Ничего не найдено.