2013-08-26 27 views
11

Próbuję uzyskać zasięg kodu z Sonarem i Jenkinsem. Widzę wtyczkę Jenkinsa Sonara pomyślnie uruchamia testy JUnit i pomyślnie ją kompiluje. Ale Sonar nie pokazuje wyników pokrycia kodu (zawsze pokazuje 0.0% jako pokrycie kodu) w projekcie. Ale Sonar pokazuje "Sukces testu jednostkowego".Sonar nie wyświetla pokrycia kodu po pomyślnej kompilacji przy użyciu wtyczki Jenkins Sonar

Używam Mavena z Jenkinsem i Sonarem.

pojawia się poniższy komunikat w dziennikach Jenkins podczas wykonywania wtyczki Sonar:

 
Project coverage is set to 0% as no JaCoCo execution data has been dumped: .../sonar/target/jacoco.exec 

Może ktoś mi pomóc jak uzyskać prawidłową pokrycia kodu na każdym projekcie Sonar.

+0

Czy przeczytałeś http://docs.codehaus.org/display/SONAR/Code+Coverage+by+Unit+Tests+for+Java+Project i spróbujesz pokrewnych próbek projektu? Jeśli tak, czy mógłbyś podać bardziej szczegółowe informacje: plik dziennika, konfiguracja SonarQube w pliku pom, w jaki sposób uruchamiasz SonarQube: mvn clean install/mvn sonar: sonar? Wersje SonarQube itp.? –

+0

Przeczytałem http://docs.codehaus.org/display/SONAR/Code+Coverage+by+Unit+Tests+for+Java+Project i użyłem cobertury jako mojej wtyczki zasięgu kodu, a następnie widzę pokrycia kodu dla małych projektów. Kiedy sprawdzam duży projekt w sonarze, widzę po prostu zasięg kodu jako - co oznacza, że ​​jego logi empty.in mogę znaleźć raport Cobertury nie znaleziony na ścieżce .../coverage.xml. Jaki byłby tego powód. Instrumentacja wtyczki cobertura poszła dobrze przed wyświetleniem powyższej wiadomości. – Venkat

+1

coverage.xml nie został wygenerowany z powodu OutOfMemeryError: heapspace. Ponieważ mój projekt jest tak dużym projektem, gdy ustawiam stertę pamięci na 2 GB, a pamięć wtyczki cobertura na 1,5 GB sonar wyświetla informację o pokryciu kodu. – Venkat

Odpowiedz

2

czytam https://docs.sonarqube.org/display/PLUG/Code+Coverage+by+Unit+Tests+for+Java+Project i używane Cobertura jak mój plugin pokrycie kodu potem widzę wyświetlanie pokrycia kodu dla małych projektów. Kiedy sprawdzam duży projekt w sonarze, widzę po prostu zasięg kodu jako - co oznacza, że ​​jest pusty. W dziennikach mogłem znaleźć, że raportu Cobertura nie znaleziono w ścieżce /.../coverage.xml.

coverage.xml nie został wygenerowany z powodu OutOfMemeryError: heapspace. Ponieważ mój projekt jest tak dużym projektem, gdy ustawiam stertę pamięci na 2 GB, a pamięć wtyczki cobertura na 1,5 GB sonar wyświetla informację o pokryciu kodu.

0

Zamiast używać sonaru Jenkinsa do sterowania sonarem, spróbuj zrobić to z mavenem, wykonując cel sonaru. Zwykle jest to łatwiejsze niż ustawienie dodatkowego etapu kompilacji i poprawienie wszystkich ścieżek, dopóki sonar nie znajdzie wszystkich odpowiednich plików.

W twoim przypadku myślę, że może odczytać raport junit/testng, ale nie może znaleźć wyników jacoco (jacoco.exec). Czy wyniki sonaru ścieżki (../sonar/target/jacoco.exec) są prawidłowe?

+0

Dziękuję za odpowiedź na moje pytanie. Próbowałem wykonać sonar mvn: sonar. Ale nie miałem szczęścia, nie udało mi się z tą samą wiadomością Pokrycie projektu ustawiono na 0%, ponieważ dane o wykonaniu JaCoCo nie zostały porzucone: /user/mysys/.jenkins/jobs/../workspace/.../sonar/ target/jacoco.exec. Tak, odczytuje wyniki testów jednostkowych, ale zawodzi w przypadku zasięgu kodu. – Venkat

8

Tylko dlatego, że Sonar poprawnie wywołał Surefire (i otrzymałeś komunikat "Sukces testu jednostkowego"), nie oznacza to, że JaCoCo wpasował twój kod.

Spróbuj wykonać bezpośrednio JaCoCo. Można dowiedzieć się, dlaczego JaCoCo zawodzi bezpośrednio:

mvn jacoco:prepare-agent test jacoco:report

JaCoCo umieści jacoco.exec jak również swoje raporty XML/HTML wewnątrz docelowej/jacoco. Albo zawiedzie, i mam nadzieję, że będziesz miał lepszy pomysł, dlaczego.

Jednym z bardzo częstym problemem jest to, że javaagent JaCoCo nie będzie działać, jeśli zmieniliśmy Surefire argLine w ogóle, ponieważ jacoco:prepare-agent prostu ustawia argLine nieruchomości, które w tym scenariuszu jest dogodnie ignorowane. Można ustawić przygotować-agenta propertyName własności do czegoś innego (jak jacocoArgLine) i obejmują że w swojej argLine config:

<argLine>-Xmx1024m ${jacocoArgLine}</argLine>

0

Według tego blog post, prawdopodobnie zapomnieć ustawić właściwość sonar.binaries we właściwościach projektu

Don’t forget sonar.binaries, otherwise, you might get something like « Project coverage is set to 0% since there is no directories with classes. » in your logs.

[...] 
sonar.surefire.reportsPath=target/surefire-reports 
sonar.jacoco.reportPath=target/jacoco.exec 
sonar.binaries=target/classes 
[...] 
0

Twój Sonar plug-in nie może znaleźć pliku raportu wygenerowanego przez Jacoco.

W swoim pom (rodzic lub dziecko) poszukaj kodu <destFile> pod jacoco/prepare-agent egzekucją. Zmień nazwę i lokalizację na target/jacoco.exec i jesteś gotowy do pracy!

Powiązane problemy