在 docker 中分发 cucumber junit5 测试

如何解决在 docker 中分发 cucumber junit5 测试

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

我已经安装了 docker 和 docker-compose,并且能够使用 docker-seleniumdocker-compose 来打开容器和网格

我想分发黄瓜测试,有点像 as explained here 。但是在那个链接中,它使用 testng 进行了解释,而我将 junit5 与黄瓜一起使用。我将如何实现这一点,特别是链接中的以下部分,以及我们对 cucumber parallelism in 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=true ,在 junit-platform.properties 中,它将并行运行每个功能文件,我如何提及 port 以实现以下

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

解决方法

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

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

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

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

您必须将这些 configuration parameters 用于测试执行。一种方法是使用 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,Edge,Safari]
        CONCURRENT_TESTS: 2

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

,

我找不到在场景级别并行化 junit5 测试的任何解决方案,因此我将 testNGcourgette-jvm 一起使用。它开箱即用并在场景级别运行并行测试

只需在黄瓜中包含类似的跑步者类。我的测试进一步使用 RemoteWebdriver 在 selenium 网格上打开多个实例。确保网格已启动并正在运行,并且节点已注册到网格。

import courgette.api.CourgetteOptions;
import courgette.api.CourgetteRunLevel;
import courgette.api.CucumberOptions;
import courgette.api.testng.TestNGCourgette;
import io.cucumber.testng.AbstractTestNGCucumberTests;
import org.testng.annotations.DataProvider;
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 {
}

RemoteWebdriver 配置是

protected RemoteWebDriver createDriver() throws MalformedURLException,IOException {
                   
                 Properties properties = new Properties();                
                ClassLoader loader = Thread.currentThread().getContextClassLoader();                
                  String hubURL = "http://192.168.1.7:65299/wd/hub";
                  System.setProperty("webdriver.gecko.driver","/Users/amit/Desktop/amit/projects/misc/geckodriver");
                 
                    FirefoxProfile profile = new FirefoxProfile();
                    DesiredCapabilities capabilities = DesiredCapabilities.firefox();
                    capabilities.setCapability(FirefoxDriver.PROFILE,profile);
                    capabilities.setPlatform(Platform.ANY);    
                    FirefoxOptions options = new FirefoxOptions();
                    options.merge(capabilities);                 
                   driver.set(new RemoteWebDriver(new URL(hubURL),options));
                   return driver.get();
        }

如果您想使用 docker-compose 打开网格并将测试指向 http://localhost:65299/wd/hub ,请使用它。端口根据以下文件

version: "3"
services:
  selenium-hub:
    image: selenium/hub:3.141.59-20210607
    container_name: selenium-hub
    ports:
      - "65299:4444"

  chrome:
    image: selenium/node-chrome:3.141.59-20210607
    depends_on:
      - selenium-hub
    environment:
      - HUB_HOST=selenium-hub
      - HUB_PORT=4444


  firefox:
    image: selenium/node-firefox:3.141.59-20210607
    depends_on:
      - selenium-hub
    environment:
      - HUB_HOST=selenium-hub
      - HUB_PORT=4444
    deploy:
      mode: replicated
      replicas: 7

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


使用本地python环境可以成功执行 import pandas as pd import matplotlib.pyplot as plt # 设置字体 plt.rcParams[&#39;font.sans-serif&#39;] = [&#39;SimHei&#39;] # 能正确显示负号 p
错误1:Request method ‘DELETE‘ not supported 错误还原:controller层有一个接口,访问该接口时报错:Request method ‘DELETE‘ not supported 错误原因:没有接收到前端传入的参数,修改为如下 参考 错误2:cannot r
错误1:启动docker镜像时报错:Error response from daemon: driver failed programming external connectivity on endpoint quirky_allen 解决方法:重启docker -&gt; systemctl r
错误1:private field ‘xxx‘ is never assigned 按Altʾnter快捷键,选择第2项 参考:https://blog.csdn.net/shi_hong_fei_hei/article/details/88814070 错误2:启动时报错,不能找到主启动类 #
报错如下,通过源不能下载,最后警告pip需升级版本 Requirement already satisfied: pip in c:\users\ychen\appdata\local\programs\python\python310\lib\site-packages (22.0.4) Coll
错误1:maven打包报错 错误还原:使用maven打包项目时报错如下 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources (default-resources)
错误1:服务调用时报错 服务消费者模块assess通过openFeign调用服务提供者模块hires 如下为服务提供者模块hires的控制层接口 @RestController @RequestMapping(&quot;/hires&quot;) public class FeignControl
错误1:运行项目后报如下错误 解决方案 报错2:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project sb 解决方案:在pom.
参考 错误原因 过滤器或拦截器在生效时,redisTemplate还没有注入 解决方案:在注入容器时就生效 @Component //项目运行时就注入Spring容器 public class RedisBean { @Resource private RedisTemplate&lt;String
使用vite构建项目报错 C:\Users\ychen\work&gt;npm init @vitejs/app @vitejs/create-app is deprecated, use npm init vite instead C:\Users\ychen\AppData\Local\npm-
参考1 参考2 解决方案 # 点击安装源 协议选择 http:// 路径填写 mirrors.aliyun.com/centos/8.3.2011/BaseOS/x86_64/os URL类型 软件库URL 其他路径 # 版本 7 mirrors.aliyun.com/centos/7/os/x86
报错1 [root@slave1 data_mocker]# kafka-console-consumer.sh --bootstrap-server slave1:9092 --topic topic_db [2023-12-19 18:31:12,770] WARN [Consumer clie
错误1 # 重写数据 hive (edu)&gt; insert overwrite table dwd_trade_cart_add_inc &gt; select data.id, &gt; data.user_id, &gt; data.course_id, &gt; date_format(
错误1 hive (edu)&gt; insert into huanhuan values(1,&#39;haoge&#39;); Query ID = root_20240110071417_fe1517ad-3607-41f4-bdcf-d00b98ac443e Total jobs = 1
报错1:执行到如下就不执行了,没有显示Successfully registered new MBean. [root@slave1 bin]# /usr/local/software/flume-1.9.0/bin/flume-ng agent -n a1 -c /usr/local/softwa
虚拟及没有启动任何服务器查看jps会显示jps,如果没有显示任何东西 [root@slave2 ~]# jps 9647 Jps 解决方案 # 进入/tmp查看 [root@slave1 dfs]# cd /tmp [root@slave1 tmp]# ll 总用量 48 drwxr-xr-x. 2
报错1 hive&gt; show databases; OK Failed with exception java.io.IOException:java.lang.RuntimeException: Error in configuring object Time taken: 0.474 se
报错1 [root@localhost ~]# vim -bash: vim: 未找到命令 安装vim yum -y install vim* # 查看是否安装成功 [root@hadoop01 hadoop]# rpm -qa |grep vim vim-X11-7.4.629-8.el7_9.x
修改hadoop配置 vi /usr/local/software/hadoop-2.9.2/etc/hadoop/yarn-site.xml # 添加如下 &lt;configuration&gt; &lt;property&gt; &lt;name&gt;yarn.nodemanager.res