在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之类的

1
2
3
4
5
6
7
8
9
10
11
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插件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
<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
Build Status

文章作者: Image
文章链接: https://by.cx/2019/01/24/java-coverage-test-with-maven-and-jacoco/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 编译程序