基于ARM工具链的多应用多服务仓库代码覆盖率获取方法咨询
ARM架构代码仓库多应用/服务及公共依赖的代码覆盖率获取方案
针对你这种包含多应用、多服务及公共依赖文件夹的ARM代码仓库,可通过以下步骤实现全范围代码覆盖率统计:
一、编译阶段配置覆盖率选项
无论应用、服务还是公共依赖代码,编译时都需开启覆盖率统计开关,确保生成覆盖率数据文件:
- 使用ARM交叉编译工具链(如
arm-none-eabi-gcc)时,添加编译/链接选项:--coverage(该选项等价于-fprofile-arcs -ftest-coverage,会生成.gcno编译信息文件) - 确保公共依赖文件夹的代码在被各服务引用编译时,同样带上上述选项,这样公共代码的执行情况会被关联到调用它的服务测试中
二、执行测试并收集覆盖率数据
1. 测试执行
- 若在ARM目标板上运行测试:直接在目标板上执行各服务的测试程序,程序运行后会在当前目录生成
.gcda执行数据文件 - 若用QEMU模拟运行:通过QEMU启动测试程序,运行完成后同样会生成
.gcda文件,可直接在主机对应源码目录获取
2. 同步数据文件
将目标板或QEMU环境中生成的.gcda文件,拷贝回主机仓库的对应源码目录(需保持目录结构一致,比如目标板上/app/service1/test/.gcda要拷贝到主机repo/application/service1/test/下)
三、生成覆盖率报告(使用lcov工具)
lcov可批量处理多文件覆盖率数据,并生成直观的HTML报告,步骤如下:
- 清零旧计数器(避免历史数据干扰):
lcov --directory . --zerocounters
- 收集全仓库覆盖率数据:
lcov --directory . --capture --output-file raw_coverage.info --gcov-tool arm-none-eabi-gcov
注意:
--gcov-tool需指定对应ARM版本的gcov工具,确保能解析ARM编译生成的覆盖率文件
- 过滤无关文件(可选,比如排除测试文件、系统头文件):
lcov --remove raw_coverage.info '/usr/*' '*/test/*' --output-file filtered_coverage.info
- 生成HTML可视化报告:
genhtml filtered_coverage.info --output-directory coverage_report
打开coverage_report/index.html即可查看各应用、服务及公共文件夹的详细覆盖率数据
四、多服务覆盖率合并(可选)
如果需要单独统计每个服务的覆盖率,再合并为全仓库报告:
- 单独收集每个服务的覆盖率数据:
lcov --directory ./application/service1 --capture --output-file service1_coverage.info lcov --directory ./application/service2 --capture --output-file service2_coverage.info
- 合并多个服务的覆盖率文件:
lcov --add-tracefile service1_coverage.info --add-tracefile service2_coverage.info --output-file combined_coverage.info
- 基于合并后的文件生成最终报告即可
关键注意事项
- 公共依赖代码的覆盖率会自动统计到所有调用它的服务测试数据中,合并后即可看到公共代码的整体被覆盖情况
- 确保交叉编译工具链版本与lcov、gcov工具兼容,避免出现解析失败
- 若测试程序需要依赖库,需确保依赖库同样编译了覆盖率选项(如果需要统计依赖库的覆盖率)
内容的提问来源于stack exchange,提问作者aditya kasaudhan AP2211002006
相关产品推荐
相关产品推荐

