SonarQube 8.3.x中的Maven项目的测试覆盖率报告
幾年前,我寫了一篇博客文章,介紹如何在SonarQube中生成測試報告,該報告獨立于單元測試和集成測試的測試報告中。 從SonarQube 6.2開始,測試報告不再在這些類別中分開(請參閱SonarQube的博客文章 )。 SonarQube將所有測試報告合并為一個涵蓋整體的測試報告。 因此,如果您在Maven項目中將單元測試(由Maven Surefire插件運行)和集成測試(由Maven Failsafe插件運行)分開進(jìn)行測試,那么如何配置JaCoCo Maven插件。
在以下各節(jié)中,提出了滿足以下條件的解決方案:
- Maven被用作構(gòu)建工具。
- 該項目可以是多模塊項目。
- 單元測試和集成測試是每個模塊的一部分。
- 測試覆蓋率由JaCoCo Maven插件測量。
下一部分的路線圖是,首先顯示了Maven項目結(jié)構(gòu),用于單元測試和集成測試的分離。 然后顯示了Maven項目配置,其中包含單獨的單元測試運行和集成測試運行。 之后,我們來看一下Maven項目配置,以生成涵蓋單元測試和集成測試的測試報告。 最后,SonarQube的儀表板中顯示了SonarQube的配置,用于測試報告的可視化。
Maven項目結(jié)構(gòu)
首先,我們看一下默認(rèn)的Maven項目結(jié)構(gòu)在單個模塊項目中的樣子。
my-app ├── pom.xml ├── src │ ├── main │ │ └── java │ └── test │ └── java目錄src / main / java包含生產(chǎn)源代碼,目錄src / test / java包含測試源代碼。 我們可以將單元測試和集成測試放到這個目錄中。 但是我們想將這兩種類型的測試放在單獨的目錄中。 因此,我們添加了一個名為src / it / java的新目錄。 然后將單元測試放在src / test / java目錄中,并將集成測試放在src / it / java目錄中,因此新的項目結(jié)構(gòu)如下圖所示。
my-app ├── pom.xml ├── src │ ├── it │ │ └── java │ ├── main │ │ └── java │ └── test │ └── java單元和集成測試運行
幸運的是,單元測試運行配置是Maven默認(rèn)項目配置的一部分。 如果滿足以下條件,Maven將自動運行這些測試:
- 測試位于目錄src / test / java和
- 測試類名稱以Test開頭或以Test或TestCase結(jié)尾。
Maven在Maven的構(gòu)建生命周期階段測試期間運行這些測試。
集成測試運行配置必須手動完成。 它存在可以提供幫助的Maven插件。 我們希望滿足以下條件:
- 集成測試存儲在目錄src / it / java和
- 集成測試類名稱要么以IT開頭,要么以IT或ITCase結(jié)尾 ,
- 集成測試在Maven的構(gòu)建生命周期階段進(jìn)行集成測試。
首先,Maven必須知道它必須在其測試類路徑中包含目錄src / it / java 。 在這里,Build Helper Maven插件可以提供幫助。 它將目錄src / it / java添加到測試類路徑。
< plugin > < groupId >org.codehaus.mojo</ groupId > < artifactId >build-helper-maven-plugin</ artifactId > < version >3.1.0</ version > < executions > < execution > < goals > < goal >add-test-source</ goal > < goal >add-test-resource</ goal > </ goals > < configuration > < sources > < source >src/it/java</ source > </ sources > < resources > < resource > < directory >src/it/resources</ directory > </ resource > </ resources > </ configuration > </ execution > </ executions > </ plugin >上面的代碼段必須插入到項目根pom中的<project> <build> <plugins>部分 。
Maven的構(gòu)建生命周期包含一個稱為集成測試的階段。 在此階段,我們要運行集成測試。 幸運的是,當(dāng)在POM中進(jìn)行設(shè)置時,Maven故障安全插件的目標(biāo)集成測試會自動綁定到此階段。 如果您希望在集成測試失敗時構(gòu)建失敗,那么還必須將目標(biāo)驗證添加到POM中:
< plugin > < groupId >org.apache.maven.plugins</ groupId > < artifactId >maven-failsafe-plugin</ artifactId > < version >3.0.0-M4</ version > < configuration > < encoding >${project.build.sourceEncoding}</ encoding > </ configuration > < executions > < execution > < goals > < goal >integration-test</ goal > < goal >verify</ goal > </ goals > </ execution > </ executions > </ plugin >同樣,上述代碼片段也必須插入到項目根pom中的<project> <build> <plugins>部分 。 然后,當(dāng)Maven故障保護(hù)插件的類名稱以IT開頭或以IT或ITCase結(jié)尾時,它們會自動運行集成測試。
測試報告生成
我們想使用JaCoCo Maven插件生成測試報告。 它應(yīng)該為單元測試和集成測試生成測試報告。 因此,該插件必須要準(zhǔn)備兩個分開的代理。 然后他們在測試運行期間生成報告。 Maven的構(gòu)建生命周期包含自己的階段,可以在測試階段之前進(jìn)行準(zhǔn)備( 測試和集成測試 )。 測試階段的準(zhǔn)備階段稱為過程測試類 , 集成測試階段的準(zhǔn)備階段稱為pre-integration-test 。 當(dāng)在POM中設(shè)置了目標(biāo)prepare-agent和prepare-agent-integration時,JaCoCo會將其代理自動綁定到這些階段。 但這還不夠。 JaCoCo還必須創(chuàng)建一個報告,以便SonarQube可以讀取報告以進(jìn)行可視化。 因此,我們必須在POM中添加目標(biāo)報告和報告集成 :
< plugin > < groupId >org.jacoco</ groupId > < artifactId >jacoco-maven-plugin</ artifactId > < version >0.8.5</ version > < executions > < execution > < goals > < goal >prepare-agent</ goal > < goal >prepare-agent-integration</ goal > < goal >report</ goal > < goal >report-integration</ goal > </ goals > </ execution > </ executions > </ plugin >同樣,它是<project> <build> <plugins>部分的一部分。
現(xiàn)在,我們可以運行目標(biāo)mvn驗證,并且我們的項目已構(gòu)建為包含單元和集成測試,并生成兩個測試報告。
SonarQube測試報告可視化
現(xiàn)在,我們想在SonarQube中可視化我們的測試報告。 因此,成功構(gòu)建后,我們必須在我們的項目中運行Sonar Maven 3插件(命令mvn sonar:sonar )。 因此,Sonar Maven插件知道將報告上傳到何處,我們必須在?/ .m2 / setting.xml中配置SonarQube實例:
< profile > < id >sonar</ id > < activation > < activeByDefault >true</ activeByDefault > </ activation > < properties > <!-- Optional URL to server. Default value is http://localhost:9000 --> < sonar.host.url > http://localhost:9000 </ sonar.host.url > </ properties > </ profile >在SonarQube儀表板中打開項目時,我們會看到總體測試覆蓋率報告。
摘要
該博客描述了如果單元測試和集成測試分別運行,如何為Maven構(gòu)建生成測試報告。 在GitHub上 ,我托管了一個示例項目,演示了所有配置步驟。 作為技術(shù)環(huán)境,我使用
- Maven 3.6.3
- Maven插件:
- Maven Surefire插件
- SonarQube 8.3.1
- Java 11
鏈接
翻譯自: https://www.javacodegeeks.com/2020/06/test-coverage-reports-for-maven-projects-in-sonarqube-8-3-x.html
總結(jié)
以上是生活随笔為你收集整理的SonarQube 8.3.x中的Maven项目的测试覆盖率报告的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 普传变频器参数设置(普传变频器参数设置使
- 下一篇: qq空间怎么查看 QQ空间进入