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

上一篇 / 下一篇  2019-03-26 11:38:06

  背景
  最近想统计一个c++的server 的http接口的对代码的覆盖率情况,但之前做的覆盖率统计都是Unittest的覆盖率,而且一般都是统计非daemon程序的,查了一下,daemon也可以使用gcov+lcov来生成覆盖率信息,简单记录了一下;
  准备
  damon进程与可执行进程不同的地方是需要**一个gcov_flush的触发条件,一般通过**信号量的方式实现,例子是ctrl+C时触发__gcov_flush;
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函数的开始处**;
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,可打开查看具体覆盖率统计
  点击函数名,可查看具体函数及行覆盖情况

TAG: 软件测试技术 测试用例

 

评分:0

我来说两句

日历

« 2024-04-19  
 123456
78910111213
14151617181920
21222324252627
282930    

数据统计

  • 访问量: 54189
  • 日志数: 43
  • 建立时间: 2019-02-12
  • 更新时间: 2020-08-10

RSS订阅

Open Toolbar