Я пытаюсь включить Maven плагин cucumber-jvm-parallel-plugin в мой Огурцы-JVM кода, и я бегу в некоторых проблем ... Я думаю, что я настроил мой pom.xml
правильно, но мои огурцы функции по-прежнему запускаются один за другим, а не параллельно.Как запустить параллельные функции cucumber-jvm? (С использованием Maven огуречный-JVM-параллельно-плагин)
Как настроить мой pom.xml, чтобы мои функции огурца выполнялись параллельно? У меня есть некоторые файлы функций, которые блокируют выполнение, и я не хочу ждать их завершения, чтобы начать тестирование других функций.
Я последовал за две обучающие программы, и не могу найти, где я неправильно, или если ожидается, что это:
- https://opencredo.com/test-automation-concepts-parallel-test-execution/
- http://automationrhapsody.com/running-cucumber-tests-in-parallel/
Структура
Вот мой Структура программы:
├── features/
│ └── api/
│ ├── 006-Email.feature
│ └── 999-Login.feature
├── results/
│ └── api-json.json
└── src/
└── java/
├── pom.xml
├── src/
│ └── test/
│ └── java/
│ └── com/
│ └── mycompany/
│ └── commonapps/
│ └── queuemanager/
│ ├── Globals.java
│ ├── GmailHelper.java
│ ├── HttpDeleteWithBody.java
│ ├── JsonHelper.java
│ ├── RequestHelper.java
│ ├── RunApiTest.java
│ ├── ThreadedSteps.java
│ └── UserHelper.java
└── steps/
└── com/
└── mycompany/
└── commonapps/
└── queuemanager/
├── GivenSteps.java
├── Setup.java
├── ThenSteps.java
└── WhenSteps.java
Maven Pom Logic
Как я настроил мой POM выглядит следующим образом:
скопировать
../../features/api/
на мой путь сборки, используя Maven Resources Plugin<build> <resources> <resource> <directory>../../features/api/</directory> </resource> </resources> </build>
Я говорю cucumber-jvm-parallel-plugin, что мой
features
теперь находятся наtarget/classes/active/
, потому что я думаю,../../features/api/
был скопирован вtarget/
, поэтомуtarget/active/
должен содержать файлы.feature
.. думаю.<plugin> <groupId>com.github.temyers</groupId> <artifactId>cucumber-jvm-parallel-plugin</artifactId> ... <configuration> ... <featuresDirectory>${project.build.directory}/classes/active/</featuresDirectory> ... </configuration> </plugin>
Затем, после того, как я бегу
maven test
все.feature
файлы затем компилируется вtarget/test-classes/Parallel**IT.class
. Один для каждого файла.Так что я говорю maven-surefire-plugin для запуска всех файлов
<include>**/Parallel*IT.class</include>
, которые являются файлами функций, созданных cucumber-jvm-parallel-plugin.<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <executions> <execution> <id>acceptance-test</id> <phase>integration-test</phase> <goals> <goal>test</goal> </goals> <configuration> <forkCount>5</forkCount> <reuseForks>true</reuseForks> <includes> <include>**/Parallel*IT.class</include> </includes> </configuration> </execution> </executions> </plugin>
Полный pom.xml
И мой ПОМ.XML является:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.mycompany.commonapps</groupId>
<artifactId>e2e-server</artifactId>
<version>0.0.1-SNAPSHOT</version>
<dependencies>
...
</dependencies>
<build>
<!-- COPY RESOURCES TO TARGET/ -->
<resources>
<!-- copies features to target: "${project.build.directory}/classes/active/" -->
<resource>
<directory>../../features/api/</directory>
</resource>
</resources>
<!-- RUN EACH CUCUMBER FEATURE FILE AS A FORK -->
<plugins>
<plugin>
<groupId>com.github.temyers</groupId>
<artifactId>cucumber-jvm-parallel-plugin</artifactId>
<version>1.2.1</version>
<executions>
<execution>
<id>generateRunners</id>
<phase>generate-test-sources</phase>
<goals>
<goal>generateRunners</goal>
</goals>
<configuration>
<glue>com.mycompany.commonapps.queuemanager</glue>
<outputDirectory>${project.build.directory}/generated-test-sources</outputDirectory>
<featuresDirectory>${project.build.directory}/classes/active/</featuresDirectory>
<cucumberOutputDir>${project.build.directory}</cucumberOutputDir>
<format>json</format>
<!--<strict>true</strict>
<monochrome>true</monochrome>
<useTestNG>false</useTestNG>
<namingScheme>simple</namingScheme>-->
<parallelScheme>FEATURE</parallelScheme>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<!-- RUN ALL CLASSES CREATED BY cucumber-jvm-parallel-plugin IN PARALLEL -->
<executions>
<execution>
<id>acceptance-test</id>
<phase>integration-test</phase>
<goals>
<goal>test</goal>
</goals>
<configuration>
<forkCount>5</forkCount>
<reuseForks>true</reuseForks>
<includes>
<include>**/Parallel*IT.class</include>
</includes>
</configuration>
</execution>
</executions>
</plugin>
<!-- ADD ../../STEPS/ TO THE SOURCE -->
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>build-helper-maven-plugin</artifactId>
<version>1.7</version>
<executions>
<execution>
<id>add-source</id>
<phase>generate-sources</phase>
<goals>
<goal>add-source</goal>
</goals>
<configuration>
<sources>
<source>steps/</source>
<source>src/test/java/</source>
</sources>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
Огурцы Runner
И мой огурец работает класс выглядит следующим образом:
@RunWith(Cucumber.class)
@CucumberOptions(plugin={"pretty","json:../../results/api-json.json"}, glue={"com.mycompany.commonapps.queuemanager"}, features={"../../features/api/active"})
public class RunApiTest {
}
Выход
Когда я бегу mvn test
, я получаю следующее:
...
[INFO] ------------------------------------------------------------------------
[INFO] Building e2e Server Tests 0.0.1-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[WARNING] The artifact org.apache.commons:commons-io:jar:1.3.2 has been relocated to commons-io:commons-io:jar:1.3.2
[INFO]
[INFO] --- build-helper-maven-plugin:1.7:add-source (add-source) @ e2e--server ---
[INFO] Source directory: /media/ifc-dev-1/ESD-ISO/e2e-/src/java/steps added.
[INFO] Source directory: /media/ifc-dev-1/ESD-ISO/e2e-/src/java/src/test/java added.
[INFO]
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ e2e--server ---
[WARNING] Using platform encoding (UTF-8 actually) to copy filtered resources, i.e. build is platform dependent!
[INFO] Copying 7 resources
[INFO] Copying 2 resources
[INFO] Copying 7 resources
[INFO]
[INFO] --- maven-compiler-plugin:3.2:compile (default-compile) @ e2e--server ---
[INFO] Changes detected - recompiling the module!
[WARNING] File encoding has not been set, using platform encoding UTF-8, i.e. build is platform dependent!
[INFO] Compiling 12 source files to /media/ifc-dev-1/ESD-ISO/e2e-/src/java/target/classes
[INFO] /media/ifc-dev-1/ESD-ISO/e2e-/src/java/src/test/java/com/mycompany/commonapps/queuemanager/GmailHelper.java: /media/ifc-dev-1/ESD-ISO/e2e-/src/java/src/test/java/com/mycompany/commonapps/queuemanager/GmailHelper.java uses unchecked or unsafe operations.
[INFO] /media/ifc-dev-1/ESD-ISO/e2e-/src/java/src/test/java/com/mycompany/commonapps/queuemanager/GmailHelper.java: Recompile with -Xlint:unchecked for details.
[INFO]
[INFO] --- cucumber-jvm-parallel-plugin:1.2.1:generateRunners (generateRunners) @ e2e--server ---
[INFO] Adding /media/ifc-dev-1/ESD-ISO/e2e-/src/java/target/generated-test-sources to test-compile source root
[INFO]
[INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ e2e--server ---
[WARNING] Using platform encoding (UTF-8 actually) to copy filtered resources, i.e. build is platform dependent!
[INFO] skip non existing resourceDirectory /media/ifc-dev-1/ESD-ISO/e2e-/src/java/src/test/resources
[INFO]
[INFO] --- maven-compiler-plugin:3.2:testCompile (default-testCompile) @ e2e--server ---
[INFO] Changes detected - recompiling the module!
[WARNING] File encoding has not been set, using platform encoding UTF-8, i.e. build is platform dependent!
[INFO] Compiling 10 source files to /media/ifc-dev-1/ESD-ISO/e2e-/src/java/target/test-classes
[INFO] /media/ifc-dev-1/ESD-ISO/e2e-/src/java/src/test/java/com/mycompany/commonapps/queuemanager/GmailHelper.java: /media/ifc-dev-1/ESD-ISO/e2e-/src/java/src/test/java/com/mycompany/commonapps/queuemanager/GmailHelper.java uses unchecked or unsafe operations.
[INFO] /media/ifc-dev-1/ESD-ISO/e2e-/src/java/src/test/java/com/mycompany/commonapps/queuemanager/GmailHelper.java: Recompile with -Xlint:unchecked for details.
[INFO]
[INFO] --- maven-surefire-plugin:2.17:test (default-test) @ e2e--server ---
[INFO] Surefire report directory: /media/ifc-dev-1/ESD-ISO/e2e-/src/java/target/surefire-reports
-------------------------------------------------------
T E S T S
-------------------------------------------------------
Running com.mycompany.commonapps.queuemanager.RunApiTest
....
*Tests run one by one properly*
...
Tests run: 31, Failures: 2, Errors: 0, Skipped: 0
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 02:40 min
[INFO] Finished at: 2016-11-10T15:49:11-08:00
[INFO] Final Memory: 20M/261M
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-surefire-plugin:2.17:test (default-test) on project e2e--server: There are test failures.
[ERROR]
[ERROR] Please refer to /media/ifc-dev-1/ESD-ISO/e2e-/src/java/target/surefire-reports for the individual test results.
[ERROR] -> [Help 1]
[ERROR]
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR]
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoFailureException
Кто-нибудь видит, что я сделал неправильно?
Больше отладочные
- огурец JVM-параллельно-плагина
outputDirectory
является получения создана правильно и содержит кучу параллельных ** IT.class файлов - огурец JVM -parallel-plugin's
featuresDirectory
является получает доступ правильно. - огурец JVM-параллельно-плагина
cucumberOutputDir
НЕ получения создана на всех после сборки.
Я предлагаю вам запустить Maven с помощью опций -X и, возможно, -e, чтобы получить дополнительную информацию из вашей сборки. Сделайте mvn -h, чтобы получить все доступные опции. Также стоит отметить, что огурец не является потокобезопасным и не поддерживает параллелизм. Сценарии могут работать или не работать, если они выполняются параллельно. –
Спасибо @ThomasSundberg, я попробую, что – Kayvar
я бы предложил посмотреть [фабрика сценариев QAF Gherkin] (https://qmetry.github.io/qaf/latest/gherkin_client.html) – user861594