Pytest ma dekoratory skip i skipif, podobne do modułu Python unittest (używającego skip
i skipIf
), które można znaleźć w dokumentacji tutaj .
Przykłady z linku można znaleźć tutaj:
@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():
...
Pierwszy przykład zawsze pomija test, drugi pozwala warunkowo pomijać testy (świetne, gdy testy zależą od platformy, wersji wykonywalnej lub opcjonalnych bibliotek.
Na przykład, jeśli chcę sprawdzić, czy ktoś ma zainstalowane pandy biblioteczne do testu.
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
którą ma Mocha (Node.js)?it('tests something'...)
->it.skip('tests something'...)
co spowodowałoby wyłączenie tego konkretnego testu. Ma również przydatne przeciwieństwo:.only
który uruchomi tylko ten test i nic więcej.only
możesz to zrobić za pomocą wiersza poleceń lub czegokolwiek, czego używasz do inicjalizacji programu uruchamiającego test: stackoverflow.com/a/36539692/4131059 Jeśli chodzi oit
iit.skip
, uważam, że funkcjonalność tutaj w pełni to obejmuje.skip
Dekorator będzie wykonać zadanie:@pytest.mark.skip(reason="no way of currently testing this") def test_func_one(): # ...
(
reason
argument jest opcjonalny, ale zawsze dobrze jest określić, dlaczego test jest pomijany).Istnieje również
skipif()
możliwość wyłączenia testu, jeśli zostanie spełniony określony warunek.Te dekoratory można zastosować do metod, funkcji lub klas.
Aby pominąć wszystkie testy w module , zdefiniuj
pytestmark
zmienną globalną :# test_module.py pytestmark = pytest.mark.skipif(...)
źródło
Nie jestem pewien, czy jest przestarzały, ale możesz też użyć tej
pytest.skip
funkcji w teście:def test_valid_counting_number(): number = random.randint(1,5) if number == 5: pytest.skip('Five is right out') assert number <= 3
źródło
Możesz także chcieć uruchomić test, nawet jeśli podejrzewasz, że się nie powiedzie. W takim scenariuszu https://docs.pytest.org/en/latest/skipping.html sugeruje użycie dekoratora @ pytest.mark.xfail
@pytest.mark.xfail def test_function(): ...
W takim przypadku Pytest nadal przeprowadzi Twój test i poinformuje Cię, czy zakończy się powodzeniem, czy nie, ale nie będzie narzekał i nie zepsuje kompilacji.
źródło
Jeśli chcesz pominąć test, ale nie zakodować na stałe znacznika, lepiej użyj wyrażenia kluczowego, aby go ominąć.
pytest test/test_script.py -k 'not test_func_one'
źródło
Możesz oznaczyć test przy użyciu dekoratorów
skip
i,skipif
jeśli chcesz pominąć testpytest
.Pomijanie testu
@pytest.mark.skip(reason="no way of currently testing this") def test_func_one(): ...
Najprostszym sposobem pominięcia testu jest oznaczenie go
skip
dekoratorem, który może zostać zaliczony opcjonalniereason
.Możliwe jest również bezwzględne pominięcie podczas wykonywania testu lub konfiguracji przez wywołanie
pytest.skip(reason)
funkcji. Jest to przydatne, gdy nie można ocenić warunku pominięcia w czasie importu.def test_func_one(): if not valid_config(): pytest.skip("unsupported configuration")
Pomijanie testu na podstawie warunku
@pytest.mark.skipif(sys.version_info < (3, 6), reason="requires python3.6 or higher") def test_func_one(): ...
Jeśli chcesz pominąć na podstawie warunku, możesz użyć
skipif
zamiast tego. W poprzednim przykładzie funkcja test jest pomijana, gdy jest uruchamiana na interpreterze wcześniejszym niż Python3.6.Wreszcie, jeśli chcesz pominąć test, ponieważ masz pewność, że się nie powiedzie, możesz również rozważyć użycie
xfail
znacznika do wskazania, że spodziewasz się, że test się nie powiedzie.źródło