我有一个集线器和两个节点的Selenium Grid2。
Hub由以下机构运营:
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
在中心控制台中,我看到两个节点都已启动并正在运行。
My TestNB config (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;
}
}
在测试1.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/");
}
}
我用蚂蚁运行所有这些。这是一段代码:
<target name="run-tests" depends="build">
<testng classpathref="LoadTests.classpath">
<xmlfileset dir="." includes="testng.xml"/>
</testng>
</target>
命令行:
ant run-tests
现在工作原理:Test1 在节点 1 上运行,Test2 在节点 2 上运行(同时)。之后,Test3 在节点 1 上运行,Test4 在节点 2 上运行(同时)。
期望的行为:所有四个测试同时运行:两个在一个节点上(例如,Test1,Test3),另外两个在第二个节点(Test2,Test4)上运行。
问题:我应该更改哪些内容才能使其按预期工作?
尝试使用 @BeforeMethod 而不是 @BeforeClass。我知道这将为每个方法创建一个驱动程序,但我认为如果 @Before*注释* 发生在基类中,这是唯一的方法。
我不太明白为什么会发生这种情况,但我的设置与您相同,除了使用 @BeforeMethod,运行并行线程时一切都很好