2016-11-11 81 views
2

我試圖將Maven插件cucumber-jvm-parallel-plugin到我黃瓜,JVM代碼和正在運行到一些問題......我想我已經正確配置我的pom.xml,但我的黃瓜功能仍然逐一運行,而不是並行如何並行運行我的cucumber-jvm功能? (用黃瓜JVM的並行插件的Maven)

如何配置我的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文件邏輯

我配置我的聚甲醛的方法如下:

  1. 我複製../../features/api/使用我的構建路徑Maven Resources Plugin

    <build> 
        <resources> 
        <resource> 
         <directory>../../features/api/</directory> 
        </resource> 
        </resources> 
    </build> 
    
  2. 我告訴cucumber-jvm-parallel-pluginfeatures現在位於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創建的功能文件。

    ​​

完整的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> 

黃瓜亞軍

我的黃瓜運行的班級是這樣的:

@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 - 並行插件的featuresDirectory正確訪問正確
  • 黃瓜JVM的並行插件的cucumberOutputDir在所有構建後主動創造。
+1

我建議您使用-X或許-e選項來運行Maven以從您的構建中獲取更多信息。做一個mvn -h來獲得所有的選項。值得注意的是,Cucumber不是線程安全的,並且不支持並行性。當他們並行執行時,您的方案可能會或可能不會工作。 –

+0

謝謝@ThomasSundberg,我會嘗試 – Kayvar

+0

我會建議看看[QAF小黃瓜情景工廠](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