Wie kann man py.test anweisen, bestimmte Verzeichnisse zu überspringen?

90

Ich habe versucht, die norecursedirsOption in setup.cfg zu verwenden, um py.test anzuweisen, keine Tests aus bestimmten Verzeichnissen zu sammeln, aber es scheint, dass dies ignoriert wird.

[tool:pytest]
norecursedirs=lib/third

Wenn ich renne, py.testsehe ich, wie es Tests von innen bekommt lib/third!

Sorin
quelle
Es scheint, dass ich py.testund pytestbeide Lauftests haben und verschiedene Bestien sind. Seltsam, aber pytestes schlägt fehl, weil die Ausschlüsse von nicht geladen werden [pytest].
Sorin
1
pytestist von logilab. Du willst py.test.
Ecatmur
3
versuchen Sie es auchnosecuredirs=lib/third/*
Intelis
Gibt es eine Möglichkeit, einige Ordner im Skript selbst mit Code zu ignorieren?
Bizepsjai
2
Ich bin hier gelandet, weil ich neugierig war, warum zum Teufel mein Pytest der Web-App in der lokalen Entwicklung so extrem langsam ist ... Der Grund war ein hochgeladenes Ressourcenverzeichnis mit verschachtelter JJ / TT / MM-Struktur ... was wirklich scheiße ist! zum Glück [pytest] norecursedirs = resourcesin pytest.initut einen Trick 💪!
andilabs

Antworten:

85

py.test --ignore=somedir arbeitete für mich

Shadfc
quelle
5
Und --ignorekann mehrfach angegeben werden, um mehrere Verzeichnisse zu ignorieren
Phoenix
Wie man bestimmte Tests anstelle des Verzeichnisses überspringt
Rajat Jain
Sie können die -kOption verwenden, wie eine andere Antwort unten zeigt. Siehe "Ausführen von Tests anhand von Schlüsselwortausdrücken" auf docs.pytest.org/en/latest/… . Auch hier können Markierungen hilfreich sein. -k "not slow"
Markieren Sie
Es ist auch möglich zu verwenden--ignore-glob Testdateipfade auf dem Unix-Shell Platzhalter Basis zu ignorieren. ZB --ignore-glob=**/sandbox/*werden alle Dateien in einem sandboxOrdner ignoriert .
Jan M.
27

Wenn Sie mehrere Verzeichnisse mit unterschiedlichen Eltern haben, können Sie verschiedene --ignoreParameter angeben :

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

  • Neue Option: --ignore verhindert, dass der angegebene Pfad erfasst wird.
    Kann mehrfach angegeben werden.
David Batista
quelle
23

Ich habe das Rätsel gelöst: Wenn ein pytest-Abschnitt in einer der möglichen Konfigurationsdateien ( pytest.ini, tox.iniund setup.cfg) gefunden wird, sucht pytest nicht nach anderen. Stellen Sie daher sicher, dass Sie die py.test-Optionen in einer einzelnen Datei definieren.

Ich würde vorschlagen, zu verwenden setup.cfg.

Sorin
quelle
8
Warum setup.cfg? Die aktuelle Dokumentation scheint die anderen beiden
Jebob
Ich denke, es ist wichtig zu erwähnen, dass, wenn Sie eine .iniDatei verwenden möchten, Sie sie mit angeben müssen pytest -c pytest.ini. Aus irgendeinem Grund wurden setup.cfgInhalte automatisch aufgenommen.
Vor
17

Sie können verwenden

py.test -k 'not third'

das schließt alle 'dritten' Verzeichnisinhalte aus.

Salvatore Avanzo
quelle
11

norecursedirssollte arbeiten. Überprüfen Sie, ob Sie eine pytest.ini oder andere setup.cfg-Dateien haben. Wie rufst du an py.test?

ecatmur
quelle
1
Ich habe zwar setup.cfgdie richtigen [pytest]und norecorsedirs drin, aber es scheint ignoriert zu werden, und stattdessen wird nach allen Dateien gesucht.
Sorin
7

In meinem Fall war das Problem der fehlende Platzhalter. Folgendes funktioniert für mich:

[tool:pytest]
norecursedirs = subpath/*

während einfach norecursedirs = subpathnicht.

bluenote10
quelle
Hier gilt das gleiche. Sehr seltsames Verhalten.
Azmeuk
0

Zur Nutzung pytest.ini(was empfohlen wird, es sei denn , Sie verwenden , toxin welchem Fall tox.iniwürde Sinn machen), Anruf pytestmit pytest -c pytest.ini.

Um meine Probe zu verhindern not_me_1.pyund not_me_2.pyvon zu prüfenden oder linted, meine pytest.iniist wie folgt:

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

[pycodestyle]
ignore = not_me_* ALL

das richtige Zeug
quelle