首页 > 解决方案 > 在 docker 中分发黄瓜 junit5 测试

问题描述

我有一个在天蓝色构建和发布管道上运行的黄瓜项目。

我已经安装了 docker 和 docker-compose,我可以使用docker-seleniumthrough打开容器和网格docker-compose

我想分发黄瓜测试,有点像这里解释的。但在那个链接中,它被解释为使用testng,我正在使用junit5黄瓜。结合我们对junit5中黄瓜并行性的了解,我将如何实现这一点,特别是链接的以下部分?

@Parameters({"Port"})
@BeforeClass
public void initiateDriver(String Port) throws MalformedURLException {
            if(Port.equalsIgnoreCase("9001"))
    {
        driver = new RemoteWebDriver(new URL("http:localhost:4444/wd/hub"), DesiredCapabilities.chrome());
        driver.manage().window().maximize();
    }
    else if(Port.equalsIgnoreCase("9002")){
        driver = new RemoteWebDriver(new URL("http:localhost:4444/wd/hub"), DesiredCapabilities.firefox());
        driver.manage().window().maximize();
    }
}

据我了解,如果我提到cucumber.execution.parallel.enabled=truejunit-platform.properties它会在每个功能文件中并行运行,我如何在port下面提到实现

  1. 在一个容器中运行每个功能
  2. 有没有办法将不同功能文件的每个场景分布在单独的容器中?

标签: cucumbercucumber-jvm

解决方案


通常你会让你的 CI 运行一个测试矩阵。这个测试矩阵已经可以并行运行不同的作业。矩阵中的每个作业都可以执行所有测试或一部分测试。您可以使用标签来包含或排除对某些作业配置的某些测试。这可确保浏览器和操作系统的特定问题立即显现出来。

这也稍微简化了问题。当您不使用不同的浏览器类型启动 Selenium Grid 时,您不必找到一种聪明的方法来将每个测试连接到正确的浏览器。

相反,您每个作业只需使用一种浏览器类型启动 Selenium Grid。网格启动后,每个作业都可以使用多个远程 Web 驱动程序并行运行测试。然后,您所要做的就是确保您的测试不会尝试使用更多的浏览器,然后网格可用。这可以通过设置一些配置参数来完成:

cucumber.execution.parallel.enabled=true
cucumber.execution.parallel.config.strategy=fixed
cucumber.execution.parallel.config.fixed.parallelism=4 

您必须获取这些配置参数才能执行测试。一种方法是使用 maven 配置文件,但还有许多其他方法可以做到这一点:

        <profile>
            <id>parallelism</id>
            <build>
                <plugins>
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-failsafe-plugin</artifactId>
                        <configuration>
                            <properties>
                                <configurationParameters>
                                cucumber.execution.parallel.enabled=true
                                cucumber.execution.parallel.config.strategy=fixed
                                cucumber.execution.parallel.config.fixed.parallelism={env.CONCURRENT_TESTS}
                                </configurationParameters>
                            </properties>
                        </configuration>
                    </plugin>
                </plugins>
            </build>
        </profile>

你可以像这样把它绑在一起:

test:
  stage: test
  script:
    - ./start-selenium-grid $BROWSER $CONCURRENT_TESTS
    - mvn test -Pparallelism
  parallel:
    matrix:
      - OS: Windows
        OS_VERSION: 10
        BROWSER: [Chrome, Firefox, Edge]
        CONCURRENT_TESTS: 4
      - OS: OS X
        OS_VERSION: Big Sur
        BROWSER: [Chrome, Firefox, Edge, Safari]
        CONCURRENT_TESTS: 2

所以总结一下。首先为不同的浏览器并行运行构建作业。然后在每个作业中,针对多个 Web 驱动程序并行运行测试。


推荐阅读