Использование vsperfmon для получения покрытия кода для службы REST, работающей в IIS

Я пытаюсь получить показатели покрытия кода для службы ASP.NET REST (которая использует файл global.asax), работающей в IIS. Я выполнил следующие основные шаги:

  1. Установите переменную среды, используя "VSPerfClrEnv /globaltraceon" (затем перезагрузите компьютер) (я также пробовал /globalsampleon)
  2. Инструментируйте библиотеки DLL для покрытия кода, используя "vsinstr –coverage", и я делаю это для 5 библиотек, которые меня интересуют
  3. Запустите профилировщик, используя "VSPerfCmd /start: охват /output:cc.coverage /CS / пользователь: Все"
  4. Запустите службу в IIS 10 1703, используйте диспетчер задач, чтобы записать PID для w3wp.exe
  5. Присоедините профилировщик к сервису, используя "VSPerfCmd /attach:"
  6. Запускать тесты из Visual Studio '17 Enterprise Test Explorer для службы
  7. Используйте "VSPerfCmd /detach"
  8. Используйте "VSPerfCmd /shutdown"

Но затем, когда я открываю созданный файл cc.coverage, только одна или две из DLL (это не согласовано) имеют результаты покрытия, и тесты абсолютно выполняли бы код во всех 5 DLL. Я делаю что-то неправильно или пропускаю шаг? Спасибо!

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. Не уверен, является ли это основной причиной вашей проблемы или нет, но это может быть связано с тем, что, похоже, очистка буфера не происходит точно в вашем сценарии. Очистка буфера для каждого модуля требуется для того, чтобы получить данные о покрытии из сеанса - если все вещи не завершаются должным образом, это может привести к тому, что буферы не смогут очистить свои данные.

Другие вопросы по тегам