Gibt es eine Möglichkeit, pytest
Tests auszuwählen , die aus einer Datei ausgeführt werden sollen? Beispiel: Eine Datei foo.txt
mit einer Liste der auszuführenden Tests:
tests_directory/foo.py::test_001
tests_directory/bar.py::test_some_other_test
Oder gibt es eine Möglichkeit, mehrere Tests ohne gemeinsames Muster im Testnamen aus verschiedenen Verzeichnissen mit pytest auszuwählen?
pytest -k <pattern>
ermöglicht ein einzelnes Muster.
Eine Möglichkeit besteht darin, einen pytest.mark
Test gegen jeden Test durchzuführen, aber meine Anforderung besteht darin, verschiedene Testkombinationen aus verschiedenen Dateien auszuführen.
Gibt es eine Möglichkeit, mehrere Muster und einen Testdateinamen für jedes Muster anzugeben?
Oder
Gibt es eine Möglichkeit, die genauen Testpfade in einer Datei anzugeben und diese Datei als Eingabe zu füttern pytest
?
Oder
Gibt es eine Hook-Funktion, die für diesen Zweck verwendet werden kann?
py.test path/to/test/file.py -k function_name_test
Tests festlegen / Tests auswählen
Pytest unterstützt verschiedene Möglichkeiten zum Ausführen und Auswählen von Tests über die Befehlszeile.
Führen Sie Tests in einem Modul aus
pytest test_mod.py
Führen Sie Tests in einem Verzeichnis aus
pytest testing/
Führen Sie Tests mit Schlüsselwortausdrücken aus
pytest -k "MyClass and not method"
Dadurch werden Tests ausgeführt, die Namen enthalten, die mit dem angegebenen Zeichenfolgenausdruck übereinstimmen. Dazu können Python-Operatoren gehören, die Dateinamen, Klassennamen und Funktionsnamen als Variablen verwenden. Das obige Beispiel wird ausgeführt,
TestMyClass.test_something
aber nichtTestMyClass.test_method_simple
.Führen Sie Tests nach Knoten-IDs aus
Jedem gesammelten Test wird eine eindeutige Zuordnung zugewiesen,
nodeid
die aus dem Moduldateinamen gefolgt von Bezeichnern wie Klassennamen, Funktionsnamen und Parametern aus der Parametrisierung besteht, die durch::
Zeichen getrennt sind .So führen Sie einen bestimmten Test innerhalb eines Moduls aus:
pytest test_mod.py::test_func
Ein weiteres Beispiel für die Angabe einer Testmethode in der Befehlszeile:
pytest test_mod.py::TestClass::test_method
Führen Sie Tests mit Markerausdrücken aus
pytest -m slow
Führt alle Tests durch, die mit dem
@pytest.mark.slow
Dekorateur dekoriert sind .Weitere Informationen finden Sie unter Markierungen .
Führen Sie Tests aus Paketen aus
pytest --pyargs pkg.testing
Dadurch wird der
pkg.testing
Speicherort des Dateisystems importiert und verwendet, um Tests zu suchen und auszuführen.Quelle: https://docs.pytest.org/en/latest/usage.html#specifying-tests-selecting-tests
quelle
Wenn Sie denselben Methodennamen in zwei verschiedenen Klassen haben und nur eine davon ausführen möchten, funktioniert dies:
quelle
Methode 1 : Zufällig ausgewählte Tests. Lang und hässlich.
Methode 2: Verwenden Sie Schlüsselwortausdrücke.
Hinweis: Ich suche nach Testfallnamen. Gleiches gilt für TestClass-Namen.
Fall 1: Das Folgende wird ausgeführt, je nachdem, was gefunden wird. Da haben wir 'OR' verwendet.
Nehmen wir an, die beiden oben genannten sind tatsächlich korrekt. Es werden 2 Tests ausgeführt.
Fall 2: Jetzt ein falscher Name und ein anderer korrekter Name.
Es wird nur einer gefunden und ausgeführt.
Fall 3 : Wenn alle Tests ausgeführt werden sollen oder niemand, verwenden Sie AND
Beide werden ausgeführt, wenn sie korrekt sind oder keine.
Fall 4: Führen Sie den Test nur in einem Ordner aus:
Fall 5: Führen Sie den Test nur aus einer Datei aus.
Fall 6: Führen Sie alle Tests außer dem Match aus.
quelle
Laut dem Dokument über Tests nach Knoten-IDs ausführen
Da Sie alle Knoten-IDs in foo.txt haben, führen Sie sie einfach aus
Dies gilt auch für den folgenden Befehl (mit dem Dateiinhalt in der Frage).
quelle
Meine Antwort bietet eine Möglichkeit, eine Teilmenge von Tests in verschiedenen Szenarien auszuführen.
Führen Sie alle Tests in einem Projekt aus
Führen Sie Tests in einem einzelnen Verzeichnis aus
Verwenden Sie das Verzeichnis als Parameter, um alle Tests in einem Verzeichnis auszuführen
pytest
:Führen Sie Tests in einer einzelnen Testdatei / einem Modul aus
Um eine Datei voller Tests auszuführen, listen Sie die Datei mit dem relativen Pfad als Parameter auf
pytest
:Führen Sie eine einzelne Testfunktion aus
Um eine einzelne Testfunktion auszuführen, fügen Sie
::
den Namen der Testfunktion hinzu:-v
wird verwendet, damit Sie sehen können, welche Funktion ausgeführt wurde.Führen Sie eine einzelne Testklasse aus
Um nur eine Klasse auszuführen, gehen Sie wie bei Funktionen vor und fügen Sie
::
dann den Klassennamen zum Dateiparameter hinzu:Führen Sie eine einzelne Testmethode einer Testklasse aus
Wenn Sie nicht alle Testklassen ausführen möchten, sondern nur eine Methode, fügen Sie einfach eine andere
::
und den Methodennamen hinzu:Führen Sie eine Reihe von Tests basierend auf dem Testnamen aus
Mit dieser
-k
Option können Sie einen Ausdruck übergeben, um Tests auszuführen, bei denen bestimmte Namen durch den Ausdruck als Teilzeichenfolge des Testnamens angegeben werden. Es ist möglich , zu verwenden und , oder , und nicht komplexen Ausdrücke zu erstellen.So führen Sie beispielsweise alle Funktionen aus, deren Name _raises enthält:
quelle
Vielleicht können Sie mit
pytest_collect_file()
hook den Inhalt einer.txt
o-.yaml
Datei analysieren, in der die Tests wie gewünscht angegeben sind, und sie an den pytest-Kern zurückgeben.Ein schönes Beispiel finden Sie in der Pytest-Dokumentation . Ich denke, wonach du suchst.
quelle
Hier ist eine mögliche Teilantwort, da nur die Testskripte ausgewählt werden können, nicht einzelne Tests in diesen Skripten.
Und es ist auch dadurch eingeschränkt, dass ich den Legacy-Kompatibilitätsmodus im
unittest
Vergleich zu Skripten verwende, sodass ich nicht garantieren kann, dass es mit nativem Pytest funktioniert.Hier geht:
subset_tests_directory
.ln -s tests_directory/foo.py
ln -s tests_directory/bar.py
Seien Sie vorsichtig bei Importen, bei denen implizit davon ausgegangen wird, dass sich Dateien in befinden
test_directory
. Ich musste einige davon reparieren, indem ichpython foo.py
von innen ranntesubset_tests_directory
und nach Bedarf korrigierte.Sobald die Testskripte ausführen korrekt, einfach
cd subset_tests_directory
undpytest
dort. Pytest nimmt nur die Skripte auf, die es sieht.Eine andere Möglichkeit ist die Verknüpfung in Ihrem aktuellen Testverzeichnis, beispielsweise wie
ln -s foo.py subset_foo.py
damalspytest subset*.py
. Das würde vermeiden, dass Sie Ihre Importe anpassen müssen, aber es würde die Dinge durcheinander bringen, bis Sie die Symlinks entfernt haben. Hat auch für mich gearbeitet.quelle