前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >统计c++服务的接口测试用例覆盖率

统计c++服务的接口测试用例覆盖率

作者头像
用户5521279
发布2019-06-02 16:26:42
1.8K0
发布2019-06-02 16:26:42
举报
文章被收录于专栏:搜狗测试搜狗测试
背景

最近想统计一个c++的server 的http接口的对代码的覆盖率情况,但之前做的覆盖率统计都是Unittest的覆盖率,而且一般都是统计非daemon程序的,查了一下,daemon也可以使用gcov+lcov来生成覆盖率信息,简单记录了一下;

准备

damon进程与可执行进程不同的地方是需要注册一个gcov_flush的触发条件,一般通过注册信号量的方式实现,例子是ctrl+C时触发__gcov_flush;

代码语言:javascript
复制
extern "C" void __gcov_flush();void cs(int n){ signal(SIGINT, cs);if(n==SIGINT){__gcov_flush();std::cout<<"\n你按下了ctrl+c"<<std::endl;}}

然后在main函数的开始处注册;

代码语言:javascript
复制
void cs(int n);std::cout<<"ab"<<std::endl;signal(SIGINT, cs);
编译

在MakeFile里的编译选项设置处增加参数:-lgcov -fprofile-arcs -ftest-coverage; set(CMAKE_CXX_FLAGS_DEBUG “${CMAKE_CXX_FLAGS_DEBUG} -lgcov -fprofile-arcs -ftest-coverage”)

cmake -DCMAKE_BUILD_TYPE=Debug make 会在CMakeFiles里产生相关工程的.gcno和.o文件

运行

运行程序,后执行接口测试case,按下CTRL+C 触发gcov_flush方法,生成.gcda文件; 当然要做成自动化触发的话可以在执行完接口测试case后,使用kill -SIGINT [pid] 来给进程一个ctrl+C的信号量

生成覆盖率统计文件info

使用lcov工具生成,可以yum安装; lcov –directory . –capture –output-file demo.info

  • –directory . 会将当前目录下(包括文件夹内)的gcda文件一起打包进info
生成html

使用genhtml工具通过覆盖率文件生成展示页面 使用genhtml –o result demo.info 会生成名为result的文件夹,文件夹内包含index.html,可打开查看具体覆盖率统计

点击函数名,可查看具体函数及行覆盖情况

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

本文分享自 搜狗测试 微信公众号,前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 背景
  • 准备
  • 编译
  • 运行
  • 生成覆盖率统计文件info
  • 生成html
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档