Jacoco代码覆盖率

官网配置:https://www.jacoco.org/jacoco/trunk/doc/maven.html

jacoco配置

pom文件中引入jacoco依赖

        <dependency>
            <groupId>org.jacoco</groupId>
            <artifactId>jacoco-maven-plugin</artifactId>
            <version>0.8.5</version>
        </dependency>

引入maven-surefire-plugin插件:

Maven本身并不是一个单元测试框架,Java世界中主流的单元测试框架为JUnit和TestNG。Maven所做的只是在构建执行到特定生命周期阶段的时候,通过插件来执行JUnit或者TestNG的测试用例。这一插件就是maven-surefire-plugin,可以称之为测试运行器(Test Runner),他能很好的兼容JUnit 3、JUnit 4以及TestNG。

           <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>2.5</version>
                <configuration>
                    <!-- 扫描所有的测试类-->
                    <includes>
                        <include>**/*Test.java</include>
                    </includes>
                    <!-- 排除测试启动类,否则运行test的时候会报错-->
                    <excludes>
                        <exclude>**/ApplicationTest.java</exclude>
                    </excludes>
                </configuration>
            </plugin>

引入jacoco-maven-plugin插件:

总体配置如下:

   <plugin>
                <groupId>org.jacoco</groupId>
                <artifactId>jacoco-maven-plugin</artifactId>
                <version>0.8.5</version>
                <configuration>
                    <!-- 配置的扫描framework下所有的类,这里也可以限制新增的类-->
                    <includes>
                        <include>**/thingjs/framework/**</include>
                    </includes>
                </configuration>
                <executions>
                    <execution>
                        <id>prepare-agent</id>
                        <goals>
                            <goal>prepare-agent</goal>
                        </goals>
                    </execution>
                    <execution>
                        <id>default-report</id>
                        <!-- 此处不配置的话,生成不了site文件夹-->
                        <phase>test</phase>
                        <goals>
                            <goal>report</goal>
                        </goals>
                        <configuration>
                            <!-- 限制FW的新增类-->
                            <includes>
                                <include>**/thingjs/framework/**/Fw*.class</include>
                            </includes>
                        </configuration>
                    </execution>
                    <execution>
                        <id>default-check</id>
                        <goals>
                            <goal>check</goal>
                        </goals>
                        <!-- Sonar中要求有具体的check规则,不然会报错,但是通过率不能太高,否则install的时候会失败-->
                        <configuration>
                            <rules>
                                <rule>
                                    <element>PACKAGE</element>
                                    <limits>
                                        <limit>
                                            <counter>LINE</counter>
                                            <value>COVEREDRATIO</value>
                                            <minimum>0.00</minimum>
                                        </limit>
                                        <limit>
                                            <counter>BRANCH</counter>
                                            <value>COVEREDRATIO</value>
                                            <minimum>0.00</minimum>
                                        </limit>
                                    </limits>
                                </rule>
                            </rules>
                        </configuration>
                    </execution>
                </executions>
            </plugin>

上面具体有3个阶段,官网上写的很详细了,具体怎么配置,可以查看

prepare-agent:可以见https://www.jacoco.org/jacoco/trunk/doc/prepare-agent-mojo.html

report:https://www.jacoco.org/jacoco/trunk/doc/report-mojo.html

check:https://www.jacoco.org/jacoco/trunk/doc/check-mojo.html

测试

执行mvn test,就会出现下面的结果

Jacoco代码覆盖率

Jacoco代码覆盖率

maven多模块配置

通过shell获取csv中的数据进行实时计算

#!/bin/bash
:<<EOF
  作者: WGR
  时间: 2021/07/05
  作用:计算web和svc的单元测试覆盖率,输出变量到README.md中
EOF
# web的总行数
webinstructions=`awk -F"," ‘{ instructions += $4 + $5} END { print instructions}‘ /builds/gHPfsBe5/0/uino-framework/framework/framework-web/target/site/jacoco/jacoco.csv`
# web的覆盖行数
webcovered=`awk -F"," ‘{ covered += $5} END { print covered}‘ /builds/gHPfsBe5/0/uino-framework/framework/framework-web/target/site/jacoco/jacoco.csv`
# svc的总行数
svcinstructions=`awk -F"," ‘{ instructions += $4 + $5} END { print instructions}‘ /builds/gHPfsBe5/0/uino-framework/framework/framework-service/target/site/jacoco/jacoco.csv`
# svc的覆盖行数
svccovered=`awk -F"," ‘{ covered += $5} END { print covered}‘ /builds/gHPfsBe5/0/uino-framework/framework/framework-service/target/site/jacoco/jacoco.csv`
# 输出单元测试覆盖率
awk ‘BEGIN{print (‘$webcovered‘+‘$svccovered‘)/(‘$svcinstructions‘+‘$webinstructions‘)*100 , "% covered" }‘

Jacoco代码覆盖率

上一篇:第1篇-关于JVM运行时,开篇说的简单些


下一篇:Vue 开发指南