前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >CI 中一次单元测试覆盖率问题定位分析

CI 中一次单元测试覆盖率问题定位分析

作者头像
DevOps时代
发布2018-12-26 11:38:37
1K0
发布2018-12-26 11:38:37
举报

问题说明

最近一次开发人员提交代码有目录删除,CI的编译环节和单元测试都没有错误,但是单元测试覆盖率执行失败? 提示如下: 开始时间:2017-09-11 17:03:22 结束时间:2017-09-11 17:03:43 耗时:21秒 【执行结果】 单元测试覆盖率执行失败! 【失败原因】 Do lcov failed…

问题处理

故障初次诊断

用命令lcov -c --directory ~/src/build提取故障:

代码语言:javascript
复制
geninfo: ERROR: /home/ocsr90/src/build/billing/pycheck/CMakeFiles/py_check.dir/PyCheckEngine.cpp.gcno: could not open file

PyCheckEngine.cpp.gcno 这个文件一没生成出来? 查找代码目录并无PyCheckEngine.cpp及pycheck目录。

故障分析

问题在哪里?

  • 前面是增量更新,应该考虑全量更新?
  • svnupdate更新是否存在问题?
  • CI的执行脚本是否存在问题?
  • lcov 是否存在缓存?

清理环境后,并删除build目录,保证是干净的环境后,编译没有问题,但是告警问题还存在。

在源代码没有对应目录情况下,仍然在编译目录生成build/billing/pycheck/CMakeFiles/py_check.dir/。为什么呢?

版本的编译方式改为CMake方式编译,主要有:

  • cmakefiles目录:记录整个工程的编译选项,最外层目录以及动态库,包括cmake.dir,cmake.targets,cmake.setting等。
  • CMakeLists.txt:描述子目录或者文件 在编译脚本(cmakefiles目录文件和cmakefiles目录)搜索pycheck,没有。

问题的转机

在根目录lib看动态库时,看到 libpy_check.so ,在编译脚本(cmakefiles目录文件和cmakefiles目录)搜索py_check时,cmake.targets的set(ZSMART_BILLING_SO_TARGETS中还有py_check的项,一切明朗了。

去掉cmake.targets中py_check项,CI成功。 问题并没有明确,猜想一下原因: 对应的代码目录pycheck以及文件已经删除,但是连接库没有去掉。编译时在/src/build/lib没有找到libpy_check.so,链接了~/lib老版本的库。 单元测试时,生成改目录,执行单元测试覆盖率是出现错误。 是这样吗?需要进一步验证。

问题的复现

重新复原cmake.targets,单步执行CI。

  • 编译完成,没有build/billing/pycheck/CMakeFiles/py_check.dir/目录。
  • 单元测试执行后,确实生成改目录。
  • 单元测试覆盖率执行失败。

libpy_check.so如何包含相应的目录信息? 在加了覆盖率统计信息后,会包含代码和目录信息。

代码语言:javascript
复制
if (COVERAGE)
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -coverage")
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -lgcov")
endif ()

动态库分析如图所示

小结

在CMake编译,删除目录时,不仅按照目录需要删除对应CMakeLists和cmake.dir中目录信息,还需要删除cmake.targets中动态库信息。

感谢几位同事一起解决探索该问题,经验供参考,以上。

作者:通爸 链接:https://www.jianshu.com/p/c3ae8cd18408 來源:简书

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-12-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 DevOps时代 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 问题说明
  • 问题处理
    • 故障初次诊断
    • 故障分析
    • 问题的转机
    • 问题的复现
    • 小结
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档