我在一个类中有5到6个方法,并希望在不同的节点上并行运行方法。我有2个网格设置,里面有4个节点。
在下面查找我的testng.xml
<suite name="Test" parallel="methods" thread-count="2">
<test name="Test1">
<classes>
<class name="test.LoginTest"/>
</classes>
</test>
</suite>
我有一个测试工具,它可以使用login,common和utils类
Public class TestHarness{
public WebDriver driver = null;
public DesiredCapabilities cap = null;
public Login login;
public Common common;
public void initilize(){
cap = DesiredCapabilities.firefox();
cap.setBrowserName("firefox");
cap.setPlatform(Platform.ANY);
driver = new RemoteWebDriver(new URL(CONFIG.getProperty("hub")),cap);
common = new Common(driver);
login = new Login(driver);
utils = new Utils(driver);
}
}
在我的测试类中,我扩展了测试工具,在@BeforeMethod中我调用了intilize方法
public class LoginTest extends TestHarness{
@BeforeMethod
public void startTest() {
initilize();
login.loginAsAdmin();
}
@Test
public void testLoginWithCorrectPassword(){
common.goToAdminSettings();
}
@Test
public void testLoginwithInCorrectPassword(){
utils.getMessage();
}
}
如果我运行测试,我会看到以下问题
两个浏览器在每个节点中打开一个,但只有一个浏览器启动应用程序而另一个浏览器不启动。
如果我遗失了什么,请告诉我?
谢谢
答案 0 :(得分:1)
1) 你确定你正在运行正确的测试课吗?
<class name="test.LoginTest"/>
你的考试在:
public class Testing123 extends TestHarness{
2) 您的代码未显示驱动程序的声明。 确保此字段不是静态
3)另外,检查网格实际配置为处理的内容: http://localhost:4444/grid/admin/AllNodes
4)将测试配置中的线程数提高到4。
答案 1 :(得分:1)
即使驱动程序是非静态的,它也会在测试方法之间共享 因为它们是从同一个类实例中调用的
让我们将测试方法放在单独的类
中a)将@BeforeMethod移至TestHarness类
b)创建
public class LoginTest2 exteds TestHarness
并在那里移动第二个@Test方法
c)修改套件:
<suite name="Test" parallel="classes" thread-count="2">
<test name="Test1">
<classes>
<class name="test.LoginTest"/>
<class name="test.LoginTest2"/>
</classes>
</test>
如果这会有所帮助 最终解决方案可以是ThreadLocal,如下所示: