2016-11-11 10 views
2

Я пытаюсь включить Maven плагин cucumber-jvm-parallel-plugin в мой Огурцы-JVM кода, и я бегу в некоторых проблем ... Я думаю, что я настроил мой pom.xml правильно, но мои огурцы функции по-прежнему запускаются один за другим, а не параллельно.Как запустить параллельные функции cucumber-jvm? (С использованием Maven огуречный-JVM-параллельно-плагин)

Как настроить мой pom.xml, чтобы мои функции огурца выполнялись параллельно? У меня есть некоторые файлы функций, которые блокируют выполнение, и я не хочу ждать их завершения, чтобы начать тестирование других функций.

Я последовал за две обучающие программы, и не могу найти, где я неправильно, или если ожидается, что это:

Структура

Вот мой Структура программы:

├── 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 выглядит следующим образом:

  1. скопировать ../../features/api/ на мой путь сборки, используя Maven Resources Plugin

    <build> 
        <resources> 
        <resource> 
         <directory>../../features/api/</directory> 
        </resource> 
        </resources> 
    </build> 
    
  2. Я говорю 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> 
    
  3. Затем, после того, как я бегу maven test все .feature файлы затем компилируется в target/test-classes/Parallel**IT.class. Один для каждого файла.

  4. Так что я говорю 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НЕ получения создана на всех после сборки.
+1

Я предлагаю вам запустить Maven с помощью опций -X и, возможно, -e, чтобы получить дополнительную информацию из вашей сборки. Сделайте mvn -h, чтобы получить все доступные опции. Также стоит отметить, что огурец не является потокобезопасным и не поддерживает параллелизм. Сценарии могут работать или не работать, если они выполняются параллельно. –

+0

Спасибо @ThomasSundberg, я попробую, что – Kayvar

+0

я бы предложил посмотреть [фабрика сценариев QAF Gherkin] (https://qmetry.github.io/qaf/latest/gherkin_client.html) – user861594

ответ

0

Я, наконец, получил его на работу! Вот что я должен был сделать, чтобы мои тесты выполняются параллельно:

  1. переместить некоторые поля в maven-surefire-pluginexecution тег в configuration тега. Я переехал этот раздел:

     <forkCount>5</forkCount> 
        <reuseForks>true</reuseForks> 
        <includes> 
         <include>**/*IT.class</include> 
        </includes> 
    
    • Так что мой maven-surefire-plugin теперь выглядит следующим образом:

    <plugin> 
         <groupId>org.apache.maven.plugins</groupId> 
         <artifactId>maven-surefire-plugin</artifactId> 
         <version>2.19.1</version> 
    
         <configuration> 
         <forkCount>5</forkCount> 
         <reuseForks>true</reuseForks> 
         <includes> 
          <include>**/*IT.class</include> 
         </includes> 
         </configuration> 
    
        </plugin> 
    
  2. С cucumber-jvm-parallel-plugin теперь работает шоу, я должен был удалить мой класс огурцов класса. Я прокомментировал это так:

/* 
    @RunWith(Cucumber.class) 
    @CucumberOptions(plugin={"pretty","json:../../results/api-json.json"}, glue={"com.mycompany.commonapps.queuemanager"}, features={"../../features/api/active"}) 
    */ 
    public class RunApiTest { 
    } 

И это все. С Parallel**IT.class, где создавалось, было maven-surefire-plugin, что не работало правильно.

+0

вы можете уточнить https://stackoverflow.com/questions/45436476/parallel-execution-of-features-files-maven-failsafe-plugin-vs-cucumber-jvm-par – vikramvi