一.简介
每种编程语言都有自己的单元测试框架。执行单元测试的工作一般由构建工具来完成。Jenk-ins做的只不过是执行这些构建工具的单元测试命令,然后对测试报告进行收集,并呈现。
Jenkins并不会自动帮我们写单元测试,写单元测试还是要靠人。为什么要这样说呢?因为笔者发现,不少人认为Jenkins的自动化测试是指Jenkins代替人自动写测试。
二.单元测试
JUnit
JUnit是一个Java语言的单元测试框架,由Kent Beck和ErichGamma创建。当执行maven test命令时,Maven会执行测试阶段(包括单元测试),然后生成测试报告。
收集并展示JUnit测试报告的步骤如下: 1.安装Jenkins JUnit插件,搜junit
2.在Jenkins中加入junit步骤,通常将步骤放在post always中,因为当测试不通过时,我们依然可以收集到测试报告
post {
always {
junit testResults:
"**/target/surefire-reports/*.xml"
-
}
}
当pipeline运行结束后,在构建页的左边菜单栏及右边详情下都会多出一个链接:Test Result
3.单机“Test Result”进入,可以看到测试报告的详细信息
junit步骤的testResults参数支持Ant风格路径表达式。**/targetlsurefire-reports/*.xml
表示只要是target/surefire-reports目录下的XML文件就会被当作JUnit测试报告处理,而不论target在哪个层级的目录下
JacoCo
JUnit只是方便我们写单元测试的一个框架,但是并没有告诉我们有多少代码被测试覆盖到了。而JaCoCo填补了这一空白。JaCoCo是一个免费的Java代码覆盖率的库,能帮助我们检测出代码覆盖率,并输出覆盖率报告。
JaCoCo提供了以下几个维度的覆盖率分析。
- 指令覆盖率( Instruction Coverage )
- 分支覆盖率( Branch Coverage )
- 圈复杂度覆盖率( Cyclomatic Complexity Coverage )
- 行覆盖率( Line Coverage )
- 方法覆盖率( Method Coverage )
- 类覆盖率( Class Coverage )