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