测试覆盖率之cobertura

       下面介绍现有的一种测试覆盖率报告方案:cobertura,具体是通过cobertura的maven以及Jenkins插件来实现测试覆盖率的展示。

maven部分

<!-- 在clean时把老的ser文件也清理掉 -->
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-clean-plugin</artifactId>
    <version>2.4.1</version>
    <configuration>
        <filesets>
            <fileset>
                <directory>.</directory>
                <includes>
                    <include>**/*.ser</include>
                </includes>
            </fileset>
        </filesets>
    </configuration>
</plugin>

<plugin>
 <groupId>org.codehaus.mojo</groupId>
 <artifactId>cobertura-maven-plugin</artifactId>
 <version>2.7</version>
 <configuration>
     <formats>
         <format>html</format>
         <format>xml</format>
     </formats>
     <aggregate>true</aggregate> <!-- 表示会聚合不同子module下的测试报告 -->
 </configuration>
</plugin>

运行mvn cobertura:cobertura,它会在每个模块以及根目录的target下分别产生.ser文件以及相应覆盖率报告文件。

覆盖率的html展示效果如下:

在我们的应用场景中,以后希望自动跑这些单元测试,之前写的真实访问、修改数据的test方法就需要排除了,我做了如下配置:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>2.18.1</version>
    <configuration>
        <includes>
            <include>**/*TestJMock.java</include>
        </includes>
        <excludes>
            <exclude>**/*Test.java</exclude>
        </excludes>
    </configuration>
</plugin>

如果要对测试覆盖率进行控制,一定要达到指定标准呢,做如下配置:

<plugin>
 <groupId>org.codehaus.mojo</groupId>
 <artifactId>cobertura-maven-plugin</artifactId>
 <version>2.7</version>
 <configuration>
     <formats>
         <format>html</format>
         <format>xml</format>
     </formats>
     <aggregate>true</aggregate> <!-- 表示会聚合不同子module下的测试报告 -->
    <check>
        <branchRate>0</branchRate>
        <lineRate>0</lineRate>
        <haltOnFailure>true</haltOnFailure>
        <totalBranchRate>0</totalBranchRate>
        <totalLineRate>0</totalLineRate>
        <packageLineRate>0</packageLineRate>
        <packageBranchRate>0</packageBranchRate>
        <regexes>
            <regex>
                <pattern>com.company.mode.services.*</pattern>
                <branchRate>60</branchRate>
                <lineRate>80</lineRate>
            </regex>
        </regexes>
    </check>
 </configuration>
</plugin>

通过mvn cobertura:check即可对覆盖率进行校验

下面说说这个maven插件的一些缺陷:

1、不支持lambda表达式,在mvn命令的执行中会报错,即使在通过git仓库下载最新cobertura代码自己打包生成的jar包,虽然没有报错,但是依然不能正常产生报告

2、根目录下的测试覆盖率文件似乎只是随机选了底下一个module的覆盖率,没有按照我们的设想来:将所有子module的测试覆盖率汇总。

 

jenkins 部分

接着讲如何集成到jenkins中,首先安装插件:

其次,在相应的构建任务中配置构建动作以及之后的cobertura解析动作:

构建之后的报告效果如下:

很神奇地,这个时候出现的覆盖率报告整合了所有子模块的测试覆盖率,这个部分应该是Jenkins插件对所有子module的coverage.xml都做了整合之故。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值