如何自动化分析代码覆盖率(How to Use the Code Coverage Analysis Tool)

由于项目CI方面需求,前段时间学习和使用了微软的代码覆盖率(Code Coverage)分析工具,当时着手做时,发现网上资料非常欠缺,遇到了不少坑,在此做个总结,希望能帮到有这方面需求的人。
Code Coverage,代码覆盖率,是CI的需求一部分。微软VS ultimate版本提供了测试Code Coverage的选项,也提供了相应的命令行工具。

使用微软命令行工具分析Code Coverage

如何自动化分析代码覆盖率(How to Use the Code Coverage Analysis Tool)_第1张图片
image
  1. Instrument,可以理解为配备或准备的意思,这一步使用的工具Vsinstr.exe,它需要将被测程序集名称作为参数,主要作用是将需要测量的程序集分块,并插入监听程序,在这个工程中,需要程序集对应的PDB文件。
  2. 开启监听,并收集覆盖率。这一步用到的工具是Vsperfcmd.exe,它会开启一个监听程序Vsperfmon.exe,当Instrumented的程序集被覆盖到时,会Vsperfmon.exe会收到通知。
  3. 运行测试用例。
  4. 使用Vsperfcmd,输入与上面不同的参数,停止监听,生成Code Coverage报告。

遵循这四步的Workflow

  1. 首先安装需要分析Code Coverage的产品
  2. 将PDB拷贝到程序集所在的目录,这里需要注意的是,我们需要分析Code Coverage的程序集有可能并不是都在一个目录,这时,需要我们将PDB文件拷贝到多个地方。
  3. 编写脚本
  • Instrumt
Vsinstr -coverage 
...
Vsinstr -coverage 
  • 开始脚本
VSPerfCmd.exe /start:coverage /output:"*.Coverage"
或
Start vsperfmon -coverage -output:mytestrun.coverage
  • 结束脚本
vsperfcmd –shutdown
  1. 运行开始脚本,这一步做的是Instrumt,并且开始监控
  2. 运行测试用例
  3. 运行结束脚本,这一步的作用是结束监听,并且生成报告

最后值得注意的事项

  1. 在分析Code Coverage的过程中,后台会启动一个VSPerfMon.exed的进程,用于收集Code Coverage信息,只要这个进程结束,收集会终止,所以在这个过程中,关机或者手动关闭这个进程,都会影响分析结果的准确性。
  2. 得到的*.coverage文件是与Instrumented的程序集以及PDB文件相关联的,如果需要保存和转移,微软官网给我们的建议是通过VS转换成XML格式。
  3. Instrument过程中需要程序集的名字作为参数,这意味着,如果我们项目工程增多了,需要对新增加的程序集进行分析,就需要修改脚本。
  4. 第四点值得开发人员注意,微软根据Block的概念计算Code Coverage,而Block的概念是与Instrumented 程序集中的CIL对应的,并不是我们实际的Code,所以我们如果我们从Code文本出发来理解VS中Code Coverage百分比时,往往会比较迷惑。实际上,我们也没有必要这样去做。
  5. Last but not least, 最权威的资料

你可能感兴趣的:(如何自动化分析代码覆盖率(How to Use the Code Coverage Analysis Tool))