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

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

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

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

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

2 ответов


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

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

немного изменена структура папок для обоих:

MyProject
   --main
      -- src
   --test (unit test classes)
      -- src 
      -- resources       
   --it (acceptance/integration tests)
      -- src (steps definitions)
      -- resources (feature files)
различные плагины maven следует использовать:

кроме того, чтобы обеспечить отдельный запуск, вы можете определить новый профиль:

<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>

приемочные тесты могут быть запущены после этого с помощью:

mvn clean verify -Pacceptance-tests

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


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

так как у вас, кажется, есть 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>

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