使用vsperfmon获取IIS中运行的REST服务的代码覆盖率

时间:2019-02-14 18:27:42

标签: visual-studio code-coverage vsperfmon

我正在尝试获取在IIS中运行的ASP.NET REST服务(使用global.asax文件)的代码覆盖率指标。我已遵循以下基本步骤:

  1. 使用“ VSPerfClrEnv / globaltraceon”(然后重新启动计算机)设置环境变量(我也尝试过/ globalsampleon)
  2. 使用“ vsinstr –coverage”指示用于代码覆盖的DLL,我对我感兴趣的5个DLL执行此操作
  3. 使用“ VSPerfCmd / start:coverage /output:cc.coverage / CS / user:Everyone”启动分析器
  4. 在IIS 10 1703中启动服务,使用任务管理器记录w3wp.exe的PID。
  5. 使用“ VSPerfCmd / attach:”将事件探查器附加到服务上
  6. 针对该服务从Visual Studio '17 Enterprise Test Explorer运行测试
  7. 使用“ VSPerfCmd / detach”
  8. 使用“ VSPerfCmd / shutdown”

但是,当我打开创建的cc.coverage文件时,只有一个或两个DLL(不一致)具有覆盖率结果,并且测试绝对会在所有5个DLL中执行代码。我是在做错什么还是错过了一步?谢谢!

1 个答案:

答案 0 :(得分:0)

根据https://blogs.msdn.microsoft.com/tfssetup/2015/08/13/steps-to-check-the-code-coverage-of-a-web-application-via-command-line/,您应该在iisreset /STOP之后vsperfcmd /shutdown之前发出vsperfcmd /detach命令。不知道这是否是导致问题的根本原因,但可能是因为您的情况似乎并未如实地发生缓冲区刷新。为了从会话中获取覆盖数据,需要对每个模块进行缓冲区刷新-如果未正确关闭所有对象,则可能导致缓冲区无法刷新其数据。