【问题标题】:Running TestNG suite in parallel with Selenium Grid与 Selenium Grid 并行运行 TestNG 套件
【发布时间】:2016-09-17 16:47:34
【问题描述】:

我想使用 Selenium Grid 多次运行同一个 TestNG 套件(用于负载测试)。 例如,我有一个带有 3 个不同浏览器的节点。 Selenium Grid 允许在多个线程中运行多个不同测试套件,但我不知道如何在不同浏览器的多个线程中运行相同测试套件。

可能还有其他一些方法可以并行运行整个测试套件多次。

【问题讨论】:

  • 你是如何触发你的测试的?
  • 我使用 TestNG 注释(没有 testng.xml)和 maven-surefire-plugin 配置:classes10
  • 只是好奇 - 为什么不拥有多个工作?将浏览器名称作为参数发送? - maven.apache.org/surefire/maven-surefire-plugin/examples/…
  • 是的,多个作业可以解决这个任务。但据我了解,它需要更多资源和一些额外的工具,如 Jenkins 或 JMeter。如果可能的话,我只是在寻找一个使用 Maven + TestNG 的方便且易于配置的解决方案。

标签: java multithreading selenium testng selenium-grid


【解决方案1】:

最新版本的 TestNG 现在为您提供了一个名为 IAlterSuiteListener 的新侦听器,您现在可以使用它直接克隆 XmlSuite 对象(XmlSuite 代表 XML 中的套件标签)。因此,也许您可​​以使用该侦听器并通过您的侦听器根据您的需要复制套件“n”次。

【讨论】:

  • 在发布问题的答案时,您真的不需要“@”。
  • 克里希南,感谢您的建议。我设法在运行时复制测试,就像您在此处的示例一样:github.com/cbeust/testng/blob/master/src/test/java/test/… 我还尝试克隆整个 XmlSuite 对象并将其添加到套件列表中。它可以工作,但我无法在单独的线程中运行重复的套件。假设我们有一个套件 A 并创建一个克隆 A1。当我运行测试时,尽管配置 classes10.,套件仍会连续触发
  • Max:你可以通过surefire插件使用以下条目org.apache.maven.pluginsmaven-surefire-plugin2.19.1src/test/resources/testng.xmlfalsesuitethreadpoolsize2
  • 谢谢你,克里希南!在 IAlterSuiteListener 中克隆 XmlSuite 对象并结合 参数得到了预期的结果。
【解决方案2】:

我使用 TestNG 的 @Factory@DataProvider 在每个浏览器中同时和多次运行我的测试,如下所示:

基础测试类:

public abstract class AbstractIntegrationTest extends TestNG { 

    @DataProvider(name = "environment", parallel = true)
    public static Object[][] getEnvironments() { return PropertiesHelper.getBrowsers() ; }

    public AbstractIntegrationTest(final Environments environments) {

        this.environment = environments;
    }

    @BeforeMethod(alwaysRun = true)
    public void init(Method method) {

        this.selenium = new Selenium();
        this.propertiesHelper = new PropertiesHelper();

        this.driver = selenium.getDriverFor(environment);

        login(driver);

        LOGGER.log(Level.INFO, "### STARTING TEST: " + method.getName() +"["+environment.toString()+"] ###");
    } 
}

测试类:

public class ITlogin extends AbstractIntegrationTest {

    @Factory(dataProvider = "environment")
    public ITlogin(Environments environments) {
        super(environments);
    }

    @Test
    public void whenLoginWithValidUser_HomePageShouldBeVisible() {
    }
}

【讨论】:

    【解决方案3】:

    假设您的实现是线程安全的,并且您指向远程驱动程序中的网格 url。你可以在你的 testNG 配置文件中配置它。有多种配置方法。下面是最简单的例子:

    <suite name="Sample suite" verbose="0" parallel="methods" thread-count="3">
    ...
    </suite>
    

    您可以参考TestNG Documentation了解更多详情。

    您可以在 xml 套件文件中多次重复 xml 测试并并行运行测试。例如:

    <suite name="Sample suite" verbose="0" parallel="tests">
        <test name="TestonFF">
            <parameter name="driver.name" value="firefoxDriver" />
        </test>
        <test name="TestOnChrome"> <!-- test name must be unique -->
            <parameter name="driver.name" value="chromeDriver" /> 
    <!-- copied above --> 
        </test> 
    </suite>
    

    【讨论】:

    • 是的,它允许并行运行测试。但问题是如何多次调用测试套件。我的测试套件构建为具有依赖测试的复杂场景。我想并行运行整个场景(即套件)多次。我知道有 invocationCount 参数,但它只适用于方法。
    • 您可以通过在 xml 套件文件中多次重复 xml 测试并并行运行测试来使用技巧。例如:
    • 有可能,但我想要动态配置。此外,我有很多套件(配置了注释),不方便将它们中的每一个复制多次。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-04-25
    • 1970-01-01
    • 2020-08-30
    • 2022-01-23
    • 1970-01-01
    • 1970-01-01
    • 2016-07-20
    相关资源
    最近更新 更多