软件测试 | 代码覆盖率集成
1.JaCoCo 简介
JaCoCo 是一个开源的代码覆盖统计工具,支持 Java 和 Kotlin;支持计算测试代码对项目的覆盖情况,能定位到测试未覆盖的代码部分;同时它也能检查程序中的“废”代码和不合理的逻辑,用以提高代码质量;JaCoCo 不仅能对本地的代码进行检查,我们还可以把它与持续集成工具 Jenkins 进行集成,这样就能在代码提交后自动对提交的代码进行覆盖率的验证,保证提交代码的质量。
2.JaCoCo 运行环境准备
(1)Jenkins 服务:执行代码覆盖率的节点计算机,由于 Jenkins 执行代码覆盖率是向本地工具发起调用,所以,此节点计算机上需要安装好代码覆盖的相关工具,如 Java 和 Maven。
(2)Jenkins 上需要安装 JaCoCo 插件。
(3)安装 JUnit 单元测试框架。
3.Maven 项目与 Jenkins 工程(job)配置
(1)在 Maven 项目的配置文件(pom.xml)中配置 jacoco-maven-plugin 工具(见图 8-36)。
(2)在 Jenkins 中建立一个自由风格的项目(见图 8-37)。
(3)配置好节点计算机,此计算机是 JaCoCo 运行环境中的节点计算机,勾选“限定节点运行”(Restrict where this project can be run)项后,在“标签表达式”(Label Expression)文本框中填入节点的匹配表达式(见图 8-38)。
(4)配置代码源,将被测项目的代码的 Git 地址配置到图 8-39 所示的 URL 中。
(5)在“构建”(Build)选项卡界面中选择“增加构建步骤”(Add build step)项,在“构建步骤”中选择执行 shell(Execute shell)(见图 8-40)。
(6)在“构建后操作”(Post-build Actions)中,选择“增加构建后操作步骤”(Add post-build action)项,在展开的页面中选中“Record JaCoCo coverage report”项(见图 8-41),展开的页面中的其他配置项可以保持默认值。
4.执行 job
(1)job 配置完成之后,保存信息。在 job 首页的左边功能列表中有对该工程的操作,点击“立即构建”(Build Now)项,构建完成后会在 job 首页上展示一个代码覆盖率的趋势图。其中“line covered”表示代码的覆盖,“line missed”表示代码的丢失(见图 8-42)。
(2)点击趋势图能进入详细信息页面(M 表示丢失,C 表示已覆盖)(见图 8-43)。其中部分字段的含义如下。
1)instruction:字节码指令覆盖率。
2)branch:分支代码覆盖率。
3)complexity:圈复杂度覆盖率。
4)line:行覆盖率。
5)method:方法覆盖率。
6)class:类覆盖率。
(3)图 8-43 中的“Coverage Breakdowm by Package” 项展示出包的覆盖信息,通过点击包名还能继续查看包下面的类、方法等更详细的代码覆盖情况,未覆盖的代码会被标识成为红色(见图 8-44 和图 8-45)。注:实际运行环境中有颜色。
(4)从第 3 个步骤中可以看到,Demo1 类中的 countlength() 方法有一个 if 语句的分支长度大于 10(length>10)的条件没有覆盖到。此时可以在项目的测试代码中新增一个测试用例(见图 8-46)。
(5)我们用 Jenkins 重新构建任务后,将会发现前面未被覆盖的代码行已经被覆盖了(见图 8-47)。
(6)我们在项目的 main 函数中增加一些无用代码,用 Jenkins 重新构建后发现新增的两行无用代码未被覆盖。根据对代码分析可知,代码中两个整数相乘是不会出现问题的,所以代码中的 try 语句是无用代码,测试程序就不会进入到 catch 的分支(见图 8-48 和图 8-49)。
搜索微信公众号:TestingStudio 霍格沃兹的干货都很硬核
评论