Jak przetestować pojedynczy plik w pytest

88

Jak przetestować pojedynczy plik w pytest? Mogłem tylko znaleźć opcje ignorowania i brak opcji „testuj tylko ten plik” w dokumentach.

Najlepiej byłoby, gdyby działało to w wierszu poleceń zamiast setup.cfg, ponieważ chciałbym uruchomić różne testy plików w IDE. Cały pakiet trwa zbyt długo.

simonzack
źródło

Odpowiedzi:

94

po prostu uruchom pytestze ścieżką do pliku

coś jak

pytest tests/unit/some_test_file.py

Bryant
źródło
3
Ok, wygląda na to, że to właśnie robi Pycharm, ale nadal obsługuje cały pakiet. Uruchomienie py.test w wierszu poleceń powoduje z jakiegoś powodu błędy segfault. Przypuszczam, że to wykracza poza zakres pierwotnego pytania, więc przyjmuję twoją odpowiedź, jeśli uda mi się sprawić, że zadziała.
simonzack
3
Najwyraźniej addoptsw setup.cfg powoduje problemy, jeśli ścieżka jest tam dodana.
simonzack
1
@simonzack Myślę, że chcesz uruchomić pojedynczy przypadek testowy z wielu przypadków testowych obecnych w pliku. Spróbuj tego: py.test test_basic.py -k test_first tutaj test_first to przypadek testowy obecny w moim pliku test_basic.py.
Anurag Sinha
73

To jest całkiem proste:

$ pytest -v /path/to/test_file.py

-vFlaga jest zwiększenie szczegółowości. Jeśli chcesz uruchomić konkretny test w tym pliku:

$ pytest -v /path/to/test_file.py::test_name

Jeśli chcesz uruchomić test, które nazwy podążają za wzorcem, możesz użyć:

$ pytest -v -k "pattern_one or pattern_two" /path/to/test_file.py

Masz również możliwość oznaczania testów, więc możesz użyć -mflagi do uruchomienia podzbioru oznaczonych testów.

plik_testowy.py

def test_number_one():
    """Docstring"""
    assert 1 == 1


@pytest.mark.run_these_please
def test_number_two():
    """Docstring"""
    assert [1] == [1]

Aby przeprowadzić test oznaczony run_these_please:

$ pytest -v -m run_these_please /path/to/test_file.py
lmiguelvargasf
źródło
2
za path/to/test.py::test_method, dostałem błąd> BŁĄD: nie znaleziono: /home/namgivu/NN/code/myproject/tests/models/test_bill.py::test_generate_for_today_normal_cycle (no name '/ home / namgivu / NN / code / myproject / tests / models /test_bill.py::test_generate_for_today_normal_cycle 'w dowolnym z [<Module' tests / models / test_bill.py '>])
Nam G VU
1
A co z testami parametrycznymi z identyfikatorami? -k my_test[a test id here]nie działa, a najlepszym, jakim do tej pory udało mi się, -k "my_test and a and test and id and here"jest format mało przyjazny.
Paul D Smith
1
Przykłady podane w tym przykładzie (w szczególności jedna ścieżka mieszania i składnia wyboru węzła) należy dodać do dokumentacji pytest, ponieważ tak naprawdę nie jest to oczywiste, tak jak w przypadku IMO.
cjauvin
12

To zadziałało dla mnie:

python -m pytest -k some_test_file.py

Działa to również dla poszczególnych funkcji testowych:

python -m pytest -k test_about_something
JonDoe297
źródło
to pytest directory_to_tests/some_test_file.pynie działa dla mnie. Jestem na Windowsie Python 3.8.2 i pytest 6.0.1
minghua