川石教育
全国咨询热线:136-9172-9932
  1. 首页 > 资讯与干货 > IT资讯

测试覆盖率 之 Cobertura的使用

作者:川石学院 日期:2022-06-23 11:28:08 点击数:

  一天一个关于测试知识点,5分钟内讲解你最关心的软件测试问题,今天就接着来谈谈关于软件测试中的“测试覆盖率 之 Cobertura的使用”。

前端调优

  什么是代码覆盖率?

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

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

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

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

  •   了解我们的测试用例对源代码的测试效果

  •   了解我们是否进行了足够的测试

  •   在软件的整个生命周期内保持测试质量

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

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

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

  关于Cobertura

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

  如何使用Cobertura

  1、pom中添加依赖

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

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

  输入如下命令:

  mvn cobertura:cobertura

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

测试覆盖率 之 Cobertura的使用(图2)

  3、覆盖率报告

  覆盖率的html报告如下:

测试覆盖率 之 Cobertura的使用(图3)

测试覆盖率 之 Cobertura的使用(图4)

  4、其他定制需要

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

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

  安装Cobertura插件

测试覆盖率 之 Cobertura的使用(图5)

  设置 Pre Steps

测试覆盖率 之 Cobertura的使用(图6)

  添加构建后操作

测试覆盖率 之 Cobertura的使用(图7)

  生成覆盖率报告

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

测试覆盖率 之 Cobertura的使用(图8)

测试覆盖率 之 Cobertura的使用(图9)


相关文章
  • 亚马逊运营成功转行软件测试,薪资13K表示很满意!2022-06-23 11:28:08
  • 西安川石的兰朋友喊你来当他的学弟学妹啦!2022-06-23 11:28:08
  • 国外的月亮也不一定比国内测试猿的年薪美~2022-06-23 11:28:08
  • 建筑工程专业朱同学成功转行为软件测试人!2022-06-23 11:28:08
  • 财务管理专业转行软件测试月薪甩会计几条街!2022-06-23 11:28:08
  • 只有技术沉淀才能成功上岸,深圳就业薪资13K!2022-06-23 11:28:08
  • 薪资11K!实现自我价值,从掌握一门IT技术开始...2022-06-23 11:28:08
  • 文科生转行软件测试照样拿下高薪15K!2022-06-23 11:28:08
  • 恭喜罗同学喜提19.5K,成功入行软件测试!2022-06-23 11:28:08
  • 毕业1年,迷茫的他最终选择转行软件测试2022-06-23 11:28:08