Jak nakazać py.test pominąć określone katalogi?

91

Próbowałem użyć norecursedirsopcji wewnątrz setup.cfg, aby powiedzieć py.test, aby nie zbierał testów z niektórych katalogów, ale wygląda na to, że je ignoruje.

[tool:pytest]
norecursedirs=lib/third

Kiedy biegam py.test, widzę, jak to robi testy od wewnątrz lib/third!

sorin
źródło
Wygląda na to, że mam py.testi pytestobaj mają testy biegowe i są różnymi bestiami. Dziwne, ale pytestto zawodzi, ponieważ nie ładuje wykluczeń z [pytest].
sorin
1
pytestpochodzi z logilab. Chcesz py.test.
ecatmur
3
też spróbujnosecuredirs=lib/third/*
intelis
czy istnieje sposób na zignorowanie niektórych folderów w samym skrypcie za pomocą kodu?
bicepjai
2
skończyło się tutaj, ponieważ byłem ciekaw, dlaczego do cholery moje pytania dotyczące aplikacji internetowych w rozwoju lokalnym są tak ekstremalnie wolne ... Powodem był jakiś załadowany katalog zasobów z zagnieżdżoną strukturą yy / dd / mm ... powodując, że to naprawdę jest do bani! Na szczęście [pytest] norecursedirs = resourcesw pytest.inirobi trick 💪!
andilabs

Odpowiedzi:

85

py.test --ignore=somedir pracował dla mnie

shadfc
źródło
5
I --ignoremożna określić wiele razy, aby ignorować wiele katalogów
phoenix
Jak pominąć niektóre testy zamiast katalogu
Rajat jain
Możesz skorzystać z tej -kopcji, jak pokazuje inna odpowiedź poniżej. Zobacz „Uruchamianie testów według wyrażeń słów kluczowych” na docs.pytest.org/en/latest/… . W tym przypadku pomocne mogą być również znaki. Oznacz swoje testy jako „wolne” itp., A następnie użyj-k "not slow"
shadfc
Możliwe jest również użycie--ignore-glob do ignorowania ścieżek plików testowych na podstawie symboli wieloznacznych w stylu powłoki Unix. Np. --ignore-glob=**/sandbox/*Zignoruje wszystkie pliki w dowolnym sandboxfolderze.
Jan M.
28

Jeśli masz kilka katalogów z różnymi rodzicami, możesz określić różne --ignoreparametry:

py.test --ignore=somedir --ignore=otherdir --ignore=etcdir

  • nowa opcja: --ignore uniemożliwi pobranie określonej ścieżki.
    Można określić wiele razy.
David Batista
źródło
23

I rozwiązać tajemnicę: Jeśli sekcja pytest znajduje się w jednej z możliwych plików konfiguracyjnych ( pytest.ini, tox.inii setup.cfg), pytest nie będzie szukał wszelkich innych więc należy zdefiniować py.test opcje w jednym pliku.

Sugerowałbym użycie setup.cfg.

sorin
źródło
8
Dlaczego setup.cfg? Obecna dokumentacja wydaje się rekomendować pozostałe dwa
jebob
Myślę, że ważne jest, aby wspomnieć, że jeśli chcesz użyć .inipliku, musisz go określić za pomocą pytest -c pytest.ini. z jakiegoś powodu setup.cfgzawartość została odebrana automatycznie.
therightstuff
17

Możesz użyć

py.test -k 'not third'

co wyklucza całą zawartość katalogu „trzeciego”.

Salvatore Avanzo
źródło
11

norecursedirspowinno działać. Sprawdź, czy masz plik pytest.ini lub inne pliki setup.cfg. Jak wzywasz py.test?

ecatmur
źródło
1
Mam setup.cfgw [pytest]środku właściwe i norecorsedirs, ale wydaje się, że jest ignorowany, a zamiast tego będzie szukał wszystkich plików.
sorin
8

W moim przypadku problemem był brakujący symbol wieloznaczny. U mnie działa:

[tool:pytest]
norecursedirs = subpath/*

podczas gdy po prostu norecursedirs = subpathnie.

bluenote10
źródło
To samo tutaj. Jednak bardzo dziwne zachowanie.
azmeuk
0

Aby użyć pytest.ini(co jest zalecane, chyba że używasz toxw tym przypadku tox.inima sens), zadzwoń pytestzpytest -c pytest.ini .

W celu zapobieżenia moje próbki not_me_1.pyi not_me_2.pyod badanego lub lintowane, moje pytest.inijest następujące:

[pytest]
addopts = --ignore-glob=not_me_*

[pycodestyle]
ignore = not_me_* ALL

therightstuff
źródło