【问题标题】:How to run cucumber jvm test scenarios in parallel using Maven and courgette?如何使用 Maven 和 courgette 并行运行 cucumber jvm 测试场景?
【发布时间】:2019-04-16 23:34:53
【问题描述】:

我正在尝试基于黄瓜标签在 Maven 中运行一套 Junit 黄瓜功能。我可以让它们按顺序运行,但不能并行运行。 我找到了一个名为 Courgette 的包,它应该可以为我解决这个问题。

但是我无法运行测试,我查看了 github 的示例 maven 项目,它在 Cucumber.class 中运行良好,但在 courgette 中出现错误。

任何帮助将不胜感激。

我在 pom 中包含以下内容

<repositories>
        <repository>
            <id>jcenter</id>
            <url>https://jcenter.bintray.com/</url>
        </repository>
</repositories>
<dependency>
    <groupId>io.github.prashant-ramcharan</groupId>
    <artifactId>courgette-jvm</artifactId>
    <version>2.4.4</version>
    <type>jar</type>
</dependency>

我正在调用我的跑步者。

import courgette.api.CourgetteOptions;
import courgette.api.CourgetteRunLevel;
import courgette.api.junit.Courgette;
import cucumber.api.CucumberOptions;
import org.junit.runner.RunWith;

@RunWith(Courgette.class)
@CourgetteOptions(
        threads = 1,
        runLevel = CourgetteRunLevel.FEATURE,
        rerunFailedScenarios = false,
        showTestOutput = true,
        cucumberOptions = @CucumberOptions(features="src/test/resources/Features/Online/Regression/",
        plugin={"html:target/OD.html","json:target/OD.json"
                },tags={"@Max"},
                glue="com.Online"
                ))
 public class ONLINE_Regression_RunnerTest {
}

我收到以下错误。

java.lang.IncompatibleClassChangeError: Implementing class

    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClass(ClassLoader.java:763)
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
    at java.net.URLClassLoader.defineClass(URLClassLoader.java:467)
    at java.net.URLClassLoader.access$100(URLClassLoader.java:73)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:368)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:362)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:361)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:335)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    at cucumber.runtime.io.ResourceLoaderClassFinder.loadClass(ResourceLoaderClassFinder.java:38)
    at cucumber.runtime.io.ResourceLoaderClassFinder.getDescendants(ResourceLoaderClassFinder.java:26)
    at cucumber.runtime.Reflections.instantiateSubclasses(Reflections.java:28)
    at cucumber.runtime.Runtime.loadBackends(Runtime.java:99)
    at cucumber.runtime.Runtime.<init>(Runtime.java:66)
    at courgette.runtime.CourgetteFeatureLoader.createRuntime(CourgetteFeatureLoader.java:60)
    at courgette.runtime.CourgetteFeatureLoader.<init>(CourgetteFeatureLoader.java:30)
    at courgette.api.junit.Courgette.<init>(Courgette.java:39)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
    at org.junit.internal.builders.AnnotatedBuilder.buildRunner(AnnotatedBuilder.java:104)
    at org.junit.internal.builders.AnnotatedBuilder.runnerForClass(AnnotatedBuilder.java:86)
    at org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:59)
    at org.junit.internal.builders.AllDefaultPossibilitiesBuilder.runnerForClass(AllDefaultPossibilitiesBuilder.java:26)
    at org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:59)
    at org.junit.internal.requests.ClassRequest.getRunner(ClassRequest.java:33)
    at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:49)
    at com.intellij.rt.execution.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:47)
    at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:242)
    at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:70)

【问题讨论】:

    标签: java maven junit cucumber


    【解决方案1】:

    请注意,Cucumber-jvm 从 v4.x 开始提供并行选项

    【讨论】:

    • 感谢您的帮助,我现在已经解决了这个问题。啊编码的乐趣。因此,为了获得不同浏览器的并行测试选项,我可以为每个浏览器创建一个运行器。有了我要运行的黄瓜标签?
    【解决方案2】:

    通过将依赖项移动到我的 pom 顶部,我能够消除冲突。 似乎与测试 ng 依赖项存在冲突。

    【讨论】:

      【解决方案3】:

      有 N 种方式(下面提到)可以实现并行执行,最可取的方式之一是从 V 4.0.0 开始使用 Cucumber(特别是当我们必须仅在多个上实现并行执行时)浏览器不在多个操作系统上)

      1. Cucumber-JVM-Parallel-Plugin
      2. 测试NG
      3. 硒网格
      4. 码头工人
      5. 小胡瓜-JVM

      为了实现 4.0.0,请使用下面的黄瓜依赖集以及 Maven 配置,我们也将实现依赖注入。

       <dependency>
                  <groupId>io.cucumber</groupId>
                  <artifactId>cucumber-java</artifactId>
                  <version>4.2.3</version>
              </dependency>
      
              <dependency>
                  <groupId>io.cucumber</groupId>
                  <artifactId>cucumber-junit</artifactId>
                  <version>4.2.3</version>
              </dependency>
      
              <dependency>
                  <groupId>junit</groupId>
                  <artifactId>junit</artifactId>
                  <version>4.12</version>
              </dependency>
      
              <dependency>
                  <groupId>io.cucumber</groupId>
                  <artifactId>datatable</artifactId>
                  <version>1.1.12</version>
              </dependency>
      
              <dependency>
                  <groupId>io.cucumber</groupId>
                  <artifactId>cucumber-testng</artifactId>
                  <version>4.2.3</version>
              </dependency>
      
              <dependency>
                  <groupId>io.cucumber</groupId>
                  <artifactId>cucumber-picocontainer</artifactId>
                  <version>4.2.3</version>
              </dependency>
      

      Maven Surefire 配置 -

          <plugin>
              <groupId>org.apache.maven.plugins</groupId>
              <artifactId>maven-surefire-plugin</artifactId>
              <version>${maven-surefire.plugin.version}</version>
              <configuration>
                  <parallel>methods</parallel>
                  <threadCount>1</threadCount>
                  <reuserForks>false</reuserForks>
                  <testFailureIgnore>true</testFailureIgnore>
                  <redirectTestOutputToFile>true</redirectTestOutputToFile>
                  <includes>
                      <include>**/*RunCukeTest.java</include>
                  </includes>
              </configuration>
          </plugin>   
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-07-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多