gpt4 book ai didi

maven - 如何并行运行我的 cucumber-jvm 功能? (使用maven使用cucumber-jvm-parallel-plugin)

转载 作者:行者123 更新时间:2023-12-01 22:46:55 26 4
gpt4 key购买 nike

我正在尝试合并一个 Maven 插件 cucumber-jvm-parallel-plugin进入我的 Cucumber-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的方式如下:

  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

我的 pom.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>

cucumber 运行者

我的 cucumber 运行类(class)如下所示:

@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

有人看出我做错了什么吗?

<小时/>

更多调试信息

  • cucumber-jvm-parallel-plugin 的 outputDirectory 正在正确创建并包含一堆并行**IT.class文件
  • cucumber-jvm-parallel-plugin 的 featuresDirectory 正在正确访问。
  • cucumber-jvm-parallel-plugin 的 cucumberOutputDir 根本没有在构建后被创建

最佳答案

我终于开始工作了!为了使测试并行运行,我必须执行以下操作:

  1. 我将 maven-surefire-plugin execution 标记中的一些字段移至 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 现在正在运行该节目,我必须删除我的 cucumber runner 类。我是这样注释掉的:

    /*
@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 就无法正常工作。

关于maven - 如何并行运行我的 cucumber-jvm 功能? (使用maven使用cucumber-jvm-parallel-plugin),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40539248/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com