Frage

Ich bin die Migration ein paar Projekte von einem ant-build auf maven ein.Der build-server ist und bleiben wird, Hudson.

Ich habe Probleme mit der Aufnahme-code-Abdeckung in hudson mit cobertura aufgrund der - tests ausgeführt und aufgezeichnet werden zweimal problem.

Das Projekt ist multi-Modul und es wäre nett, obwohl nicht erforderlich, um eine zusammengefasste Ausgabe des code-coverage-Daten.

Alles in allem, die Lösung, die ich Suche muss:

  • führen Sie automatisierte tests für alle Module und die Ergebnisse aufzeichnen einmal;
  • Anzeige-die einzelnen Modul-code-coverage in Hudson;
  • einfach konfiguriert werden einmal für das gesamte Projekt, nicht in jedem Modul.

Die Lösung basiert auf Cobertura, oder Emma, oder jede andere java-code-coverage-tool.


Update:Ausführen der tests mit Emma noch Duplikate der Ergebnisse und es gibt keine merge - Fähigkeit, so es ist nicht wirklich brauchbar, mit multi-Modul-builds.

War es hilfreich?

Lösung

Sonar ist ein sehr cooles tool, das leicht integriert mit Hudson, ich mag es wirklich, seine Organisation mit multi-Modul-Projekte.Sie sollten es ausprobieren

alt-text http://sonar.codehaus.org/wp-content/uploads/2009/08/dashboard.png

Andere Tipps

Es ist ein bisschen hackish, aber der Ansatz, den ich verwende, ist zu verwenden eine modifizierte version des Maven-cobertura-plugin (was ist gibt es von Ihrem repo).Es bietet eine cobertura:generate-Bericht Ziel, so dass Sie einfügen können cobertura:cobertura-instrument und:generate-report in Ihrem Lebenszyklus vor und nach tests, respectively.Dass bekommen Sie die Abdeckung, die Daten, die Sie wollen, ohne die doppelte test-Durchführung/ - Aufnahme.

Das zugrunde liegende problem ist, dass alle nicht-Klee-coverage-Maven-plugins, die ich habe, in laufen gebaut um die Idee der Ausführung des tests mit Abdeckung getrennt von der Haupt-test Ausführung des Maven-Lebenszyklus.Dieser, natürlich, die Ergebnisse in zwei Gruppen von testdurchführungen.Wenn Sie ein freestyle-Projekt, erhalten Sie lediglich eine Reihe von tests aufgezeichnet (da sogar mit zwei testdurchführungen, es ist nur eine Kopie der test-Ausgang), aber das Maven Projekt Typ eigentlich fängt die Maven mojo-Ausführungen und-Datensätze-test-output/Ergebnisse der Testausführung Zeit, anstatt alles auf einmal am Ende des build-als freestyle-Projekte.Dies hat viele Vorteile, aber es hat auch die ziemlich krassen Nachteil, dass ein test immer zweimal ausgeführt wird, zählt als zwei tests.

Das heißt, während ich gesehen habe starke Argumente für die Durchführung von tests sowohl gegen nicht-instrumentierte und instrumentierte code, ich bevorzuge es, nur die tests auszuführen, sobald, gegen instrumentierten code - nicht nur wegen der Maven/Hudson Fragen, sondern weil, wenn Sie haben tests 45 Minuten, erscheint es ehrlich gesagt albern, Sie laufen zweimal zu erzeugen das gleiche Ergebnis.

Robert,

Ich hatte dieses problem und fand, dass Hudson nicht doppelt melden, wenn Sie setup die Projekt als ein freestyle-Projekt vielmehr als eine Maven2-Projekt.Sie verlieren einige der Nettigkeit mit einem maven2-Projekt, aber für uns war es eine Handels-wir machen mussten.

Jeff

Wir verwenden Sie free style Projekte und haben dieses problem nicht, so wie angegeben, kann dies die Ursache für Ihr problem sein.

Um die Zusammenführen Funktionen, die wir erstellt unsere eigenen Artefakt-repository (wir sind nicht mit Maven).Am Ende jeder erstellen, die wir kopieren die cobertura.ser-Datei auf eine Netzwerkfreigabe, die Umbenennung in die Prozess.Wir haben eine konsolidierte Sicht auf job kopiert alle cobertura-Dateien und source-code-Dateien (ein anderes build-Artefakt kopiert zu den Netzwerk-share) in den lokalen build-Verzeichnis und generieren Cobertura Bericht.

Das fehlen eines standard-Artefakt-repository innerhalb von Hudson ist ein bisschen frustrierend, aber es macht Sinn, geben die Autoren in der Regel verwenden Sie Maven für diese Bedürfnisse.Unser build-Prozess läuft über mehrere Server, so dass wir können nicht nur relative Pfade verwenden, in dem anderen job directories.

Beachten Sie, wir tun die gleiche Sache für andere Metriken:test-Ergebnisse, JavaNCSS, ect.und schlossen sich entweder über die richtigen Werkzeuge oder einige benutzerdefinierte code.

Wir verwenden das gleiche repository für traditionelle build-Artefakte:DLLs, Gläser, installation scripts.

Siehe SD-Java-Test-Coverage für eine extrem niedrige overhead-tool mit schöner GUI.Ich bin mir nicht sicher, ich verstehe Ihre "zweimal" problem, aber wenn Sie lief (die gleichen deterministischen) Prüfungen zweimal mit der SD-tools, erhalten Sie den gleichen test-coverage-Daten, z.B. Ihre idempotent.Wenn Ihre tests sind nicht deterministisch, erhalten Sie zwei verschiedene Testläufe, aber diese tools leicht führt die Ergebnisse mehrerer Läufe in einem einzigen Gesamt-Zusammenfassung.

Auch Sie Griff sehr große Anwendungen, und Griff mehrere Thread-Anwendungen ziemlich gut (kleine timing-Splitter machen kann die Antwort etwas ungenau in der Theorie, aber die Praxis diese ist einfach nicht ein Problem ist).

Haben Sie in Betracht gezogen, Atlassian ' s Clover?

Die maven-clover2-plugin hat ein neues Ziel: clover2:setup einfach instrument, Ihre tests ohne Verzweigung des Lebenszyklus, oder laufen die tests zweimal.

Definieren Sie die Ziele laufen in Hudson wie so:

mvn clover2:setup verify clover2:aggregate clover2:clover

Die maven-clover2-plugin ist absolut kostenlos probieren für 30 Tage.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top