0

我有带有集线器和两个节点的 Selenium Grid2。

集线器由以下人员运营:

java -jar selenium-server-standalone-2.32.0.jar -role hub -port 4444

节点由以下人员操作:

java -jar selenium-server-standalone-2.32.0.jar -role node -hub http://10.20.46.171:4444/wd/hub -port 5555

在集线器控制台中,我看到两个节点都已启动并正在运行。

我的 TestNB 配置(testng.xml):

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="Full suite" parallel="classes" thread-count="4">
  <parameter name="hubAddress" value="http://127.0.0.1:4444/wd/hub"></parameter>
  <test verbose="2" name="Full">
    <packages>
      <package name="com.example.tests">
      </package>
    </packages>
  </test>
</suite>

在 com/example/tests 中,我有一个基类 TestBase 和其他 4 个扩展 TestBase 的类

在 TestBase.java 中,我有:

package com.example.tests;
import java.net.MalformedURLException;
import java.net.URL;

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.openqa.selenium.remote.RemoteWebDriver;
import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Parameters;

public class TestBase {

  protected WebDriver driver;

  @BeforeClass
  @Parameters("hubAddress")
  public void startDriver(String hubAddress) throws MalformedURLException {
    driver = new RemoteWebDriver(new URL(hubAddress), DesiredCapabilities.Firefox());
  }

  @AfterClass
  public void stopDriver() {
    driver.quit();
    driver = null;
  }

}

在 Test1.java 中,我有:

package com.example.tests;
import org.testng.annotations.Test;

@Test
public class Test1 extends TestBase {

  public void test1() {
    driver.get("http://www.google.com/");
  }

}

在 Test2.java 中,我有:

package com.example.tests;
import org.testng.annotations.Test;

@Test
public class Test2 extends TestBase {

  public void test2() {
    driver.get("http://www.facebook.com/");
  }

}

在 Test3.java 中,我有:

package com.example.tests;
import org.testng.annotations.Test;

@Test
public class Test3 extends TestBase {

  public void test3() {
    driver.get("http://www.yahoo.com/");
  }

}

在 Test4.java 中,我有:

package com.example.tests;
import org.testng.annotations.Test;

@Test
public class Test4 extends TestBase {

  public void test4() {
    driver.get("http://www.cnn.com/");
  }

}

我用 Ant 运行所有这些。这是一段代码:

   <target name="run-tests" depends="build">
        <testng classpathref="LoadTests.classpath">
            <xmlfileset dir="." includes="testng.xml"/>
        </testng>
    </target>

命令行:

ant run-tests

现在如何工作: Test1 在 Node1 上运行,Test2 在 Node2 上运行(同时)。之后,Test3 在 Node1 上运行,Test4 在 Node2 上运行(同时)。

期望的行为:所有四个测试一次同时运行:两个在一个节点上(例如,Test1、Test3),另外两个在第二个节点上(Test2、Test4)。

问题:我应该进行哪些更改才能使其按预期工作?

4

1 回答 1

1

尝试使用@BeforeMethod 而不是@BeforeClass。我知道这将为每个方法创建一个驱动程序,但我认为这是 @Before*annotation* 出现在基类中的唯一方法。

我不太明白为什么会发生这种情况,但是除了使用@BeforeMethod 之外,我的设置与您相同,并且在运行并行线程时一切都很好

于 2013-09-06T09:32:35.430 回答