Wie konfiguriere ich PyCharm für die Ausführung von py.test-Tests?

161

Ich möchte mit dem Schreiben von Komponententests für meinen Python-Code beginnen, und das py.test- Framework klingt nach einer besseren Wahl als Pythons gebündeltes Unittest . Also habe ich meinem Projekt ein "tests" -Verzeichnis hinzugefügt und test_sample.py hinzugefügt . Jetzt möchte ich PyCharm so konfigurieren, dass alle Tests in meinem Verzeichnis "tests" ausgeführt werden.

PyCharm unterstützt angeblich py.test in seinem Testläufer. Sie sollten in der Lage sein , eine Run / Debug-Konfiguration zu erstellen , um Ihre Tests auszuführen, und PyCharm hat angeblich ein Dialogfeld "Konfiguration erstellen" speziell für py.test . Aber das ist der vollständige Umfang ihrer Dokumentation zu diesem Thema, und ich kann dieses angebliche Dialogfeld nirgendwo finden.

Wenn ich das Verzeichnis , in dem Projekt - Tool - Fenster der rechten Maustaste, ich bin angeblich eine „Create <name>“ , um zu sehen Menüpunkt, aber das einzige Menüpunkt beginnend mit „Create“ ist „Create Run Configuration“. Okay, vielleicht ist die Dokumentation einfach falsch und "Create Run Configuration" klingt vielversprechend. Leider sind die einzigen zwei Elemente in seinem Untermenü "Unittests in C: \ mypath ..." und "Doctests in C: \ mypath ...", von denen keines zutrifft - ich verwende weder unittest noch doctest. Es gibt keinen Menüpunkt für py.test.

Wenn ich meine Datei test_sample.py öffne und mit der rechten Maustaste in das Editorfenster klicke, erhalte ich die versprochenen Menüelemente "<Name> erstellen": Es gibt "Unittests in test_sa erstellen ..." ... gefolgt von "Ausführen" 'Unittests in test_sa ...' "und" Debug 'Unittests in test_sa ...' ". Also noch einmal, es ist alles spezifisch für das unittest Framework; nichts für py.test.

Wenn ich die Menüelemente "unittest" versuche, wird ein Dialogfeld mit Optionen für "Name", "Typ", ein Gruppenfeld "Tests" mit "Ordner" und "Muster" sowie "Skript" und "Klasse" angezeigt "und" Funktion "usw. Dies klingt genau so, wie es als Dialog zum Hinzufügen einer Konfiguration für Python Unit Test dokumentiert ist , und nicht wie die Optionen" Name "und" Test to run "und" Keywords ", die angezeigt werden sollen in der Konfiguration für py.test Dialog. Im Dialogfeld gibt es nichts zu ändern, welches Testframework ich hinzufüge.

Ich verwende PyCharm 1.5.2 unter Windows mit Python 3.1.3 und pytest 2.0.3. Ich kann py.testmeine Tests erfolgreich über die Befehlszeile ausführen , daher ist es nicht so einfach, dass pytest nicht ordnungsgemäß installiert wird.

Wie konfiguriere ich PyCharm für die Ausführung meiner py.test-Tests?

Joe White
quelle

Antworten:

227

Bitte gehen Sie zu Datei | Einstellungen | Werkzeuge | Python Integrated Tools und ändern Sie den Standard-Testläufer in py.test. Dann erhalten Sie die Option py.test, um Tests anstelle der unittesten zu erstellen.

yole
quelle
Hah! Ich weiß nicht, wie ich das verpasst habe. Es funktioniert jedoch nur zur Hälfte: Wenn ich mit der rechten Maustaste auf den Ordner im Projektwerkzeugfenster klicke, kann ich Doctests erstellen, nicht py.tests. (Ich schreibe einen Fehlerbericht.) Aber es funktioniert, wenn ich mit der rechten Maustaste in den Editor klicke und dann "Script:" in den Verzeichnisnamen ändere.
Joe White
3
Denken Sie
Inti
1
Gibt es eine Möglichkeit, dies für das gesamte Projekt (oder alle Projekte) anstatt für jedes Modul festzulegen?
OrangeDog
1
Es scheint, dass File | Settings | Tools | Python Integrated Toolsnur in den Projekteinstellungen und nicht in den Standardeinstellungen in PyCharm 5
verfügbar ist
2
Wie führen Sie die Tests nach der Konfiguration aus?
Chris Anderson
51

PyCharm 2017.3

  1. Preference -> Tools -> Python integrated Tools- Wählen Sie py.testals Default test runner.
  2. Wenn Sie Django Preference -> Languages&Frameworks -> Django- Set verwenden, aktivieren Sie das KontrollkästchenDo not use Django Test runner
  3. Löschen Sie alle zuvor vorhandenen Testkonfigurationen aus Run/Debug configuration, andernfalls werden Tests mit diesen älteren Konfigurationen ausgeführt.
  4. Um einige zusätzliche Standardargumente festzulegen, aktualisieren Sie die Standardkonfiguration von py.test. Run/Debug Configuration -> Defaults -> Python tests -> py.test -> Additional Arguments
Sergey Kubrak
quelle
2
In PyCharm 2017.03.02, auch nachdem ich py.test als Standard festgelegt, wenn ich einen Rechtsklick auf dem Projekt im Projektpanel und wählen Sie New => Python File, um die Kind:Drop - Down - Angebote nur: Python - Datei, Unit - Test, Python Stummel, nicht Pytest. Ich habe an allen Stellen gesucht, die in den obigen Threads erwähnt wurden. Was vermisse ich?
Tom Baker
Python-Datei, Unit-Test, Python-Stub - es handelt sich um Python-Dateien mit einigen vordefinierten Daten. Sie können Ihre eigenen hinzufügen. Lesen Sie dieses Thema jetbrains.com/help/pycharm/… . Dies hat jedoch keine Auswirkungen auf die Ausführung des py.test-Tests. Sie können nur eine Python-Datei erstellen und es wird funktionieren. In diesem Thema wird erläutert , wie Sie diese Funktion jetbrains.com/help/pycharm/running-tests.html für die Ausführung von py.test konfigurieren.
Sergey Kubrak
In der neuesten PyCharm heißt "Defaults" "Templates"
AgDude
19

Ich denke, Sie müssen das Element Run / Debug Configuration in der Symbolleiste verwenden. Klicken Sie darauf und klicken Sie auf "Konfigurationen bearbeiten" (oder verwenden Sie alternativ den Menüpunkt "Ausführen-> Konfigurationen bearbeiten"). Im Abschnitt "Standardeinstellungen" im linken Bereich befindet sich ein Element "py.test", von dem ich denke, dass es das ist, was Sie wollen.

Ich fand auch, dass das Handbuch dafür nicht mit der Benutzeroberfläche übereinstimmte. Hoffe ich habe das Problem richtig verstanden und das hilft.

Scott Griffiths
quelle
4
Auf der Seite "Standardeinstellungen> py.test" konnte ich keine Konfiguration erstellen. Wenn ich jedoch zum Dialogfeld "Konfigurationen bearbeiten" ging, auf die Symbolleistenschaltfläche "+" klickte, "py.test" auswählte und "Arbeitsverzeichnis" auf das Verzeichnis mit meinen Tests setzte, wurde eine Konfiguration erstellt, mit der meine Tests ausgeführt wurden. Also +1 für den Hinweis auf einen hilfreichen Teil des Programms. Ich werde @yole jedoch die akzeptierte Antwort geben, da ich denke, dass das Ändern der Standardeinstellung in py.test eine bessere Lösung ist - ich sollte nur die aktuelle Datei ausführen können, und solche Dinge.
Joe White
@ JoeWhite Bitte fügen Sie es als Antwort hinzu, da es hilfreich war
Hariom Singh
Auf der Konfiguration bearbeiten Fenster, nach meiner pytest Konfiguration wählen, hatte ich auch zu wählen , Targetum Script athes an die Wurzel meines Tests und zeigen Ordner
RAbraham
Dies ist ein viel besserer Weg, da es auch andere Funktionen wie das Übergeben von Befehlszeilenargumenten usw. eröffnet
chirag nayak
13

So habe ich es mit Pytest 3.7.2(über Pip installiert) und Pycharms gemacht 2017.3:

  1. Gehe zu edit configurations

  1. Fügen Sie eine neue Ausführungskonfiguration hinzu und wählen Sie py.test

  1. In den Ausführungskonfigurationsdetails müssen Sie target= pythonund das unbenannte Feld unten auf setzen tests. Es sieht so aus, als wäre dies der Name Ihres Testordners. Ich bin mir nicht sicher, ob es hart ist. Ich empfehle auch das -sArgument, damit sich die Konsole beim Debuggen Ihrer Tests ordnungsgemäß verhält. Ohne das Argument erfasst pytest die Ausgabe und macht die Debug-Konsole fehlerhaft.

  1. Mein Testordner sieht so aus. Dies ist direkt unter der Wurzel meines Projekts ( my_project/tests).

  1. Meine foobar_test.pyDatei: (keine Importe erforderlich):
def test_foobar ():
    drucken ("hallo pytest")
    behaupten, wahr
  1. Führen Sie es mit dem normalen Befehl run aus

Benjamin Crouzier
quelle
Gibt es eine Möglichkeit, nur Tests aus der aktuellen Datei auszuführen? Ich habe nur herausgefunden, dass ich den Dateinamen in den Konfigurationseinstellungen jedes Mal ändern muss, wenn ich eine andere Datei
öffne
@algot Ich weiß das nicht auf meinem Kopf. Schauen Sie sich das an: jetbrains.com/help/pycharm/performing-tests.html und das: jetbrains.com/pycharm/guide/tips/run-single-test
Benjamin Crouzier
5

Es ist sicher schlecht dokumentiert. Sobald Sie eine neue Konfiguration aus den Standardeinstellungen hinzugefügt haben, können Sie das Skript "/ Applications / PyCharm CE.app/Contents/helpers/pycharm/pytestrunner.py" ausführen. Es ist nicht dokumentiert und hat seine eigenen Vorstellungen von Befehlszeilenargumenten.

Sie können:

  1. Versuchen Sie herumzuspielen, das Skript umzukehren und zu sehen, ob Sie py.test irgendwie dazu bringen können, Argumente zu akzeptieren. Es könnte klappen; es war nicht in der ersten halben Stunde für mich.
  2. Führen Sie einfach "py.test * .py" von einer Konsole aus.

Seltsamerweise fällt es Ihnen schwer, eine Diskussion zu finden, da JetBrains Google-Algorithmen mit eigenen Seiten gut bombardiert.

Charles Merriam
quelle
3

Finden Sie diesen Thread, wenn ich dieselbe Frage habe und die Lösung gefunden habe. pycharm version: 2017.1.2 Gehen Sie zu "Einstellungen" -> "Tools" -> "Python Integrated Tools" und legen Sie den Standard-Testläufer im rechten Seitenbereich als py.test fest löse mein Problem

jacobcan118
quelle
Es wird funktionieren, aber dann müssen Sie mit der rechten Maustaste auf den Namen der Testskriptdatei im Projektfenster klicken. Wenn Sie stattdessen mit der rechten Maustaste auf den Datei-Editor-Bereich desselben Testskripts klicken, wird leider immer noch das alte Standardwerkzeug (Unittests) angezeigt. Dies ist ärgerlich, da ich die einzelne Funktion, die ich testen möchte, nicht angeben kann.
Hongyu Zhang
3

In pycharm 2019.2 können Sie dies einfach tun, um alle Tests auszuführen:

  1. Ausführen> Konfigurationen bearbeiten> Pytest hinzufügen
  2. Stellen Sie die Optionen wie im folgenden Screenshot gezeigt ein Screenshot der Konfiguration
  3. Klicken Sie auf Debug (oder führen Sie pytest mit den Tastenkombinationen Umschalt + Alt + F9 aus).

Eine bessere Integration von pytest in pycharm finden Sie unter https://www.jetbrains.com/help/pycharm/pytest.html

gebbissimo
quelle
2

Ich benutze 2018.2

Ich führe aus -> Konfigurationen bearbeiten ... Klicken Sie dann oben links im modalen Dialogfeld auf das +. Wählen Sie "Python-Tests" -> py.test Dann gebe ich ihm einen Namen wie "Alle Tests mit py.test"

Ich wähle Ziel: Modulname und gebe das Modul ein, in dem sich meine Tests befinden (das sind 'Tests' für mich), oder das Modul, in dem sich mein gesamter Code befindet, wenn meine Tests mit meinem Code gemischt sind. Das hat mich gestolpert.

Ich habe den Python-Interpreter eingestellt.

Ich habe das Arbeitsverzeichnis auf das Projektverzeichnis gesetzt.

Brian C.
quelle
0

Mit einem speziellen Conda-Python-Setup, das die Pip-Installation für py.test sowie die Verwendung des Specs-Add-Ins (Option --spec) (für Rspec wie eine nette Testzusammenfassungssprache) beinhaltete, musste ich dies tun.

1.Bearbeiten Sie den Standard-py.test so, dass er die Option = --spec enthält. Verwenden Sie dazu das Plugin: https://github.com/pchomik/pytest-spec

2.Erstellen Sie mit py.test eine neue Testkonfiguration. Ändern Sie den Python-Interpreter so, dass Sie ~ / anaconda / envs / Ihre Auswahl an Interpreten verwenden, z. B. py27 für meine Namen.

3. Löschen Sie die Testkonfiguration 'unittests'.

4. Jetzt ist die Standard-Testkonfiguration py.test mit meinen schönen Rspec-Ausgaben. Ich liebe es! Vielen Dank an alle!

Das Dokument von ps Jetbrains zum Ausführen / Debuggen von Konfigurationen finden Sie hier: https://www.jetbrains.com/help/pycharm/2016.1/run-debug-configuration-py-test.html?search=py.test

AnneTheAgile
quelle
0

Mit 2018.3 scheint es automatisch zu erkennen, dass ich pytest verwende, was nett ist, aber es erlaubt immer noch nicht, von der obersten Ebene des Projekts aus zu laufen. Ich musste pytestfür jeden rennentests Verzeichnis einzeln .

Ich stellte jedoch fest, dass ich eine der Konfigurationen auswählen und manuell bearbeiten konnte, um sie im Stammverzeichnis des Projekts auszuführen, und dass dies funktionierte. Ich muss es manuell in der Dropdown-Liste Konfigurationen auswählen - kann nicht mit der rechten Maustaste auf den Stammordner im Projektfenster klicken. Aber zumindest kann ich alle Tests gleichzeitig ausführen.

sfjac
quelle
0

Aktivieren Sie Pytest für Ihr Projekt

  1. Öffnen Sie die Einstellungen / Einstellungen | Werkzeuge | Einstellungsdialog für Python Integrated Tools , wie unter Auswählen Ihres Testframeworks beschrieben.
  2. Im Standard - Test - Runner - Feld wählen pytest .
  3. Klicken Sie auf OK, um die Einstellungen zu speichern.

Geben Sie hier die Bildbeschreibung ein

Milo Chen
quelle