当前位置: 首页 > 知识库问答 >
问题:

Cucumber 6 JUnit 5 Spring并行场景执行

闻人修平
2023-03-14

我一直在阅读大量的文档、帖子和文章,据说在单个功能文件中并行运行场景的开箱即用解决方案是不可能的。我们可以使用maven-surefire插件在不同的特性文件中并行运行,但不能在场景中运行。

例如,有一个包含场景的功能文件:

Feature: Parallel Scenarios

    Scenario: First
        ...

    Scenario: Second
        ...

    Scenario: Third
        ...

我想在单独的线程中同时运行所有这些场景。

我该如何实现这一点?

共有1个答案

喻元龙
2023-03-14

我使用testNGcourgettejvm在场景级别运行并行测试

import courgette.api.CourgetteOptions;
import courgette.api.CourgetteRunLevel;
import courgette.api.CucumberOptions;
import courgette.api.testng.TestNGCourgette;
import org.testng.annotations.Test;

@Test
@CourgetteOptions(
        threads = 10,
        runLevel = CourgetteRunLevel.SCENARIO,
        rerunFailedScenarios = true,
        rerunAttempts = 1,
        showTestOutput = true,
        reportTitle = "Courgette-JVM Example",
        reportTargetDir = "build",
        environmentInfo = "browser=chrome; git_branch=master",
        cucumberOptions = @CucumberOptions(
                features = "src/test/resources/com/test/",
                glue = "com.test.stepdefs",
                publish = true,
                plugin = {
                        "pretty",
                        "json:target/cucumber-report/cucumber.json",
                        "html:target/cucumber-report/cucumber.html"}
        ))
class AcceptanceIT extends TestNGCourgette {
}

然后使用常规的网络驱动程序配置,我使用的是远程驱动程序

  protected RemoteWebDriver createDriver() throws MalformedURLException {
     //wherever grid hub is pointing. it should work without grid too
    String hubURL = "http://localhost:xxxx/wd/hub";

         ChromeOptions options = new ChromeOptions();
         DesiredCapabilities capabilities = DesiredCapabilities.chrome();
         capabilities.setCapability(ChromeOptions.CAPABILITY, options);
         return (RemoteWebDriver) (driver = new RemoteWebDriver(new URL(hubURL), capabilities));
        
    }

     public RemoteWebDriver getDriver() throws MalformedURLException {
           if (driver == null) {
                         this.createDriver();
           }
            return (RemoteWebDriver) driver;
    }

您可能需要利用这些依赖项

      <dependency>
        <groupId>io.github.prashant-ramcharan</groupId>
        <artifactId>courgette-jvm</artifactId>
        <version>5.11.0</version>
    </dependency>
          <dependency>
      <!-- httpclient dpendendecy is to resolve courgette-jvm error -  NoClassDefFoundError: org/apache/http/conn/ssl/TrustAllStrategy -->        
     <groupId>org.apache.httpcomponents</groupId>
        <artifactId>httpclient</artifactId>
        <version>4.5.10</version>
    </dependency>
      <dependency>
    <groupId>org.testng</groupId>
    <artifactId>testng</artifactId>
    <version>6.14.3</version>
    <scope>test</scope>
</dependency>
      <dependency>
    <groupId>io.cucumber</groupId>
    <artifactId>cucumber-testng</artifactId>
    <version>6.9.1</version>
</dependency>
 类似资料:
  • 使用Cucumber,我们创建了由不同场景组成的不同功能文件。我们记住的一件事是,每个场景都独立于所有其他场景。 问:我们可以对所有的特征文件或场景进行并行执行吗?

  • 我正在使用JavaSelenium和TestNG。我可以使用TestNG并行执行测试。 但现在我已经将cucumber与TestNG集成,但我无法并行执行cucumber场景。我可以使用并行执行两个功能文件,但不能在一个功能文件中并行执行两种场景。 有人知道我们如何在一个功能文件中实现场景的并行执行吗? 请在下面找到我的测试xml文件 请在下面找到我的cucumber跑者课程 请在下面找到我的测试

  • 我有一套为Cucumber-JVM编写的验收测试。为了减少反馈时间,我想并行运行(功能)的场景。如何以最简单、最方便的方式做到这一点? (我更希望能够在Java代码中表达这一点,作为一个常规的JUnit测试/运行程序,即我不希望使用maven-sureFire或maven-故障安全插件来解决一些问题,这将需要(?)之后对Cucumber报告进行旋转和合并。)

  • 我有一个示例项目,其中使用了Maven、TestNg和Cucumber。我使用testrunner类运行测试。 我创建了一个包含两个方案的功能文件,但两个方案都失败了。我有两个具有不同功能文件的测试运行者类 - 1。特征文件指向所有功能,2。指向仅失败的方案。 当我尝试重新运行场景时,它只运行一个场景。 1- 请告知如何执行所有失败的方案。

  • 我尝试在cucumber中执行特性后执行一个脚本来清理数据库。我使用前后挂钩的方式如下: 对于before,我可以避免使用静态变量在每个场景之前调用脚本。但不知道如何为后钩子做: 有没有办法捕获最后一个方案是否已经执行,并且仅在满足该条件时才触发 clearData()?有没有更优雅的方法?