Запуск интеграционных тестов с плагином Cobertura Maven

Мне не удается заставить плагин Cobertura запускать интеграционные тесты в Maven. Ближайший ответ на этот вопрос, который я нашел, - http://jira.codehaus.org/browse/MCOBERTURA-86. Однако проблема остается открытой ошибкой. Я попробовал конфигурацию, предложенную Стево 03 апреля 2009 года, она не сработала.

Мой POM

<reporting>
    <plugins>
        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>cobertura-maven-plugin</artifactId>
            <version>2.3-SNAPSHOT</version>
            <reportSets>
            <reportSet>
                <reports>
                    <report>cobertura-integration</report>
                </reports>
            </reportSet>
            </reportSets>               
        </plugin>   
    </plugins>
</reporting>

который, кстати, в точности совпадает с фрагментом конфигурации, предоставленным Stevo.


person Candy Chiu    schedule 02.02.2010    source источник
comment
Как вы управляете своими ИТ? Используете отдельный модуль? Используете maven-failsafe-plugin? В отдельном профиле?   -  person Julien H. - SonarSource Team    schedule 22.03.2011
comment
где вы разместили свои интеграционные тесты (например, src / it / java или src / test / java) и как попытаться выполнить тесты?   -  person Lars Tackmann    schedule 17.04.2011


Ответы (6)


На мой взгляд, плагин maven cobertura имеет два больших недостатка. У него нет единственной цели отчета, все модульные тесты снова будут запускаться в режиме безотказной работы. Он создает покрытие кода только для модульных тестов.

Сейчас я использую плагин maven JaCoCo. JaCoCo повторно использует надежные и / или отказоустойчивые отчеты для создания покрытия кода из модульного и / или интеграционного теста. Кроме того, JaCoCo имеет хорошую интеграцию с Jenkins. Вот пример, в котором JaCoCo использует надежные модульные тесты и тесты отказоустойчивой интеграции.

    <build>
    <plugins>
        <!-- Unit tests -->
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <version>2.16</version>
        </plugin>

        <!-- Integration tests -->
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-failsafe-plugin</artifactId>
            <version>2.16</version>
            <executions>
                <execution>
                    <phase>integration-test</phase>
                    <goals>
                        <goal>integration-test</goal>
                        <goal>verify</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>

        <!--
            The JaCoCo plugin generates a report about the test coverage. In contrast to the cobertura plugin
            JaCoCo can be configured to generate code coverage for integration tests. Another advantage of JaCoCo
            is that it reports only, cobertura executes all unit tests again (beside the surefire plugin).
        -->
        <plugin>
            <groupId>org.jacoco</groupId>
            <artifactId>jacoco-maven-plugin</artifactId>
            <version>0.6.4.201312101107</version>
            <executions>
                <execution>
                    <id>jacoco-prepare-agent</id>
                    <goals>
                        <goal>prepare-agent</goal>
                    </goals>
                </execution>
                <execution>
                    <id>jacoco-prepare-agent-integration</id>
                    <goals>
                        <goal>prepare-agent-integration</goal>
                    </goals>
                </execution>
                <execution>
                    <id>jacoco-report</id>
                    <goals>
                        <goal>report</goal>
                    </goals>
                </execution>
                <execution>
                    <id>jacoco-integration</id>
                    <goals>
                        <goal>report-integration</goal>
                    </goals>
                </execution>
                <execution>
                    <id>jacoco-check</id>
                    <goals>
                        <goal>check</goal>
                    </goals>
                    <configuration>
                        <rules />
                    </configuration>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>
person user3119291    schedule 19.12.2013
comment
Хороший совет. Немного посмотрев, я также понял, как создать отчет о покрытии кода, который объединяет выходные данные модульных и интеграционных тестов с JaCoCo, используя цель слияния. - person JeroenHoek; 07.01.2014
comment
Я так и не понял, как заставить JaCoco игнорировать мелочи. Ты знаешь как? - person jeremyjjbrown; 12.03.2014
comment
Используйте ant с maven-antrun-plugin, см. Мой ответ. Кроме того, не всегда возможны JVM-агенты JaCoCo. Остановка JVM (я думаю, что это единственный способ получить отчет о покрытии) - это не всегда то, что вы хотите или можете сделать. У Cobertura есть coberturaFlush.war для очистки данных покрытия и поддержания работы JVM. - person Dormouse; 09.04.2014

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

 <build>
   <plugins>
     <plugin>
       <groupId>org.codehaus.mojo</groupId>
         <artifactId>cobertura-maven-plugin</artifactId>
         <version>2.5.1</version>
         <configuration>
           <formats>
             <format>xml</format>
           </formats>
         </configuration>
         <executions>
           <execution>
             <id>cobertura-check</id>
             <phase>verify</phase>
             <goals>
               <goal>cobertura</goal>
             </goals>
           </execution>
         </executions>
       </plugin>

Таким образом, это работает для меня как чары.

person flob    schedule 15.08.2011

После некоторого исследования была обнаружена рабочая конфигурация, указанная в http://jira.codehaus.org/browse/MCOBERTURA-86 Не забудьте вызвать это с помощью

 mvn clean deploy -PbuildWithIntegrationTestCoverage

        <profile>
        <!-- Build with IntegrationTestcoverage => instrument classes with cobertura before integrationtests starts. -->
        <id>buildWithIntegrationTestCoverage</id>
        <activation>
            <property>
                <name>buildWithIntegrationTestCoverage</name>
                <value>true</value>
            </property>
        </activation>
        <build>
            <plugins>
                <plugin>
                    <groupId>org.codehaus.mojo</groupId>
                    <artifactId>cobertura-maven-plugin</artifactId>
                    <version>2.5.2</version>
                    <executions>
                        <execution>
                            <id>instrument-classes</id>
                            <phase>package</phase>
                            <goals>
                                <goal>instrument</goal>
                            </goals>
                        </execution>
                    </executions>
                </plugin>
                <!-- Add cobertura as dependency to the jetty-plugin (required for instrumented classes) -->
                <plugin>
                    <groupId>org.mortbay.jetty</groupId>
                    <artifactId>maven-jetty-plugin</artifactId>
                    <dependencies>
                        <dependency>
                            <groupId>org.codehaus.mojo</groupId>
                            <artifactId>cobertura-maven-plugin</artifactId>
                            <version>2.5.2</version>
                            <type>jar</type>
                        </dependency>
                    </dependencies>
                </plugin>
            </plugins>
        </build>
    </profile>
person Ramesh    schedule 01.10.2012

Для тех, кто сталкивается с этим вопросом через Google - плагин cobertura-maven-plugin начал поддерживать Интеграционные тесты в версии 2.7, опубликованной в 2015 году.

Цитируя их сайт:

До версии 2.6 был доступен только один отчет: cobertura, который давал вам отчет о покрытии для ваших модульных тестов. Поскольку он был всего один, настраивать его никак не пришлось.

Начиная с версии 2.7 был добавлен новый отчет: cobertura-integration-test, который дает вам отчет о покрытии для ваших интеграционных тестов. [..]

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

Если вы, как и я, запускали отчет cobertura, используя mvn cobertura:cobertura, вам нужно будет выполнить mvn cobertura:cobertura-integration-test, чтобы получить интеграционные тесты. Вы можете проверить подробности на его странице руководства.

person eis    schedule 28.12.2016

Я обнаружил, что использование maven-antrun-plugin для многомодульных проектов, включая интеграцию и тесты пользовательского интерфейса, является лучшим решением. Я использовал этот пост, чтобы получить цели Ant и оттуда пошли. Теперь у нас есть отчеты о покрытии кода для каждого модуля и объединенный отчет, содержащий покрытие всех тестов.

person Dormouse    schedule 09.04.2014

Я получил интеграционные тесты, работающие с Maven 3.0.3 и cobertura-maven-plugin 2.5.1, настроив maven-failsafe-plugin для работы на этапе test:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-failsafe-plugin</artifactId>
    <version>2.12</version>
    <executions>
        <execution>
            <phase>test</phase>
            <goals>
                <goal>integration-test</goal>
                <goal>verify</goal>
            </goals>
        </execution>
    </executions>
</plugin>
person sworisbreathing    schedule 17.02.2012
comment
Это противоречит цели наличия отказоустойчивого плагина: если вы запускаете отказоустойчивый плагин на этапе тестирования, вы можете просто проводить свои тесты в качестве обычных тестов (выбранных с помощью surefire), которые выполняются на этапе тестирования. - person mmalmeida; 14.03.2012