Статьи

Разделение покрытия кода с Maven, Sonar и Jacoco

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

Для этого я продолжаю использовать Maven, добавляя Sonar и Jacoco для обеспечения покрытия кода. Вы можете запустить приведенный ниже пример, но вам нужно будет прочитать первую статью здесь, чтобы понять его. http://johndobie.blogspot.com/2011/06/seperating-maven-unit-integration-tests.html

1.1 Пример структуры

Здесь у нас есть типичная структура maven и наша новая папка  \ src \ integratest \ java

1.2 Запуск примера

Полный код размещен на Google Code. Используйте следующие команды, чтобы проверить и запустить его.

svn co https://designbycontract.googlecode.com/svn/trunk/sonar
cd sonar
mvn –Psonar,it clean install sonar:sonar

Вам нужно запустить сонар. Инструкции по установке можно найти здесь. http://docs.codehaus.org/display/SONAR/Install+Sonar

Перейдите в веб-интерфейс гидролокатора и нажмите «Настроить виджеты», чтобы добавить виджет ИТ-покрытия . Вам также нужно будет добавить плагин Jacoco.

Вы можете увидеть сборку Jenkins здесь:

http://ec2-75-101-221-43.compute-1.amazonaws.com:8080/job/maven-sonar-jaccoco/

Вы можете увидеть сонар построить здесь

http://ec2-75-101-221-43.compute-1.amazonaws.com:9000/dashboard/index/1

1.3 Результаты выполнения примера

  • Испытания в стандартной тестовой структуре maven проводятся, как обычно, на этапе модульных испытаний.
  • Тесты в каталогеtesttest выполняются на этапе тестирования интеграции.
  • Классы тестов и результаты помещаются в отдельный каталог

Отчеты о тестировании Jacoco помещаются в каталог / target / охват-отчетов

В Sonar покрытие модульного теста отображается в одном виджете, а покрытие интеграционного теста — в другом.

2.0 Как это работает?

Основные шаги заключаются в следующем. Детали для каждого ниже.

 

  • Запустите жизненный цикл интеграционных тестов maven с включенным покрытием Jacoco для модульных и интеграционных тестов.
  • Запустите Sonar, указывая на результаты покрытия.
  • Поместите все это в профиль, чтобы им было удобно пользоваться.

2.1 Выполнение  тестов с Jacoco

Сначала мы определим каталоги для файлов покрытия jacoco.

<coverage.reports.dir>
  ${basedir}/target/coverage-reports
</coverage.reports.dir>
<sonar.jacoco.reportPath>
  ${coverage.reports.dir}/jacoco-unit.exec
</sonar.jacoco.reportPath>
<sonar.jacoco.itReportPath>
  ${coverage.reports.dir}/jacoco-it.exec
</sonar.jacoco.itReportPath>
<sonar.jacoco.jar>
  ${basedir}/lib/jacocoagent.jar
</sonar.jacoco.jar>

Затем мы запускаем модульные тесты, запустив стандартный плагин surefire с агентом Jacoco, указывающим на $ {sonar.jacoco. reportPath} . Это используется для хранения результатов покрытия кода модульного теста.

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>2.7.2</version>
    <configuration>
    <b><argLine>          
       -javaagent:${sonar.jacoco.jar}=destfile=${sonar.jacoco.reportPath}       
    </argLine></b>
    <test>**/*.java</test>
    </configuration>
</plugin>

Для интеграционных тестов мы используем отказоустойчивый плагин и указываем агенту Jacoco на $ {sonar.jacoco. itReportPath} . Это используется для хранения результатов покрытия кода интеграционного теста.

<plugin>
  <artifactId>maven-failsafe-plugin</artifactId>
  <version>2.8</version>
  <configuration>         
    <argLine>
      -javaagent:${sonar.jacoco.jar}=destfile=${sonar.jacoco.itReportPath}
    </argLine>
   <testClassesDirectory>
      ${integrationOutputDirectory}
   </testClassesDirectory>
   <reportsDirectory>
     ${integrationOutputDirectory}/failsafe-reports
   </reportsDirectory>
   <test>**/*.java</test>
   <additionalClasspathElements>
     <additionalClasspathElement>
       ${integrationSourceDirectory}/resources</additionalClasspathElement>
     </additionalClasspathElements>
   </configuration>
   <executions>
     <execution>
       <goals>
          <goal>integration-test</goal>
       </goals>
     </execution>
  </executions>
</plugin>

Когда они будут запущены, они создадут следующие 2 файла покрытия.

Бегущий сонар

Мы используем стандартную цель sonar: sonar, но сначала компилируем и запускаем наши тесты. Это приведет к выполнению модульных и интеграционных тестов, как описано выше.

Следующий параметр говорит Sonar использовать jacoco в качестве плагина покрытия кода по умолчанию

<sonar.core.codeCoveragePlugin>jacoco</sonar.core.codeCoveragePlugin>

 

Затем мы указываем Sonar повторно использовать созданные файлы покрытия.

<sonar.dynamicAnalysis>reuseReports</sonar.dynamicAnalysis>

Затем мы запускаем весь процесс, выполнив следующую команду Maven

mvn –Psonar,it clean install sonar:sonar

Это дает результаты, описанные выше в разделе 1.3. Результаты выполнения примеров

2.3 Использование профиля

Профиль сонара объединяет все эти части в одну единицу многократного использования. Полный профиль здесь. https://designbycontract.googlecode.com/svn/trunk/sonar/pom.xml

2.4 Следующие шаги

Вы можете посмотреть мультимодульный пример того же метода здесь: http://johndobie.blogspot.com/2011/06/maven-multi-module-with-sonar-and.html

От http://johndobie.blogspot.com/2011/06/seperating-test-code-coverage-with.html