无法通过TestNG Dataprovider并行运行超过10个测试

3

你好,我设计了一个可以并行运行的Selenium测试(25个同时运行)。

@Test(dataProvider = "getData" )
public void multiUserTest(String url, String username, String password)
        throws InterruptedException, IOException, FindFailed {

    DesiredCapabilities capabilities = DesiredCapabilities.chrome();
    capabilities.setBrowserName(prop.getProperty("browserName"));
    capabilities.setPlatform(Platform.WINDOWS);
    RemoteWebDriver driver = new RemoteWebDriver(new URL(prop.getProperty("url")), capabilities);

    WebDriverWait wait = new WebDriverWait(driver, 720); // 12 minutes wait.
    driver.manage().window().maximize();
    driver.manage().timeouts().implicitlyWait(50, TimeUnit.SECONDS);

    try {
        driver.get(url);
        driver.findElement(By.xpath(prop.getProperty("username"))).sendKeys(username);
        driver.findElement(By.xpath(prop.getProperty("password"))).sendKeys(password);
        driver.findElement(By.xpath(prop.getProperty("signin"))).click();
        }catch (Exception e) {
        e.printStackTrace();
    }

我的数据提供者

@DataProvider(parallel = true)
public Object[][] getData() {

    Object data[][] = new Object[25][3];
    // row 1
    data[0][0] = "http:XXXX/login.html";
    data[0][1] = "XXX1@gmail.com";
    data[0][2] = "XX@123";

    // row 2
    data[1][0] = "http:XXXX/login.html";
    data[1][1] = "XXX2@gmail.com";
    data[1][2] = "XX@123";
    ..........


    // row 25
    data[24][0] = "http:XXXX/login.html";
    data[24][1] = "XXX25@gmail.com";
    data[24][2] = "XX@123";

我的XML文件是:

    <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="Suite" parallel="methods"  thread-count="1" data-provider-thread-count="25">
  <test name="Test">
    <classes>
      <class name="XXX.MultiUserGuiTest"/>
    </classes>
  </test> <!-- Test -->
</suite> <!-- Suite -->

现在当我运行上面的测试时,它一次运行10个测试,当第10个测试完成后,下一个10个测试开始执行,然后是5个测试,但是我希望我的测试可以同时启动25个
仅供参考,我添加了一个我的EC2实例的截图。有25个Chrome正在运行,请注意鼠标悬停在Chrome浏览器上方。 enter image description here

在一个网格上,我们购买了亚马逊EC2实例来进行测试。 - eduliant
@naveen 你说的是在你本地机器上,以上设置一次打开了25个并行测试。 - eduliant
是的,我尝试过不使用Selenium概念。只在测试方法中打印值,没有别的操作。我可以同时运行25个线程。 - Naveen Kumar R B
@ paras 我已经尝试过运行 thread-count="1" 或 thread-count="25",甚至完全删除 thread-count,但结果始终相同。 - eduliant
我可以看到除了2个节点之外,所有的节点都有Firefox浏览器,但没有Chrome。在所有25个节点中,您是否正在启动Chrome浏览器?如果是这样,在这种情况下,只有一个机器/节点可用于给定的组合。 - Naveen Kumar R B
显示剩余11条评论
2个回答

3
为了解决这个问题:
@BeforeClass
    public void setupClassName(ITestContext context) {
        context.getCurrentXmlTest().getSuite().setDataProviderThreadCount(100);
        context.getCurrentXmlTest().getSuite().setPreserveOrder(false);
    }

2

您好,我们已经找到了一种方法,可以同时运行我们的25个测试 ** 但我认为这不是标准的做法 **。请提供您的反馈或更好的方法来完成以上场景。

解决方案:我们不再使用数据提供程序,而是完全删除了它,并且使用testng.xml文件中的参数作为参数进行调用。

  @Parameters({"param 1","param 2","param 3","and so on"}) in our test

现在我可以同时看到我的25个节点处于活动状态,并成功执行所有操作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接