Wir machen eine Reihe von automatisierten Tests gegen eine vollständig implementierte Java-Webanwendung (zusätzlich zu Komponententests) und möchten die Codeabdeckung dieser Tests verfolgen. Die App ist in Java geschrieben und läuft auf Tomcat. Wir verwenden derzeit Cobertura, um die Abdeckung für unsere Komponententests zu erfassen, also möchte ich bei Cowertura bleiben. Ich habe unseren Krieg instrumentiert und kann Berichte aus der Datei coberura.server generieren, aber es zeigt immer eine Abdeckung von 0%.Cobertura zeigt 0% Abdeckung für instrumentierte WAR in Tomcat
Hier sind die Schritte, die ich bin nach:
- Bauen Sie das Glas und Krieg in den normalen Prozess (kein Instrumentierung). Unsere Anwendungsklassen werden in eine JAR-Datei gepackt, die dann in den Lib-Director des von uns bereitgestellten Kriegs gestellt wird.
- Packen Sie sowohl das Glas und Krieg
- Rebuild wieder aber dieses Mal Instrument die Klassen.
- Kopieren Sie die instrumentierten Klassen in das entpackte jar-Verzeichnis. Ich mache das, weil das Instrumentieren scheinbar keine Klassendateien für Dinge ausgibt, die keinen ausführbaren Code haben (wie Schnittstellen).
- Baue das Glas aus dem entpackten Glasverzeichnis
- Füge das neue instrumentierte Glas und die cobertura.jar zum lib Verzeichnis des entpackten Kriegsverzeichnisses hinzu und baue daraus einen Krieg.
- Fügen Sie den neuen instrumentierte Krieg und coberturaFlush.war zum Kater webapps Verzeichnis
- hinzufügen cobertura.ser (das wurde während der Instrumentierung erzeugt) zu tomcat Verzeichnis sind
- Starten Sie Tomcat
- Sie Sachen in der App
- Hit/coberturaFlush/flushCobertura in einem Browser.
- Stopp Tomcat
- Verwenden cobertura-report.bat den Bericht aus der cobertura.ser Datei ist
Hier zu erzeugen, was ich bisher ausprobiert habe:
- I bestätigt die Klassendateien im Jar haben Verweise auf Cobertura, also bin ich zuversichtlich, dass sie instrumentiert sind.
- Ich benutze coberturaFlush.war, weil ich eine Reihe von NoClassDefFound-Fehlern bekomme, wenn ich die App stoppe, so dass es nicht so aussieht, als ob der Shutdown-Haken richtig funktioniert. Dies scheint ein häufiges Problem zu sein und CoberturaFlush scheint eine vernünftige Lösung zu sein.
- Ich bin zuversichtlich, dass Cobertura die richtige .ser-Datei verwendet. Wenn Tomcat startet, sehe ich, dass einige Dateien schnell auf 0KB heruntergehen und eine cobertura.server.lock-Datei erstellt und dann wieder auf die ursprüngliche Größe zurückgesetzt und die Sperrdatei gelöscht wird. Ich sehe das gleiche passieren, wenn ich flushCobertura anrufe, sowie wenn ich Tomcat herunterfahre.
- Ich habe auch versucht, Berichte mit der Datei .ser zu erstellen, nachdem ich flush, aber bevor ich Tomcat stoppe und das hat auch nicht funktioniert.
Fehle ich etwas? Irgendeine Idee, warum Cobertura immer 0% Deckung sagt?
Vielen Dank im Voraus.