Как запустить два профиля в одной команде maven?

У меня есть файл pom.xml с плагином surefire:test и два профиля для запуска разных тестовых модулей/тестов. Я пытаюсь запустить их с помощью команды «mvn surefire: test -PfirstProfile, secondProfile». Но здесь выполняется только второй профиль, записанный в pom.xml. Эта команда рекомендуется веб-сайтом apache maven. Вот мой файл pom.xml:

 <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>${maven.plugin.surefire.version}</version>
    <configuration>
      <forkMode>always</forkMode>
      <!-- <testFailureIgnore>true</testFailureIgnore> -->
      <failIfNoTests>false</failIfNoTests>
      <skipTests>${skipTests}</skipTests>
      <runOrder>${testRunOrder}</runOrder>
    </configuration>
    </execution>
    </executions>
  </plugin>
  <profile>
  <id>firstProfile</id>
  <properties>
        <skipTests>false</skipTests>
  </properties>
  <build>
      <plugins>
          <plugin>
              <groupId>org.apache.maven.plugins</groupId>
              <artifactId>maven-surefire-plugin</artifactId>
              <version>${maven.plugin.surefire.version}</version>
              <configuration>
                  <includes>
                    <include>**/AbcTest.java</include>
                  </includes>
              </configuration>
          </plugin>
      </plugins>

  </build>
</profile>
<profile>
  <id>SecondProfile</id>
  <properties>
        <skipTests>false</skipTests>
  </properties>
  <build>
      <plugins>
          <plugin>
              <groupId>org.apache.maven.plugins</groupId>
              <artifactId>maven-surefire-plugin</artifactId>
              <version>${maven.plugin.surefire.version}</version>

              <configuration>
                  <includes>
                      <include>**/xyzTest.java</include>                      
                  </includes>
              </configuration>
          </plugin>
      </plugins>

  </build>
</profile>

так как мне запустить оба этих профиля вместе? Я также пробовал идентификаторы выполнения. Но это не работает.


person user2786573    schedule 13.11.2014    source источник


Ответы (1)


Попробуйте изменить конфигурацию maven-surefire-plugin в обоих профилях следующим образом:

   <build>
      <plugins>
          <plugin>
              <groupId>org.apache.maven.plugins</groupId>
              <artifactId>maven-surefire-plugin</artifactId>
              <version>${maven.plugin.surefire.version}</version>
              <configuration>
                  <includes combine.children="append">
                    <include>**/AbcTest.java</include>
                  </includes>
              </configuration>
          </plugin>
      </plugins>

  </build>

Кроме того, не рекомендуется выбирать модульные тесты по профилям. Если эти тесты являются интеграционными, вам следует вместо этого использовать maven-failsafe-plugin.

person khmarbaise    schedule 13.11.2014
comment
@khkhmarbaise По сути, мой первый профиль предназначен для всех модульных тестов, где я включаю **/*Test.java и исключаю **/*IntegrationTest.java. И второй профиль предназначен для всех интеграционных тестов, где я исключаю **/*Test.java и включаю **/*IntegrationTest.java. Эти два профиля я использую в своем сценарии test_runner.sh для запуска модульных тестов и интеграционных тестов, когда разработчики указывают параметр -u или -i соответственно. Но я также хочу запускать как модульные, так и интеграционные тесты, когда разработчик указывает обе опции -u и -i. И именно поэтому я пытался запустить оба профиля в одной команде maven. - person user2786573; 13.11.2014
comment
Продолжая мой комментарий выше. Это приводит к запуску только одного профиля, который является последним в файле pom.xml. Если эта проблема будет решена с помощью упомянутого вами maven-failsafe-plugin, сообщите мне об этом. Или, если у вас есть другое решение, пожалуйста, укажите. И решение Combine.children=append, о котором вы упомянули, у меня не работает. Спасибо за быстрый ответ - person user2786573; 13.11.2014
comment
Если вы работаете с модульными тестами по соглашению об именах /*Test.java или /*TestCase.java или /Test*.java, которые автоматически обрабатываются maven-surefire-plugin. Если вам нравятся интеграционные тесты, вы должны следовать соглашениям об именах и использовать IT*.java, *IT.java или *ITCase.java, которые изначально поддерживаются maven-failsafe-plugin. Если вы следуете соглашениям, вам не нужна конфигурация (парадигма «Конвенция вместо конфигурации»). - person khmarbaise; 13.11.2014