Java: измерение покрытия кода для удаленных тестов сценариев - PullRequest
8 голосов
/ 02 ноября 2009

У нас есть приложение, которое развернуто на JBoss 5.1, JDK 1.6. У нас также есть сценарии, написанные на PowerShell для тестирования. Эти скрипты получают доступ к приложению через веб-сервис. Я хотел бы проверить покрытие кода сценариев. Есть идеи? Большинство инструментов, которые я видел, проверяют JUnit тестовое покрытие, и я не понимаю, как мы можем их использовать.

Ответы [ 4 ]

7 голосов
/ 02 ноября 2009

AFAIK, все инструменты покрытия кода используют одну и ту же концепцию (я опущу часть отчетности и проверки):

  1. Первый инструмент код (то есть разместить маркеры).
  2. Затем запустите тесты для выполнения инструментированного кода (для активации маркеров и сбора данных).

Для второго шага наиболее распространенным вариантом использования является запуск тестов JUnit, но ваши тесты не обязательно должны быть тестами JUnit. На самом деле, они даже не должны быть автоматизированы.

И инструментальный код не нужно выполнять в контексте модульного теста, его можно упаковать в WAR / EAR и развернуть в контейнере (это просто потребует немного больше работы).

Для Кобертуры это то, что мы можем прочитать в Часто задаваемых вопросах :

Использование Cobertura с веб-приложением

У меня есть автоматические тесты, которые используют HttpUnit / HtmlUnit / Empirix / Rational Робот, могу ли я использовать Cobertura?

Да! Процесс немного больше участвует, но концепция та же. Первый инструмент ваш скомпилированный классы. Затем создайте свой военный файл. Затем разверните файл войны в свой сервер приложений (Tomcat, JBoss, WebLogic, WebSphere и т. Д.). Теперь беги ваши тесты.

Когда к вашим классам обращаются, они создаст файл "cobertura.ser" на диск. Возможно, вам придется копать вокруг немного, чтобы найти его. Кобертура ставит это файл в том, что он считает текущий рабочий каталог. типично это каталог, который сервер приложений был запущен с (например, C: \ Tomcat \ bin) Примечание: Этот файл не записан на диск пока сервер приложений не выйдет. Ниже описано, как обойти это.

Теперь, когда вы знаете, где Файл cobertura.ser есть, вы должны измените шаг развертывания, чтобы он перемещает оригинальный cobertura.ser в соответствующий каталог в вашем сервер приложений, а затем перемещает его назад, когда закончил тестирование. Тогда беги Cobertura-отчет.

[...]

Для Эммы, это то, что документация говорит:

3,11. Как использовать EMMA в {WebLogic, Websphere, Tomcat, JBoss, ...}?

Прежде всего, маловероятно, что вы сможете использовать режим «на лету» (emmarun) с полноценным контейнером J2EE. Причина заключается в том, что многие функции J2EE требуют специальной загрузки классов, которая будет происходить за пределами инструментального загрузчика инструментов EMMA. Сервер может работать нормально, но вы, скорее всего, не получите данных покрытия.

Таким образом, правильной процедурой является инструктаж ваших классов перед развертыванием (автономный режим). Оффлайн-инструментарий всегда следует одной и той же последовательности компиляции / инструмента / пакета / развертывания / получения покрытия / генерации отчетов. Выполните следующие действия:

  1. используйте инструмент EMMA instr для инструментов желаемых классов. Это можно сделать на этапе после компиляции перед упаковкой. Однако многим пользователям также удобно позволить EMMA обрабатывать свои банки напрямую (либо на месте, в режиме перезаписи, либо путем создания отдельных инструментированных копий всего в режиме полной копии);
  2. делайте вашу J2EE-упаковку как обычно, но не включайте emma.jar в качестве библиотеки на этом уровне, то есть внутри вашего .war, .ear и т.д .;
  3. найдите, какой JRE используется контейнером, и скопируйте emma.jar в его каталог / lib / ext. Если это невозможно, добавьте emma.jar в путь к классам сервера (для конкретного сервера);
  4. разверните свои инструментированные классы, .jars, .wars, .ears и т. Д. И осуществите / протестируйте свое приложение J2EE с помощью клиентских тестовых сценариев или в интерактивном режиме или любым другим способом, которым вы это делаете;
  5. чтобы получить файл дампа покрытия, у вас есть три параметра, описанные в разделе Какие параметры существуют для управления, когда EMMA создает данные покрытия во время выполнения ?. Настоятельно рекомендуется использовать управляющую команду range.get с инструментом ctl, доступным в v2.1.

Для клевера, проверьте страницу Работа с распределенными приложениями .

2 голосов
/ 02 ноября 2009

Я использую emma инструмент покрытия, интегрированный с фазой сборки проекта модульного тестирования, однако в документации инструмента говорится , что получить покрытие кода в описанной вами ситуации довольно просто.

1 голос
/ 05 мая 2013

Я предлагаю jacoco , так как он не требует изменений исходного кода. Ознакомьтесь с Измерением покрытия кода в (Tomcat) Java-приложениях с помощью жгута GreyBox

0 голосов
/ 02 ноября 2009

Кодовая обложка - отличный инструмент. В вашем случае вы должны использовать интерфейс командной строки , который вы можете включить в существующие скрипты PowerShell.

...