如何解决在 docker 中分发 cucumber junit5 测试
我有一个在 azure 构建和发布管道上运行的黄瓜项目。
我已经安装了 docker 和 docker-compose,并且能够使用 docker-selenium
到 docker-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
以实现以下
- 在一个容器中运行每个功能
- 有没有办法将不同功能文件的每个场景分布在单独的容器中?
解决方法
通常情况下,您会让 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
测试的任何解决方案,因此我将 testNG
与 courgette-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 举报,一经查实,本站将立刻删除。