2013-10-16 38 views
5

運行基於Gradle的構建後,我通過Jacoco在「build/jacoco」文件夾內成功生成了2個.exec文件,集成測試。SonarQube - integrationTest.exec - sonarRunner(Gradle)或「sonar-runner」命令 - 顯示0.0%covereage

搖籃命令: 「gradle這個乾淨的構建integrationTest」

一旦完成,它會產生下構建/ jacoco文件夾下面.exec文件。

  1. test.exec
  2. integrationTest.exec

以下是我sonar-project.properties文件。當我從Linux運行「sonar-runner」提示它完成時,但在SonarQube儀表板上爲這個項目,我看到單元測試說約34.5%,但集成測試說0.0%。兩個.exec文件都有有效的大小。我還對.exec文件做了「cat」,並將輸出傳送給Linux中的「strings」命令,並看到integrationTest.exec確實打了測試功能 - 我只有1個.java文件。

當我運行「gradle clean build integrationTest sonarRunner -Dxxx.xxx = yyy -Dyyy.xx = zzz」時,即通過使用-D選項傳遞sonar-project.properties文件中提到的所有聲納變量,它可以工作但SonarQube項目儀表板上的結果相同。項目的聲納儀表板具有爲單元/集成測試配置的兩個小部件,並且包括顯示「總體覆蓋率」的IT測試。總體覆蓋率顯示爲34.5%(這是單元測試%值)。 Sonar會在此操作過程中看到test.exec,integrationTest.exec以及自動生成overall-xxx.exec文件。

注意:我不是在哪裏 - 在單獨的putty/linux控制檯上啓動tomcat - 或者在Gradle構建腳本中提供任何值或設置JAVA Agent for Jacoco。我已經獲得了integrationTest.exec文件和test.exec文件,因此不確定在IT測試完成運行後是否需要停止JVM。我不認爲我需要這些,因爲我有.exec文件的有效文件大小。

我: - 爲什麼聲納沒有得到它的覆蓋上,即使我設置/正確地傳遞以下變量的儀表盤:

sonar.jacoco.itReportPath=build/jacoco/integrationTest.exec 

-bash-3.2 $ 貓聲納project.properties

# Root project information 
sonar.projectKey=com:company:product:ProjectA 
sonar.projectName=ProjectA 
sonar.projectVersion=1.0 
# optional description 
sonar.projectDescription=ProjectA Service 

#Tells SonarQube that the code coverage tool by unit tests is JaCoCo 
sonar.java.coveragePlugin=jacoco 

#Tells SonarQube to reuse existing reports for unit tests execution and coverage reports 
sonar.dynamicAnalysis=reuseReports 

# Some properties that will be inherited by the modules 
sonar.sources=src/java,test/java,src/java-test 

# Sonar Unit Test Report path 
sonar.jacoco.reportPath=build/jacoco/test.exec 

# Sonar Integration Test Report Path 
sonar.jacoco.itReportPath=build/jacoco/integrationTest.exec 

sonar.junit.reportsPath=build/UT/results 

# Sonar Binaries 
sonar.binaries=build/classes/main 

回答

2

縮小的原因:我認爲這是由於對集成測試的.exec文件。爲了證明它:我將UT exex文件傳遞給聲納變量中的兩個報告路徑,即以下內容和SonarQube挑選了UT/IT測試覆蓋率。這證明如果用於IT測試的.exec文件是好的(我認爲這是但我需要仔細檢查),然後Sonar會選擇.exec文件並顯示有效覆蓋百分比而不是0.0%。注意:如果Sonar正在挑選值,以下僅僅是爲了證明。 itReportPath變量應該使用由Jacoco的集成測試生成的.exe文件。

sonar.jacoco.reportPath=build/jacoco/test.exec 

# Sonar Integration Test Report Path 
#sonar.jacoco.itReportPath=build/jacoco/testintegrationTest.exec 
sonar.jacoco.itReportPath=build/jacoco/test.exec 

OK找到了問題。我在Gradle中運行integrationTest任務,並沒有將jacocoagent.jar(按照Jacoco文檔)附加到目標JVM(Tomcat的實例)範圍。一旦我這樣做了,我從Gradle中的integrationTest任務(build.gradle或GRADLE_HOME/init.d/some.common.gradle文件)中刪除了jacoco {...}節,因爲這會將jacoco代理附加到運行Gradle的Java JVM )。現在,一旦jacocoagent。jar被附加到Tomcat的JVM上(按照下面我在Tomcat的startup.sh腳本中添加的行,並將該變量添加到啓動Tomcat的命令中),然後運行Gradle(integrationTest)任務來運行IT測試。

PROJ_EXTRA_JVM_OPTS=-javaagent:tomcat/jacocoagent.jar=destfile=build/jacoco/IT/jacocoIT.exec,append=false 

然後同時搖籃正在進行中,測試跑了,我得到了一個文件(jacocoIT.exec在指定的位置)有一些文件大小,但,這還不是最後一個。我必須通過運行Tomcat的stop.sh腳本來停止Tomcat會話/ JVM實例。一旦Tomcat停止,我看到jacocoIT.exec文件大小顯着增加,這是最終有效的jacocoIT.exec文件(我需要sonarRunner Gradle任務或sonar-runner選擇併成功地將IT代碼覆蓋率數據推送到項目的聲納儀表板)。完成後,我同時獲得了UT + IT和它的代碼覆蓋率。

sonar.jacoco.reportPath=build/jacoco/UT/jacocoUT.exec 
sonar.jacoco.itReportPath=build/jacoco/IT/jacocoIT.exec 
相關問題