Wie bringt man Jenkins dazu, Python-Unittest-Fälle auszuführen? Ist es möglich, XML-Ausgaben im JUnit-Stil aus dem integrierten unittestPaket zu erstellen?
Alle Antworten setzen voraus, dass Sie die Testfälle über die Befehlszeile initiieren möchten. Aber wenn Sie die Tests programmgesteuert ausführen möchten, versuchen Sie import nose ; nose.runmodule() # aka nose.run(defaultTest=__name__)
Folgendes
1
IMHO beantwortet der einfache Vorschlag 'py.test --junitxml results.xml test.py' die Frage am besten. 'yum install pytest', um py.test zu installieren. Dann können Sie jedes unittest Python-Skript ausführen und jUnit xml-Ergebnisse erhalten
gaoithe
1
@gaoithe, das den Jenkins-Teil beantwortet, aber nicht die Anforderung erfüllt, das eingebaute unittest-Modul zu verwenden. In diesem Projekt war es eine gegebene Anforderung.
Erikbwork
@ erikb85 Wenn ich sage "Führe ein unittest Python-Skript aus", meine ich ein Skript, das das unittest-Modul verwendet.
Sie müssten das nose2.plugins.junitxmlPlugin verwenden. Sie können nose2mit einer Konfigurationsdatei konfigurieren, wie Sie es normalerweise tun würden, oder mit der --pluginBefehlszeilenoption.
+1 für den einfachen Vorschlag 'py.test --junitxml results.xml test.py'. 'yum install pytest', um py.test zu installieren. Dann können Sie jedes unittest Python-Skript ausführen und jUnit xml-Ergebnisse erhalten.
Gaoithe
1
Wenn Sie unittest-xml-reporting verwenden und von der Test Discovery-Funktion profitieren möchten , können Sie dies tun unittest.main(module=None, testRunner=xmlrunner.XMLTestRunner(output='test-reports')).
Rosberg Linhares
@RosbergLinhares Warum müssen Sie module=NoneTest Discovery verwenden? Es funktioniert genau wie in der Antwort beschrieben unittest.main(testRunner=xmlrunner.XMLTestRunner(output='test-reports')).
Acm
@RosbergLinhares, während der Testerkennung werden die Module nur importiert, aber nicht ausgeführt. Wie soll eine dieser Lösungen mit Discovery funktionieren? Ich habe es gerade ausprobiert, nichts davon funktioniert. Oder fehlt mir etwas?
Konstantin
20
Ich würde zweitens die Nase benutzen. Die grundlegende XML-Berichterstellung ist jetzt integriert. Verwenden Sie einfach die Befehlszeilenoption --with-xunit, um eine Datei nosetests.xml zu erstellen. Beispielsweise:
Nasentests - mit Xunit
Fügen Sie dann nach dem Erstellen eine Aktion "JUnit-Testergebnisbericht veröffentlichen" hinzu und füllen Sie das Feld "XMLs für Testberichte" mit nosetests.xml aus (vorausgesetzt, Sie haben Nosetests in $ WORKSPACE ausgeführt).
Bei Verwendung von Buildout verwenden wir collective.xmltestreportXML-Ausgaben im JUnit-Stil. Möglicherweise ist dies der Quellcode oder das Modul selbst könnte hilfreich sein.
import nose ; nose.runmodule() # aka nose.run(defaultTest=__name__)
Antworten:
Beispieltests:
tests.py:
JUnit mit Pytest
Führen Sie die Tests aus mit:
results.xml:
Einheit mit Nase
Führen Sie die Tests aus mit:
nosetests.xml:
JUnit mit Nase2
Sie müssten das
nose2.plugins.junitxml
Plugin verwenden. Sie könnennose2
mit einer Konfigurationsdatei konfigurieren, wie Sie es normalerweise tun würden, oder mit der--plugin
Befehlszeilenoption.Führen Sie die Tests aus mit:
nas2-junit.xml:
JUnit mit unittest-xml-Reporting
Fügen Sie Folgendes hinzu:
tests.py
Führen Sie die Tests aus mit:
Testberichte / TEST-SimpleTest-20131001140629.xml:
quelle
unittest.main(module=None, testRunner=xmlrunner.XMLTestRunner(output='test-reports'))
.module=None
Test Discovery verwenden? Es funktioniert genau wie in der Antwort beschriebenunittest.main(testRunner=xmlrunner.XMLTestRunner(output='test-reports'))
.Ich würde zweitens die Nase benutzen. Die grundlegende XML-Berichterstellung ist jetzt integriert. Verwenden Sie einfach die Befehlszeilenoption --with-xunit, um eine Datei nosetests.xml zu erstellen. Beispielsweise:
Fügen Sie dann nach dem Erstellen eine Aktion "JUnit-Testergebnisbericht veröffentlichen" hinzu und füllen Sie das Feld "XMLs für Testberichte" mit nosetests.xml aus (vorausgesetzt, Sie haben Nosetests in $ WORKSPACE ausgeführt).
quelle
Sie können das unittest-xml-Berichtspaket installieren , um einen Testläufer hinzuzufügen, der dem integrierten XML generiert
unittest
.Wir verwenden pytest , in das eine XML-Ausgabe integriert ist (eine Befehlszeilenoption).
In beiden Fällen kann die Ausführung der Komponententests durch Ausführen eines Shell-Befehls erfolgen.
quelle
Ich habe Nasentests verwendet. Es gibt Addons zum Ausgeben des XML für Jenkins
quelle
Bei Verwendung von Buildout verwenden wir
collective.xmltestreport
XML-Ausgaben im JUnit-Stil. Möglicherweise ist dies der Quellcode oder das Modul selbst könnte hilfreich sein.quelle
Führen Sie dies als Shell von Jenkins aus. Sie können den Bericht in pytest_unit.xml als Artefakt abrufen.
quelle