【问题标题】:Selenium4+Junit5 : Infinite browsers are launching while running scripts in Parallel with Selenium 4Selenium 4+Junit 5:无限浏览器在与 Selenium 4 并行运行脚本时启动
【发布时间】:2022-12-18 01:04:01
【问题描述】:

我使用 webdrivermanager = '5.0.3'( Selenium 3.141.5,) + Junit 5 + junit-platform.properties 文件很好地配置和设计了框架来并行运行测试脚本,无缝运行没有任何问题。我能够基于标签和基于包运行脚本。

现在我将 selenium 版本升级到 4.1.2,当我运行单个脚本时它非常好但是当并行运行脚本时无限浏览器正在启动即使线程数在 junit-platform.properties 文件中被限制为 5。

       junit.jupiter.execution.parallel.enabled=false
       junit.jupiter.execution.parallel.mode.default=same_thread
       junit.jupiter.execution.parallel.mode.classes.default=concurrent
       junit.jupiter.execution.parallel.config.strategy=fixed
       junit.jupiter.execution.parallel.config.fixed.parallelism=5

我在构建 gradle 文件中使用下面提到的依赖项。

            repositories {
                jcenter()
                mavenCentral()
            }

            ext {
            //    selenium = '3.141.59'
                webdrivermanager = '5.0.3'

            //    junitJupiterVersion = '5.8.2'
                selenium = '4.1.2'
                seleniumJupiterVersion  = '4.0.1'
                junitJupiterVersion = '5.7.0'
            }
            dependencies {


                compile("org.junit.jupiter:junit-jupiter:${junitJupiterVersion}")
                compile("org.seleniumhq.selenium:selenium-java:${selenium}")
            //    compile("io.github.bonigarcia:selenium-jupiter:${seleniumJupiterVersion}")

            //    compile("org.seleniumhq.selenium:selenium-java:${selenium}")
            //    compile("io.github.bonigarcia:webdrivermanager:${webdrivermanager}")
            //    testImplementation "org.seleniumhq.selenium:selenium-chrome-driver:${selenium}"
            //    testImplementation "org.seleniumhq.selenium:selenium-firefox-driver:${selenium}"
            //    testImplementation "org.seleniumhq.selenium:selenium-ie-driver:${selenium}"
            //    testImplementation "org.seleniumhq.selenium:selenium-edge-driver:${selenium}"
            //    testImplementation "org.seleniumhq.selenium:selenium-safari-driver:${selenium}"
            //    testImplementation "org.seleniumhq.selenium:selenium-remote-driver:${selenium}"
            //    testImplementation "org.seleniumhq.selenium:selenium-support:${selenium}"
            //    testImplementation('org.junit.jupiter:junit-jupiter:5.5.1')
            //    testImplementation 'org.hamcrest:hamcrest:2.1'
            //    testImplementation 'org.hamcrest:hamcrest-library:2.1'
            //    testCompile("org.junit.jupiter:junit-jupiter-api:5.6.2")
            //    testRuntime 'org.junit.jupiter:junit-jupiter-engine:5.6.2'
            //    testRuntime("org.junit.platform:junit-platform-launcher:1.4.2")
            //    testCompile('io.github.bonigarcia:selenium-jupiter:4.0.1')
                compile group: 'io.qameta.allure', name: 'allure-junit5', version: '2.11.0'
                compile group: 'org.apache.pdfbox', name: 'pdfbox', version: '2.0.16'
                implementation group: 'org.apache.logging.log4j', name: 'log4j-api', version: '2.17.1'
            //    implementation group: 'org.apache.logging.log4j', name: 'log4j-core', version: '2.17.1'
                compile group: 'io.qameta.allure', name: 'allure-gradle', version: '2.7.0'
                compile 'org.apache.maven.plugins:maven-surefire-plugin:2.21.0'
            //    compile('com.assertthat:selenium-shutterbug:1.5')
                compile 'org.slf4j:slf4j-nop:1.7.25'
                implementation group: 'javax.mail', name: 'mail', version: '1.4.7'
            //    implementation group: 'javax.mail', name: 'javax.mail-api', version: '1.6.2'
            //    runtimeClasspath group: 'javax.mail', name: 'javax.mail-api', version: '1.6.2'
            //    compile group: 'net.lightbody.bmp', name: 'browsermob-core', version: '2.1.4'
            //    compile group: 'org.postgresql', name: 'postgresql', version: '42.2.14'
                compile group: 'org.mongodb', name: 'mongo-java-driver', version: '3.12.4'
                compile group: 'ru.yandex.qatools.ashot', name: 'ashot', version: '1.5.4'
            //    implementation group: 'org.json', name: 'json', version: '20201115'
                implementation group: 'com.googlecode.json-simple', name: 'json-simple', version: '1.1.1'
            //    testImplementation group: 'org.junit.platform', name: 'junit-platform-launcher', version: '1.7.2'
            //    testImplementation group: 'org.junit.platform', name: 'junit-platform-runner', version: '1.7.2'
            //    testImplementation group: 'org.junit.platform', name: 'junit-platform-surefire-provider', version: '1.3.2'

            }

项目组件:Selenium 4 +Junit5 +junit-platform 属性文件

非常感谢任何解决此问题的帮助。

【问题讨论】:

    标签: selenium junit webdriver-manager junit-jupiter selenium4


    【解决方案1】:

    抱歉,如果问题仍然相关,当然可以。 首先,你可以标记你所有的测试类带有 @ResourceLock("SYSTEM_OUT") 注释。 see details here 及以下关于同步的内容。 但是,这可能无济于事。然后您可以另外实现 ParrallelExecutionConfiguration 和 ParallelExecutionConfigurationStrategy 并将此实现写入 junit-platform.properties 文件中,例如

    junit.juipiter.execution.parallel.config.custom.class=base.ParallelStrategy

    其中“base”- 包和“ParallelStrategy”- 上述接口的实现(我只返回线程值的数量)。 您还必须明确说明自定义策略:

    junit.juipiter.execution.parallel.config.strategy=自定义

    为什么它适用于 Selenium3+,但在第四个时就停止了——我不知道。但是这些步骤为我解决了与您相同的问题。

    【讨论】:

    • 我的类文件都没有使用 @ResourceLock("SYSTEM_OUT") 你能给我这些 ParrallelExecutionConfiguration 和 ParallelExecutionConfigurationStrategy 的例子吗
    【解决方案2】:

    有一些组件可能会导致此问题。

    这两个问题都建议定义一个限制 MaxPoolSize 的自定义策略。这有效,但仅适用于 JDK9 及更高版本。在ForkJoinPoolHierarchicalTestExecutorService中创建的ForkJoinPool在JDK8和JDK9+中是不同的,只有后者使用了策略MaxPoolSize。

    因此,如果您使用的是 JDK8,我认为唯一的选择是使用 ResourceLocks。否则,定义自定义策略。

    有关几乎相同的问题,请参阅我的 SO 帖子 maven-failsafe-plugin not honoring fixed parallelism in JUnit5

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-01-10
      • 1970-01-01
      • 2020-09-28
      • 1970-01-01
      • 1970-01-01
      • 2023-04-06
      • 2016-10-11
      相关资源
      最近更新 更多