jenkins集成gtest单元测试报告和gcov覆盖率测试报告
参考资料:
环境准备
- jenkins(略)
jenkins 上插件:
插件名称 | 作用 |
---|---|
JUnit Plugin | 集成 gtest 单元测试报告 |
HTML Publisher plugin | 集成 gcov 覆盖率测试报告 |
- googletest、lcov:
sudo apt install lcov
单元测试报告生成
.\<test_proc> --gtest_output=xml:<report_file_path>
生成测试报告需要处理适配 JUnit 的 Package
。给元素测试报告中 testcase
元素的 classname
属性值增加 模块名
,JUnit 将 模块名
解析为 Package
使得 Jenkins 中单元测试报告可以按模块统计查看。
<!--原始报告-->
<testcase name="PrintsMessage" file="/home/user/Documents/googletest/googletest/samples/sample9_unittest.cc" line="82" status="run" result="completed" time="0." timestamp="2024-04-02T09:09:44.484" classname="CustomOutputTest" />
<!--增加模块名-->
<testcase name="PrintsMessage" file="/home/user/Documents/googletest/googletest/samples/sample9_unittest.cc" line="82" status="run" result="completed" time="0." timestamp="2024-04-02T09:09:44.484" classname="模块名.CustomOutputTest" />
覆盖率测试报告生成
生成覆盖率测试报告的测试用例,需要增加如下编译配置
# gcov相关编译选项
SET(GCC_COVERAGE_COMPILE_FLAGS "-g -O0 -coverage -fprofile-arcs -ftest-coverage")
SET(GCC_COVERAGE_LINK_FLAGS "-coverage -lgcov")
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${GCC_COVERAGE_COMPILE_FLAGS}")
SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${GCC_COVERAGE_LINK_FLAGS}")
#链接库文件gcov
target_link_libraries(test_proj_name gcov)
编译测试用例
在编译生成目录得到*.gcno文件
执行测试用例
在编译生成目录得到*.gcda文件
生成报告
//在编译生成目录中执行得到test.info
lcov -c -o test.info -d .
//根据test.info生成html网页报告到<output_dir>文件夹
genhtml test.info -o <output_dir>
Jenkins 流水线集成
//增加构建后步骤
post {
always {
junit 'module1.xml' // 归档 gtest 的 XML 报告
junit 'module2.xml' // 归档 gtest 的 XML 报告
script {
// 发布HTML报告
publishHTML (
target: [
allowMissing: false,
alwaysLinkToLastBuild: false,
keepAll: true,
reportDir: './gcov_report',//将各模块的覆盖率测试html报告文件夹放到gcov_report目录
reportFiles: '*/index.html',//匹配所有模块的覆盖率测试报告
reportName: 'LCOV Report'
]
)
}
}
}
效果
Jenkins 构建结果概览
一次构建单元测试报告
一次构建覆盖率测试报告