2016-07-18 27 views
12

Say mam kilka testów:Jak wyłączyć test za pomocą py.test?

def test_func_one(): 
    ... 

def test_func_two(): 
    ... 

def test_func_three(): 
    ... 

Czy istnieje dekorator lub coś podobnego, że mogę dodać do funkcji, aby zapobiec py.test uruchamianie tylko ten test? Wynik może wyglądać jak ...

@pytest.disable() 
def test_func_one(): 
    ... 

def test_func_two(): 
    ... 

def test_func_three(): 
    ... 

Szukałem czegoś takiego w dokumentach py.test, ale myślę, że może mi tu brakować czegoś.

Odpowiedz

15

Pytest ma przejść i skipif dekoratorów, podobną do Python unittest modułu (który używa skip i skipIf), które można znaleźć w dokumentacji here .

Przykłady z linkiem 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 przeskakuje test, drugi przykład pozwala warunkowo pominąć testy (świetny, gdy testy zależą od platformy, wersja wykonywalnego, lub opcjonalnych bibliotek.

na przykład, jeśli chcę, aby sprawdzić, czy ktoś ma pandy biblioteki zainstalowane na test.

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(): 
    ... 
11

skip decorator by wykonać zadanie:

@pytest.mark.skip(reason="no way of currently testing this") 
def test_func_one(): 
    # ... 

(reason argument jest opcjonalny, ale to jest zawsze dobry pomysł, aby określić, dlaczego test jest pomijany).

Istnieje również skipif(), który umożliwia wyłączenie testu, jeśli spełniony jest określony warunek.


Te dekoratory można stosować do metod, funkcji lub klas.

Aby skip all tests in a module zdefiniować globalne pytestmark zmiennej:

# test_module.py 
pytestmark = pytest.mark.skipif(...) 
+0

Oboje jesteście niesamowici! Tak trudno wybrać właściwą odpowiedź. Wybrałbym obie w jednej chwili. – ericmjl

2

nie jestem pewien, czy to jest amortyzowana, ale można również użyć funkcji pytest.skip wewnątrz testu:

def test_valid_counting_number(): 
    number = random.randint(1,5) 
    if number == 5: 
     pytest.skip('Five is right out') 
    assert number <= 3 
0

Można też uruchomić test nawet jeśli podejrzewasz, że próba nie powiedzie się. Na taki scenariusz https://docs.pytest.org/en/latest/skipping.html sugeruje użycie dekorator @ pytest.mark.xfail

@pytest.mark.xfail 
def test_function(): 
    ... 

W tym przypadku Pytest będzie nadal uruchomić test i niech cię teraz, gdy przechodzi ona ani teraz, ale nie będą narzekać i przerwa kompilacja.

Powiązane problemy