0

我正在尝试获取在 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 中执行代码。我做错了什么或错过了一步吗?谢谢!

4

1 回答 1

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 /shutdownvsperfcmd /detach

于 2019-07-17T16:50:38.663 回答