Как указать отдельную цель 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 следует использовать:
- для модульных тестов: maven-surefire-плагин
- для принятия/интеграционные тесты: 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 это то, что вы не можете изменить. Это означает, что вам нужно иметь стратегию именования для ваших тестов, чтобы отделить их друг от друга.