在Maven和Travis中使用Jacoco进行代码覆盖测试

2019 年 1 月 24 日 星期四(已编辑)
/ , , ,
16

在Maven和Travis中使用Jacoco进行代码覆盖测试

测试是代码生命周期的一个很重要的部分,对于开源软件一份测试报告可以提高使用者对此代码的信任度。

测试覆盖率能体现出测试中所覆盖的代码范围,也能体现测试用例的设计是否合理。

话虽如此,但是自从懂事以来就没有给自己的代码写过测试类。JUnit也是拿来当Jshell用(这么方便的@Test哪里去找)

测试环境

这次配合自己写的一个开源库,所以配置了一套完整的测试步骤。

  • travis-ci(因为这个项目直接托管在github上所以用travis会比较方便)
  • maven(自动打包和测试)
  • jacoco(导出测试报告)
  • coveralls(第三方测试统计平台)

测试流程就是当代码Push到GitHub之后,travis创建VM开始执行maven对代码进行打包和测试,同时jacoco生成测试报告,完成之后将报告上传至coveralls。

配置项目

travis

首先登陆travis-ci.org关联账户(public repo免费,私有免费可以尝试gitlab),开启指定repo的hook

编写.travis.yml配置文件,我这里只对代码进行测试,你可以根据自己的需求定制配置文件,比如通过测试自动上传release之类的

language: java
jdk:
  - oraclejdk8
cache:
  directories:
    - '$HOME/.m2/repository'
script:
  - mvn clean package
after_success:
  - mvn clean test org.jacoco:jacoco-maven-plugin:prepare-agent install org.jacoco:jacoco-maven-plugin:report
  - mvn org.eluder.coveralls:coveralls-maven-plugin:report -DrepoToken="${COVERALLS}"

因为某些情况下会找不到jacoco的包所以这里的maven命令都带上了完整的包名。

配置maven pom文件

添加jacoco和coveralls插件

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <configuration>
        <source>1.7</source>
        <target>1.7</target>
    </configuration>
</plugin>
<plugin>
    <groupId>org.jacoco</groupId>
    <artifactId>jacoco-maven-plugin</artifactId>
    <version>0.8.2</version>
    <configuration>
        <skip>false</skip>
        <destFile>target/coverage-reports/jacoco-unit.exec</destFile>
        <dataFile>target/coverage-reports/jacoco-unit.exec</dataFile>
        <includes>
            <!-- 目标测试目录 -->
            <include>**/HappyTree/**</include>
        </includes>
        <rules>
            <!-- 自定义规则 -->
        </rules>
    </configuration>
    <executions>
        <execution>
            <id>jacoco-initialize</id>
            <goals>
                <goal>prepare-agent</goal>
            </goals>
        </execution>
        <execution>
            <configuration>
                <dataFile>target/coverage-reports/jacoco-unit.exec</dataFile>
                <outputDirectory>target/coverage-reports</outputDirectory>
            </configuration>
            <id>report</id>
            <phase>test</phase>
            <goals>
                <goal>report</goal>
            </goals>
        </execution>
    </executions>
</plugin>
<plugin>
    <groupId>org.eluder.coveralls</groupId>
    <artifactId>coveralls-maven-plugin</artifactId>
</plugin>

配置Coveralls与Travis

上传测试报告需要使用token,而像public repo直接暴露token是不安全的,所以需要在Travis后台设置环境变量. More option -> settings -> Environment Variables.

在Coveralls里开启指定repo之后就可以在setting里拿到repo token

此时再进行push则可以正常进行代码的测试。

测试结果

Coveralls中对上传的jacoco报告的统计

Travis对编译的测试报告

同时这两个平台还自带badge, 可以贴到Readme中

![Coverage Status](https://coveralls.io/github/tusik/HappyTree?branch=master) ![Build Status](https://travis-ci.org/tusik/HappyTree)

  • Loading...
  • Loading...
  • Loading...
  • Loading...
  • Loading...