So testen Sie eine einzelne Datei unter pytest

81

Wie testest du eine einzelne Datei in pytest? Ich konnte nur Ignorieroptionen und keine Option "Nur diese Datei testen" in den Dokumenten finden.

Am besten funktioniert dies in der Kommandozeile anstatt setup.cfg, da ich in der ide verschiedene Dateitests ausführen möchte. Die gesamte Suite dauert zu lange.

Simonzack
quelle

Antworten:

88

Führen Sie einfach pytestden Pfad zur Datei aus

etwas wie

pytest tests/unit/some_test_file.py

Bryant
quelle
3
Ok, dies scheint das zu sein, was Pycharm tut, aber es läuft immer noch die gesamte Suite. Das Ausführen von py.test in der Befehlszeile führt aus irgendeinem Grund zu Segfaults. Ich nehme an, dies liegt außerhalb des Rahmens der ursprünglichen Frage, daher werde ich Ihre Antwort akzeptieren, wenn ich sie zum Laufen bringen kann.
Simonzack
3
Anscheinend gibt addoptsin setup.cfg Probleme, wenn der Pfad dort hinzugefügt wird.
Simonzack
1
@simonzack Ich denke, Sie möchten einen einzelnen Testfall aus mehreren in der Datei vorhandenen Testfällen ausführen. Versuchen Sie Folgendes: py.test test_basic.py -k test_first hier test_first ist ein Testfall, der in meiner Datei test_basic.py vorhanden ist.
Anurag Sinha
67

Das ist ziemlich einfach:

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

Die -vFlagge soll die Ausführlichkeit erhöhen. Wenn Sie einen bestimmten Test in dieser Datei ausführen möchten:

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

Wenn Sie testen möchten, welche Namen einem Muster folgen, können Sie Folgendes verwenden:

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

Sie haben auch die Möglichkeit, Tests zu markieren, sodass Sie mit dem -mFlag eine Teilmenge der markierten Tests ausführen können.

test_file.py

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


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

So führen Sie den Test aus run_these_please:

$ pytest -v -m run_these_please /path/to/test_file.py
lmiguelvargasf
quelle
2
für path/to/test.py::test_method, ich habe Fehler> Fehler: nicht gefunden: /home/namgivu/NN/code/myproject/tests/models/test_bill.py::test_generate_for_today_normal_cycle (kein Name ‚/ home / namgivu / NN / code / myproject / Tests / models /test_bill.py::test_generate_for_today_normal_cycle 'in einem der [<Module' tests / models / test_bill.py '>])
Nam G VU
1
Was ist mit parametrisierten Tests mit IDs? -k my_test[a test id here]funktioniert nicht und das Beste, was ich bisher geschafft habe, ist, -k "my_test and a and test and id and here"dass es kaum ein freundliches Format ist.
Paul D Smith
1
Die in diesem Beispiel angegebenen Beispiele (insbesondere der eine Mischpfad und die Knotenauswahlsyntax) sollten der Pytest-Dokumentation hinzugefügt werden, da dies ebenso wie IMO nicht offensichtlich ist.
Cjauvin
11

Das hat bei mir funktioniert:

python -m pytest -k some_test_file.py

Dies funktioniert auch für einzelne Testfunktionen:

python -m pytest -k test_about_something
JonDoe297
quelle
dies pytest directory_to_tests/some_test_file.pynicht für mich arbeiten. Ich bin auf Windows Python 3.8.2 und Pytest 6.0.1
Minghua