Подтвердить что ты не робот

Pytest: Отменить тесты

С помощью pytest можно отметить тесты с помощью декоратора

@pytest.mark.slow
def some_slow_test():
    pass

Затем из командной строки можно сказать, что pytest пропускает тесты с отметкой "медленный"

pytest -k-slow

Если у меня есть дополнительный тег:

@pytest.mark.long
def some_long_test()
    pass

Я бы хотел пропустить как длинные, так и медленные тесты. Я пробовал это:

pytest -k-slow -k-long

и это:

pytest -k-slow,long

И ни один из них не работает.

В командной строке, как я могу сказать pytest пропустить как медленные И длинные тесты?

4b9b3361

Ответ 1

Кроме того, с недавним добавлением опции командной строки "-m" вы должны иметь возможность писать:

py.test -m "not (slow or long)"

IOW, параметр "-m" принимает выражение, которое может использовать маркеры в виде логических значений (если маркер не существует в тестовой функции, значение False, если оно существует, оно равно True).

Ответ 2

Просмотр кода pytest (mark.py) и дальнейшие эксперименты показывают, что, похоже, работает:

pytest -k "-slow -long"

(Использование опции --collect-only ускоряет эксперименты)

Ответ 3

Также можно уложить декодеры меток.

@pytest.mark.slow
@pytest.mark.main
def test_myfunction():
    pass

Затем я назвал py.test -m "slow and main", и были вызваны только тесты с обоими декораторами.

py.test -m "not (slow and main)" привели к тому, что другие тесты выполнялись