Как указать отдельную цель maven для запуска приемочных тестов (Cucumber)?

У меня есть следующая структура проекта:

MyProject
   --src
   --test
      --acceptance
         --step_definitions
         --features
      --unit

Я хотел бы иметь возможность запускать тесты огурца (в тесте/приемке) отдельно в Maven от модульных тестов, объявленных в тесте/юните, чтобы их можно было запускать в разных планах сборки CI и т. д. Я использую огуречный junit, поэтому «бегуны» для каждого приемочного теста написаны с помощью JUnit.

Это возможно?


person Rich Ashworth    schedule 10.08.2013    source источник


Ответы (2)


Это возможно?

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

Слегка изменили структуру папок для обоих из них, разместив файлы тестов интеграции в стандартное расположение src/it:

MyProject/

  • src/main/java/ (СУТ)
  • src/test/ (unit test code)
    • java/
    • resources/
  • src/it/ (acceptance/integration tests)
    • java/ (steps definitions)
    • resources/ (функциональные файлы)

Более того, по замыслу разные плагины Maven предназначены для модульных и интеграционных тестов:

Вы также должны связать выполнение maven-failsafe-pulgin. Чтобы запускать интеграционные тесты отдельно, вы можете определить новый профиль:

<profiles>
  <profile>
    <id>acceptance-tests</id>
    <build>
      <plugins>
        <plugin>
          <artifactId>maven-failsafe-plugin</artifactId>
          <version>2.12</version>
          <executions>
            <execution>
              <goals>
                <goal>integration-test</goal>
                <goal>verify</goal>
              </goals>
            </execution>
          </executions>
        </plugin>
      </plugins>    
    </build>
  </profile>
</profiles>

Вам также потребуется настроить плагин для поиска дерево каталогов src/it для тестовых случаев.

После этого можно запустить приемочные тесты, используя:

mvn clean verify -Pacceptance-tests

Для полного примера я бы посоветовал вам следовать http://www.weblogism.com/item/334/integration-tests-with-cucumber-jvm-selenium-and-maven

person Peter Butkovic    schedule 11.08.2013
comment
В конце концов решил пойти с Gradle, так как это означало, что мне не нужно изменять структуру, и я также могу разделить приемочные/интеграционные тесты. Это действительно полезно для другого проекта, с которым я вынужден использовать maven. - person Rich Ashworth; 11.08.2013

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

Поскольку у вас есть test/unit для модульных тестов и test/acceptance для приемочных тестов, я предполагаю test/integration для интеграционных тестов.

<profiles>
    <profile>
        <id>acceptance-test</id>
        <build>
            <plugins>
                <plugin>
                    <!-- to run directly: mvn failsafe:integration-test -P acceptance-test -->
                    <artifactId>maven-failsafe-plugin</artifactId>
                    <version>2.12</version>
                    <configuration>
                        <testSourceDirectory>test/acceptance</testSourceDirectory>
                        <includes>
                            <include>**/*Acceptance.java</include>
                        </includes>
                        <excludes>
                            <exclude>**/*IT.java</exclude>
                            <exclude>**/*Test.java</exclude>
                        </excludes>
                    </configuration>
                    <executions>
                        <execution>
                            <goals>
                                <goal>integration-test</goal>
                                <goal>verify</goal>
                            </goals>
                        </execution>
                    </executions>
                </plugin>
            </plugins>
        </build>
    </profile>
</profiles>
<build>
    <plugins>
        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>build-helper-maven-plugin</artifactId>
            <version>1.9.1</version>
            <executions>
                <execution>
                    <id>add-test-source</id>
                    <phase>generate-test-sources</phase>
                    <goals>
                        <goal>add-test-source</goal>
                    </goals>
                    <configuration>
                        <sources>
                            <source>test/unit</source>
                            <source>test/integration</source>
                            <source>test/acceptance</source>
                        </sources>
                    </configuration>
                </execution>
            </executions>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <version>2.12</version>
            <configuration>
                <testSourceDirectory>test/unit</testSourceDirectory>
            </configuration>
        </plugin>
        <plugin>
            <!-- to run directly: mvn failsafe:integration-test -->
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-failsafe-plugin</artifactId>
            <version>2.19.1</version>
            <configuration>
                <testSourceDirectory>test/integration</testSourceDirectory>
            </configuration>
            <!-- execution below can be used, if tests are needed on 
                mvn:integration-test -->
            <executions>
                <execution>
                    <goals>
                        <goal>integration-test</goal>
                        <goal>verify</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>

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

person eis    schedule 13.02.2017