Как запустить индивидуальный тест в целевом тесте интеграции в Maven - PullRequest
38 голосов
/ 21 мая 2009

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

Что я хочу сделать, так это запустить только один тест в integration-test. Я пытался сделать:

mvn -Dtest=<my-test> integration-test

но это не работает. -Dtest запускает только тесты с целью модульного тестирования, а не этап интеграционных испытаний. Вместо этого я попробовал -Dintegration-test=<my-test>, и это было проигнорировано.

Есть ли способ сделать это?


Моя конфигурация:

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-surefire-plugin</artifactId> 
    <executions> 
        <execution> 
            <id>surefire-it</id> 
            <phase>integration-test</phase> 
            <goals> 
                <goal>test</goal> 
            </goals> 
            <configuration> 
                <excludes> 
                    <exclude>none</exclude> 
                </excludes> 
                <includes>
                    <include>**/api/**</include> 
                </includes> 
    ..... 

Ответы [ 6 ]

32 голосов
/ 20 апреля 2011

Если вы используете отказоустойчивый плагин Maven , вы можете запустить один интеграционный тест, задав для свойства it.test полное имя класса теста:

mvn -Dit.test=your.TestCase verify

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

25 голосов
/ 27 июля 2011

В документации Failsafe вы должны указать тест следующим образом:

mvn -Dit.test=BrokenIT verify

Однако -Dit.test , похоже, больше не работает. Скорее, тот же параметр, который использовался для определения теста Surefire, по-видимому, будет работать и для Failsafe. Например:

mvn -Dtest=WorksIT verify

Я подал ошибку ( РЕДАКТИРОВАТЬ: , которая была закрыта как "Невозможно воспроизвести" в 2.12) для исправления документации.

3 голосов
/ 04 сентября 2014

просто добавьте -DfailIfNoTests=false у меня работает с testNG. Как то так:

mvn integration-test -Dtest=aITest -DfailIfNoTests=false
3 голосов
/ 19 ноября 2010

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

    <profile>
        <id>integrationTestSingle</id>
        <build>
            <plugins>
                <plugin>
                    <artifactId>maven-surefire-plugin</artifactId>
                    <executions>
                        <execution>
                            <id>surefire-it</id>
                            <phase>integration-test</phase>
                            <goals>
                                <goal>test</goal>
                            </goals>
                            <configuration>
                                <includes>
                                    <include>**/integration/**/${test}.java</include>
                                </includes>
                                <skipTests>false</skipTests>
                            </configuration>
                        </execution>
                    </executions>
                    <configuration>
                        <argLine>-Xms256M -Xmx768M -XX:MaxPermSize=256M</argLine>
                    </configuration>
                </plugin>

                <plugin>
                    <artifactId>maven-surefire-plugin</artifactId>
                    <executions>
                        <execution>
                            <id>default-test</id>                                
                            <configuration>
                                <skipTests>true</skipTests>
                            </configuration>
                        </execution>
                    </executions>

                </plugin>
            </plugins>
        </build>
    </profile>

Теперь я вызываю maven с профилем интеграцииTestSingle и с -DfailIfNoTests=false -Dtest=NameOfTest, и он не запускает никаких обычных тестов во время обычной фазы «теста», а выполняет только тест NameOfTest во время теста интеграции. фазы.

2 голосов
/ 24 мая 2009

Я не уверен насчет JUnit, но для TestNG стратегия будет состоять в том, чтобы определить XML-файл комплекта только с одним тестом, а затем в вашем POM настроить плагин surefire для его запуска. В вашем POM у вас будет что-то вроде этого (отказ от ответственности, это не проверено):

  <plugin>
    <artifactId>maven-surefire-plugin</artifactId>
    <executions>
      <execution>
        <phase>integration-test</phase>
        <configuration>
          <suiteXmlFiles>
            <suiteXmlFile>single-test.xml</suiteXmlFile>
          </suiteXmlFiles>
        </configuration>
        <goals>
          <goal>run</goal>
        </goals>
      </execution>
    </executions>
  </plugin>

Чтобы настроить файл комплекта, см. http://testng.org/doc/documentation-main.html

0 голосов
/ 30 марта 2013

Просто столкнулся с этим сам. Как-то так у меня сработало:

mvn -Pintegration-test -Dtest=<my-test>

Хитрость заключалась в том, чтобы гарантировать, что тестовая группа была упомянута перед частью -Dtest.

...