Вопрос

Я переношу пару проектов из сборки ant в сборку maven.Сервером сборки является и останется Hudson.

У меня возникли проблемы с записью покрытия кода в Хадсоне с помощью cobertura из-за тесты запускаются и дважды регистрируют проблему.

Проект является многомодульным, и было бы неплохо, хотя и не обязательно, иметь агрегированный вывод данных о покрытии кода.

В общем, решение, которое я ищу, должно:

  • запустите автоматические тесты для всех модулей и запишите результаты однажды;
  • отображение покрытия кода отдельного модуля в Гудзоне;
  • быть легко сконфигурированным один раз для всего проекта, не в каждом модуле.

Решение может быть основано на Cobertura, или Emma, или любом другом инструменте покрытия кода java.


Обновить:Выполнение тестов с Эммой по-прежнему дублирует результаты, и нет никаких merge возможности, так что на самом деле это невозможно использовать при многомодульных сборках.

Это было полезно?

Решение

Гидролокатор это очень классный инструмент, который легко интегрируется с Hudson, мне действительно нравится его организация с помощью многомодульных проектов.Вы должны попробовать

альтернативный текст http://sonar.codehaus.org/wp-content/uploads/2009/08/dashboard.png

Другие советы

Это немного халтурно, но подход, который я использую, заключается в использовании модифицированная версия плагина Maven cobertura (который является доступно из их репо).Он предоставляет целевое значение cobertura: generate-report, так что вы можете вставить cobertura: instrument и cobertura: generate-report в свой жизненный цикл до и после запуска тестов соответственно.Это даст вам нужные данные о покрытии без дублирования выполнения / записи теста.

Основная проблема заключается в том, что все плагины Maven coverage, не относящиеся к clover, с которыми я сталкивался, построены вокруг идеи запуска тестов с покрытием отдельно от выполнения основного теста в жизненном цикле Maven.Это, очевидно, приводит к двум наборам выполняемых тестов.Если вы используете проект freestyle, вы получите записанный только один набор тестов (поскольку даже при двух выполнениях тестов имеется только одна копия выходных данных теста), но тип проекта Maven фактически перехватывает выполнение Maven mojo и записывает выходные данные теста во время выполнения теста, а не все сразу в конце сборки, как это делают проекты freestyle.У этого есть множество преимуществ, но у него также есть довольно вопиющий недостаток, заключающийся в том, что один тест, выполняемый дважды, засчитывается как два теста.

Тем не менее, хотя я видел веские аргументы в пользу запуска тестов как для неинструментированного, так и для инструментального кода, я предпочитаю запускать тесты только один раз для инструментального кода - не только из-за проблем Maven / Hudson, но и потому, что, когда у вас есть тесты, которые занимают 45 минут, кажется откровенно глупым запускать их дважды для получения одного и того же результата.

Роберт,

У меня тоже была эта проблема, и я обнаружил, что Hudson не создает двойной отчет, если вы настраиваете проект как проект freestyle, а не как проект Maven2.Вы действительно теряете часть приятности существования проекта maven2, но для нас это была сделка, которую мы должны были совершить.

Джефф

Мы используем проекты в свободном стиле, и у нас нет этой проблемы, поэтому, как уже указывалось, это может быть источником вашей проблемы.

Чтобы обеспечить функции слияния, мы создали наш собственный репозиторий артефактов (мы не используем Maven).В конце каждой сборки мы копируем файл cobertura.ser в общий сетевой ресурс, переименовывая его в процессе.У нас есть задание консолидированного просмотра, которое копирует все файлы cobertura и файлы исходного кода (еще один артефакт сборки, скопированный в общий сетевой ресурс) в локальный каталог сборки и генерирует отчет Cobertura.

Отсутствие стандартного хранилища артефактов в Hudson немного расстраивает, но это имеет смысл, учитывая, что авторы обычно используют Maven для этих нужд.Наш процесс сборки выполняется на нескольких серверах, поэтому мы не можем просто использовать относительные пути к другим каталогам заданий.

Обратите внимание, мы делаем то же самое для других показателей:результаты тестов, JavaNCSS и т.д.и присоединился либо с помощью правильных инструментов, либо с помощью какого-то пользовательского кода.

Мы используем тот же репозиторий для традиционных артефактов сборки:Библиотеки DLL, JARS, установочные скрипты.

Смотрите SD Java Test Coverage для инструмента с чрезвычайно низкими накладными расходами и приятным графическим интерфейсом.Я не уверен, что понимаю вашу проблему "запуска дважды", но если вы дважды выполнили (одни и те же детерминированные) тесты с помощью SD tools, вы получите одни и те же данные о тестовом покрытии, например, его идемпотент.Если ваши тесты недетерминированы, вы получите два разных тестовых запуска, но эти инструменты легко объединяют результаты нескольких запусков в единую общую сводку.

Они также обрабатывают чрезвычайно большие приложения и довольно хорошо обрабатывают многопоточные приложения (небольшие временные разрывы могут сделать ответ немного неточным в теории, но на практике это просто не проблема).

Рассматривали ли вы Клевер Атласиана?

У maven-clover2-плагина появилась новая цель: clover2:настройка который просто обработает ваши тесты, не разветвляя жизненный цикл и не запуская тесты дважды.

Вы бы определили цели для участия в гонке в Хадсоне следующим образом:

mvn clover2:setup verify clover2:aggregate clover2:clover

Maven-clover2-plugin можно абсолютно бесплатно использовать в течение 30 дней.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top