如何并行运行我的jvm特性?(maven使用黄瓜jvm并行插件)

如何并行运行我的jvm特性?(maven使用黄瓜jvm并行插件),maven,cucumber,cucumber-jvm,cucumber-junit,cucumber-java,Maven,Cucumber,Cucumber Jvm,Cucumber Junit,Cucumber Java,我试图将一个maven插件合并到我的JVM代码中,但遇到了一些问题。。。我想我已经正确地配置了我的pom.xml,但是我的cucumber功能仍然在一个接一个地运行,而不是并行运行 如何配置pom.xml以使cucumber功能并行运行?我有一些功能文件会阻止执行,我不想为了开始测试其他功能而等待它们完成 我遵循了两个教程,但没有发现哪里出了问题,或者这是意料之中的: 结构 以下是我的程序结构: ├── features/ │   └── api/ │      ├── 006-Ema

我试图将一个maven插件合并到我的JVM代码中,但遇到了一些问题。。。我想我已经正确地配置了我的
pom.xml
,但是我的cucumber功能仍然在一个接一个地运行,而不是并行运行

如何配置pom.xml以使cucumber功能并行运行?我有一些功能文件会阻止执行,我不想为了开始测试其他功能而等待它们完成

我遵循了两个教程,但没有发现哪里出了问题,或者这是意料之中的:

结构 以下是我的程序结构:

├── 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逻辑 我配置pom的方式如下:

  • 我使用将
    。/../features/api/
    复制到我的构建路径

  • 然后,在我运行
    maven test
    之后,所有
    .feature
    文件都被编译成
    目标/测试类/Parallel**IT.class
    。每个要素文件一个

  • 所以我告诉你并行运行所有的
    **/Parallel*IT.class
    文件,它们是由jvm并行插件创建的特性文件

     <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>
    
    输出 当我运行mvn测试时,我得到以下结果:

    ...
    [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
    
    有人知道我做错了什么吗


    更多调试信息
    • cucumber jvm并行插件的
      outputDirectory
      正在正确创建,并包含一组并行**IT.class文件
    • Cumber jvm并行插件的
      功能目录
      正在被正确访问
    • cucumber jvm并行插件的
      cucumberOutputDir
      在构建之后根本不会被创建

      • 我终于让它开始工作了!以下是我必须做的事情,以使我的测试并行运行:

      • 我将
        maven-surefire-plugin
        execution
        标记中的一些字段移动到
        configuration
        标记。我动议本节:

        5
        真的
        **/*IT.class
        
        • 因此,我的
          maven surefire插件现在看起来如下所示:


        就这样。由于
        Parallel**IT.class
        是在哪里创建的,因此
        maven surefire插件
        工作不正常。

        我建议您使用-X和-e选项运行maven,以从构建中获取更多信息。执行mvn-h以获得所有可用选项。还值得注意的是Cucumber不是线程安全的,并且不支持并行性。在并行执行时,您的场景可能会工作,也可能不会工作。谢谢@ThomasSundberg,我会尝试一下。我建议您先看一看,请澄清您想使用什么并行插件?你为什么不使用maven failsafe插件并行运行每个.feature文件呢?你能澄清一下吗?嘿,Katie,我怎么能让运行者运行节目,而让所有的东西都并行运行呢?如果我们做不到,是什么限制阻止了我们这样做。
         <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>
        
        <?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 {
        }
        
        ...
        [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
        
            <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>