• 测试覆盖率 之 Cobertura的使用


    什么是代码覆盖率?

    代码覆盖率是对整个测试过程中被执行的代码的衡量,它能测量源代码中的哪些语句在测试中被执行,哪些语句尚未被执行。

    为什么要测量代码覆盖率?

    众所周知,测试可以提高软件版本的质量和可预测性。但是,你知道你的单元测试甚至是你的功能测试实际测试代码的效果如何吗?是否还需要更多的测试?

    这些是代码覆盖率可以试图回答的问题。总之,出于以下原因我们需要测量代码覆盖率:

    • 了解我们的测试用例对源代码的测试效果
    • 了解我们是否进行了足够的测试
    • 在软件的整个生命周期内保持测试质量

    注:代码覆盖率不是灵丹妙药,覆盖率测量不能替代良好的代码审查和优秀的编程实践。

    通常,我们应该采用合理的覆盖目标,力求在代码覆盖率在所有模块中实现均匀覆盖,而不是只看最终数字的是否高到令人满意。

    举例:假设代码覆盖率只在某一些模块代码覆盖率很高,但在一些关键模块并没有足够的测试用例覆盖,那样虽然代码覆盖率很高,但并不能说明产品质量就很高。

    关于Cobertura

    Cobertura可以理解为一种测试覆盖率报告方案,通过Cobertura + Maven + Jenkins来实现测试覆盖率的展示。

    如何使用Cobertura

    1、pom中添加依赖

    xml
               <!-- 在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下的测试报告 -->
                        <check/>
                    </configuration>
                </plugin>
    

    2、通过命令行生成报告文件

    输入如下命令:

    cmd
    mvn cobertura:cobertura

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

    3、覆盖率报告

    覆盖率的html报告如下:

    4、其他定制需要

    因实际场景需要,排除某些方法,需要调整如下配置:

    xml
    <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>

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

    xml
    <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集成

    安装Cobertura插件

    设置 Pre Steps

    添加构建后操作

    生成覆盖率报告

    所有的配置都好了,点击立即构建,即可生成相应的测试覆盖率报告

    到此,关于Cobertura的使用介绍完毕,有兴趣的同学,请自行尝试!

    参考文章:

    highlighter- Go
    https://blog.csdn.net/guzhangyu12345/article/details/90542976
    https://blog.csdn.net/weixin_40785472/article/details/115961328

    __EOF__

  • 本文作者: 久曲健的测试窝
  • 本文链接: https://www.cnblogs.com/longronglang/p/16226855.html
  • 关于博主: 评论和私信会在第一时间回复。或者直接私信我。
  • 版权声明: 本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
  • 声援博主: 如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。
  • 相关阅读:
    Java 线程通信之线程安全问题
    如何提高自己的软件测试水平之bug定位
    如何看待Unity新的收费模式?
    行业篇:自动驾驶场景下的数据标注类别分享
    全网最新的jmeter压测话,只想快速教会你用Jmeter编写脚本进行压测
    代码随想录算法训练营第六十五天 | 岛屿数量 深搜、岛屿数量 广搜、岛屿的最大面积
    屡破纪录|Hubble数据库又获2022全球数字经济大会背书 数据库赛道同类选优入选 “数字经济产业创新成果”
    地平线计划迎新历程,Zebec Chain有望成为公链赛道新兴生力军
    java计算机毕业设计高校大学生就业系统MyBatis+系统+LW文档+源码+调试部署
    Android10 动态修改开机动画(三)命令说明
  • 原文地址:https://www.cnblogs.com/longronglang/p/16226855.html