2016-07-15 2 views
0

Мы выполняем кучу автоматических тестов против полностью развернутого веб-приложения Java (в дополнение к модульному тестированию) и хотели бы отслеживать коды этих тестов. Приложение написано на Java и работает на Tomcat. В настоящее время мы используем Cobertura для отслеживания охвата наших модульных тестов, поэтому я хотел бы придерживаться Cobertura. Я измерил нашу войну и могу генерировать отчеты из файла coberura.ser, но он всегда показывает 0% охвата.Cobertura показывает 0% покрытия для инструментальной WAR в Tomcat

Вот шаги, которые я отслеживаю:

  1. Построить баночку и войну в обычном процессе (не Инструментирование). Наши классы приложений упаковываются в файл jar, который затем помещается в lib-менеджер войны, которую мы развертываем.
  2. Распакуйте как кувшин, так и войну
  3. Восстановить снова, но на этот раз уроки классов.
  4. Скопируйте инструментальные классы в каталог распакованных контейнеров. Я делаю это, потому что инструменты не выводят файлы классов для вещей, у которых нет исполняемого кода (например, интерфейсов).
  5. Постройте банку из каталога распакованных контейнеров
  6. Добавить новую инструментальную банку и cobertura.jar в каталог lib из распакованного каталога войны и построить войну с этим.
  7. Добавить новую инструментальную войну и coberturaFlush.war в каталог Tomcat WebApps
  8. Добавить cobertura.ser (который был создан во время инструментовки) в TOMCAT каталог бен
  9. Start Tomcat
  10. ли материал в приложении
  11. Hit/coberturaFlush/flushCobertura в браузере.
  12. Остановить Tomcat
  13. Использование Cobertura-report.bat для создания отчета из файла cobertura.ser

Вот что я пытался до сих пор:

  • Я подтвердил файлы класса в банке имеют ссылки на cobertura, поэтому я уверен, что они инструментаризованы.
  • Я использую coberturaFlush.war, потому что я получаю кучу ошибок NoClassDefFound, когда останавливаю приложение, так что он не выглядит так, как будто он работает правильно. Это, кажется, общая проблема, и coberturaFlush кажется разумным обходным решением.
  • Я уверен, что Cobertura использует правильный .ser-файл. Когда Tomcat начинается, я вижу, что этот файл быстро опускается до 0KB и создается файл cobertura.ser.lock, а затем возвращается к исходному размеру и файл блокировки удаляется. Я вижу, что то же самое происходит, когда я называю flushCobertura, а также когда закрываю Tomcat.
  • Я также пытался генерировать отчеты с .ser-файлом после того, как я вызвал флеш, но прежде чем остановить Tomcat, и это тоже не сработало.

Я что-то не хватает? Любая идея, почему Cobertura всегда говорит о покрытии 0%?

Заранее спасибо.

ответ

0

Я думаю, вы можете быть в «JAR hell». Я была такая же проблема, и смог обойти его:

  1. Не включить файл cobertura.jar в среде WebAPP
  2. Do скопировать файл cobertura.jar в Справочник по общей библиотеке Tomcat

coberturaFlush ищет lib на уровне Tomcat; имея еще один экземпляр внутри веб-приложения, счетчики для webapp являются отдельными от общих счетчиков Tomcat.

Другая альтернатива, не самая лучшая, но она работает, заключается в том, чтобы ваш webapp вызывал метод saveGlobalProjectData, как указано в Cobertura FAQ. Оба метода работали для меня, но поскольку я не хотел добавлять какой-либо специальный код в свое приложение, я выбрал первый.

Смежные вопросы