Hudson JUnit Testcases durchführen

Status
Nicht offen für weitere Antworten.

quiddix

Mitglied
Hallo,

ich bin aktuell am Einrichten von Hudson. Ich kann im Moment mein Produkt erfolgreich builden.

Nun habe ich ein paar JUnit TestCases geschrieben. Wenn ich diese in Eclipse ausführe dann wird mir angezeigt dass alle Tests ohne Fehler durchgelaufen sind.

Nun würde ich das ganze gerne von Hudson aus machen, da es dort eine Option gibt. Leider steht dort nur etwas von einer JUNIT Report Datei.

Da ich von selbst keine Report Datei bekommen habe ich mir gedacht das ganze geht eventuell mit ANT-Skripten ?
Kann mir da jemand weiterhelfen, bzw. wie bekomme ich aus meine .java JUnit Testklassen einen .xml Report?

Eventuell auch gerne Beispielcode.
MFG Quiddix
 

fastjack

Top Contributor
Zum Beispiel mit den Anttasks junit und junitreport :

[XML]
<junit printsummary="on" haltonfailure="false" dir="${testdir}" fork="true">
<classpath refid="test-cp" />
<jvmarg value="-ea"/>
<jvmarg value="-Dlog4j.configuration=file:log4j.xml"/>
<test name="${testdir}.MyTests" outfile="xml-dir"/>
<formatter type="xml" />
</junit>
<junitreport todir="html-dir">
<fileset dir="xml-dir">
<include name="*.xml" />
</fileset>
<report format="frames" todir="html-dir" />
</junitreport>
[/XML]

Du mußt nur die Verzeichnisse entsprechend setzen.
 
M

maki

Gast
... oder mit Maven2, da läuft das alles schon automatisch ;)
 

Wildcard

Top Contributor
Oder mit dem Buckminster Plugin für Hudson.
Du fügst einen Buckminster build step hinzu und führst das Kommando 'junit' aus und übergibst den Pfad zu einer Eclipse Launch Configuration an für die Unit Tests die du ausführen möchtest. Die Tests laufen dann genau so wie in deiner IDE:
 

quiddix

Mitglied
Hmm,

irgendwie scheint das ganze bei mir nicht zu funktionieren.
Ich dachte mit eigentlich, dass ich mir ein Ant-Skript schreibe, wie es auch fastjack vorgeschlagen hat.

Leider weiß ich nicht genau wie ich die entsprechenden Pfade anpasse:
<junit printsummary="on" haltonfailure="false" dir="${testdir}" fork="true">
<classpath refid="test-cp" />
<jvmarg value="-ea"/>
<jvmarg value="-Dlog4j.configuration=file:log4j.xml"/>
<test name="${testdir}.MyTests" outfile="xml-dir"/>
<formatter type="xml" />
</junit>
<junitreport todir="html-dir">
<fileset dir="xml-dir">
<include name="*.xml" />
</fileset>
<report format="frames" todir="html-dir" />
</junitreport>

Ich muss doch irgendwann Verzeichnisse löschen und neue erstellen bevor ich irgendwo etwas reinschreiben kann. Meine testdir ist aber doch genau das gleich oder?

Eventuell könnte mir jemand die einzelnen Tags näher erläutern oder einfach mal eine komplette Beispiel ant Datei anhängen, sodass ich dann den gesamt Zusammenhang erkennen kann.
Stehe irgendwie aufm Schlauch.


Und noch eine Frage:
Muss ich nicht noch ein target zum kompilieren der Tests schreiben (haben viele andere User gemacht)
Danke

Beim classpath gebe ich die location der JUnit Datei an ? Was mach ich wenn die in unterschiedlichen locations liegen?
 
Zuletzt bearbeitet:

fastjack

Top Contributor
Du mußt vorher natürlich Verzeichnisse löschen und erstellen ;) Das ganze läuft dann so, das der junit-Task eine XML-Dateien in das Verzeichnis outfile="xml-dir" generiert und der Reporttask diese Dateien dann einliest und in HTML-verwandelt.

siehe hier : JUnit Task

und hier : JUnitReport Task
 

quiddix

Mitglied
Hi,

das heißt dann also, dass ich den junitreport task garnicht brauche, da mir für mein hudson job sowieso die xml datei reicht.

Was war mit meinen anderen Fragen:

1. Ist classpath = der Pfad zu den Testklassen?
2. was soll das jvmarg ?
3. Ist ${testdir} nicht auch der Pfad zu den Testklassen und deshalb = classpath
4. Muss ich irgendetwas kompilieren (wird in vielen Tutorials gemacht)
5. woher weiß Hudson wo meine junit*.jar Bibliothek liegt?

Wie gesagt ne kurze Beispiel Ant-Skript Datei wäre eventuell sinnvoll
 

fastjack

Top Contributor
1. Ist classpath = der Pfad zu den Testklassen?
2. was soll das jvmarg ?
3. Ist ${testdir} nicht auch der Pfad zu den Testklassen und deshalb = classpath
4. Muss ich irgendetwas kompilieren (wird in vielen Tutorials gemacht)
5. woher weiß Hudson wo meine junit*.jar Bibliothek liegt?
1. Das wäre Dein Klassenpfad, der die kompilierten tests beinhaltet und alle Libs, die diese brauchen.
2. kannst Du weglassen, dient z.B. das den Speicher hochzusetzen.
3. Sry, Fehlerteufel. "${testdir}.MyTests" soll eigentlich die vollqualifizierte TestSuite sein, also a.b.c.MyTests
${testdir} ist der Pfad indem die VM gestartet werden soll.
4. Vorher Tests kompilieren und z.B. Test-Jardatei erzeugen, oder Klassenpfad so machen, das er auf die Testclasses zeigt.
5. weis ich jetzt gerad selbst net :( Bei mir ist es so, das die Projekte immer alle Libs beinhalten, z.B. in einem Lib-Verzeichnis. Dann hat Hudson auch keine Probleme.
 

quiddix

Mitglied
Hi

leider verstehe ich das ganze Ding nicht.
1. Klassenpfad = Pfad zu einer Klasse/n , wieso Libs bzw. welche Libs werden von Testfälle gebraucht? (eventuell 5.)
2. ok
3. TestSuite? also Pfad in dem sich die Tests befinden ? Also gleich wie 1. nur nicht kompiliert ?
4. :( Bahnhof
5.

Sorry das ich es noch einmal schreibe,
ich finde im Netz entweder nur Beispiele die Teilausschnitte zeigen (kompilieren wird nicht gemacht, keine Verzeichnisse erstellt ...) oder sehr komplexe Codeausschnitte via Google code Search.

Eventuell gibt es hier jemand, der ein einzelnes Ant-Skript für einen Test hat und das hier beispielhaft zur Vefüfung stellen könnte.

@Wildcard:
Kurze Nachfrage:
Ist ein Buckminster build Step die Auswahl "Run Buckminster" und könntest du deinen Tipp etwas genauer erläutern?
Was ist der Unterschied bzw. Vor-/Nachteil zur Methode mit Ant-Skripten?

Danke
 

Wildcard

Top Contributor
Oh je, du hast von der Thematik noch nicht so viel Ahnung, oder? :)
Vielleicht solltest du Hudson erstmal ganz aussen vor lassen und dich darauf konzentrieren wie man lokal Unit Tests ohne IDE ausführt.
Ist ein Buckminster build Step die Auswahl "Run Buckminster" und könntest du deinen Tipp etwas genauer erläutern?
Ja, "Run Buckminster". Allerdings sollte dein Build selbst dann auch mit Buckminster laufen anstatt mit Ant oder was auch immer du zur Zeit verwendest.
Was ist der Unterschied bzw. Vor-/Nachteil zur Methode mit Ant-Skripten?
Der Vorteil ist, das du keine extra Ant-Scripts brauchst, dich nicht darum kümmern musst wie man die Tests kompiliert und wo man die Dependencies herbekommt, du keine TestSuite brauchst und die Tests out of the box genau so ablaufen wie in Eclipse.
 

quiddix

Mitglied
Hi,
bis jetzt habe ich nur JUnittests geschreiben und direkt in Eclipse die Analyse gemacht. Auch mit Ant Buckminster Hudson etc. hatte ich bis vor 2-3 Woche noch garnichts zu tun. Mein Build läuft aktuell mit Buckminster und nicht mit Ant. Lediglich Checkstyle verwendet ein Ant skript, das aber viel leichter zum schreiben war.

Könntest du mir schnell beschreiben was für ein Kommando ich übergeben muss.
 

Wildcard

Top Contributor
Das macht die Sache natürlich einfacher.
Du brauchst allerdings den aktuellen Milestone von Buckminster 3.6 da viel Arbeit in Eclipse JDT/PDE getan werden musst bis der JUnit Code auch Headless läuft und diese Änderung konnten erst nach Galileo eingepflegt werden.
Die Headless Update Site für 3.6 ist:
http://download.eclipse.org/tools/buckminster/headless-3.6
Sobald du auf Hudson ein Headless Buckminster 3.6 mit den benötigten Features installiert hast gehst du wie folgt vor:
Du öffnest den Lauch Configuration Wizard (Run -> Launch Configurations..., wählst deine Junit Launch Config aus (oder erstellst eine neue) und gehst dann auf Common -> Save As -> Shared File
Nun sollte beim ausführen eine *.launch erzeugt werden die du mit deinem Projekt eincheckst.
In Hudson musst du dann nur noch als eines der Buckminster commands
Code:
junit -l <path/to/yourJunit.launch> -o <path/where/your/junit/report/should/end/up>
ausführen.

Mit der 3.6er Version kannst du übrigens auch jede andere Art von Launch Configuration out of the box ausführen und es gibt auch support für Code Coverage Reports mit emma.
 

quiddix

Mitglied
Hi,

coole Sache danke für die Antwort.

Wie sieht es mit der Stabilität der 3.6 Version aus gibt es da irgendwelche Probleme?

Ich muss mich zunächst mit ein paar anderen Sachen beschäftigen, werde mich aber melden wenn alles geklappt hat.
Danke
 

quiddix

Mitglied
Hallo,

ich hab das ganze nun getestet und muss leider melden, dass es nicht funktioniert.
Ich habe mir den Buckminster headless build 3.6 mit dem p2 director heruntergeladen und die beiden Features hinzugefügt.
Danach habe ich alles in Hudson entsprechende konfiguriert.

In meinen Projekt wurde erfolgreiche eine launch Konfiguration angegeben.

UPDATE:

Hatte zwar ein paar kleien Probleme, aber jetzt läuft alles

bei -l darf man wohl nichts mit ${Workspace} angeben, sondern man befindet sich bereits im workspace und muss einfach /com.example.mail/<name>.launch angeben

Danke soweit
 
Zuletzt bearbeitet:
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
G Ant Hudson/Jenkins, Ant und JUnit unter einen Hut bringen Tools - Maven, Gradle, Ant & mehr 12
A Hudson/Buckminster: Verschiedene Fragen Tools - Maven, Gradle, Ant & mehr 12
A Hudson-Buckminster wirft Exception nach SVN Checkout Tools - Maven, Gradle, Ant & mehr 3
B Hudson - start all jobs Tools - Maven, Gradle, Ant & mehr 6
B Maven Mulimodul projekte in Hudson Tools - Maven, Gradle, Ant & mehr 2
T Buckminster-Hudson RCP-Build "CSpec source required" Tools - Maven, Gradle, Ant & mehr 9
B Hudson weiter... Tools - Maven, Gradle, Ant & mehr 3
B Hudson - Resourcen laden Tools - Maven, Gradle, Ant & mehr 11
N Maven2 Projekt unter Hudson mit SVN Repository erstellen Tools - Maven, Gradle, Ant & mehr 4
K Spring JUnit Test: Code / Strukturierung / Beratung Tools - Maven, Gradle, Ant & mehr 9
P Maven Test werden nicht ausgeführt . Junit . Maven . Surefire . Eclipse Tools - Maven, Gradle, Ant & mehr 12
H Eclipse JUnit erzeugt Fehler im Maven-Test Tools - Maven, Gradle, Ant & mehr 1
D JUnit Test in Maven fail und in Eclipse erolgreich Tools - Maven, Gradle, Ant & mehr 4
GianaSisters Ant jUnit und Ant Problem Tools - Maven, Gradle, Ant & mehr 2
B Junit-Programm von Kommandozeile über Ant starten Tools - Maven, Gradle, Ant & mehr 20
A Fehler bei Junit Tests über Ant Tools - Maven, Gradle, Ant & mehr 2
H ANT - Kompilieren von JUnit-Tests Tools - Maven, Gradle, Ant & mehr 7
N Problem mit Ant Classpath und Junit: Relative Pfade Tools - Maven, Gradle, Ant & mehr 2
S JUnit-Tests mit Ant und assert Tools - Maven, Gradle, Ant & mehr 3
P Testcases in JAR Tools - Maven, Gradle, Ant & mehr 3

Ähnliche Java Themen


Oben