我有一套Selenium WebDriver测试,我正在使用Grid运行。当我运行这个testng.xml文件时:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="Suite" parallel="classes" thread-count="20">
<test name="Test">
<classes>
<class name="testcases.test1"/>
<class name="testcases.test2"/>
<class name="testcases.test3"/>
<class name="testcases.test4"/>
<class name="testcases.test5"/>
<class name="testcases.test6"/>
<class name="testcases.test7"/>
<class name="testcases.test8"/>
<class name="testcases.test9"/>
<class name="testcases.test10"/>
<class name="testcases.test11"/>
<class name="testcases.test12"/>
<class name="testcases.test13"/>
<class name="testcases.test14"/>
<class name="testcases.test15"/>
<class name="testcases.test16"/>
<class name="testcases.test17"/>
<class name="testcases.test18"/>
<class name="testcases.test19"/>
<class name="testcases.test20"/>
<class name="testcases.test21"/>
</classes>
</test> <!-- Test -->
</suite> <!-- Suite -->
打开多个浏览器,每个浏览器都运行@BeforeClass方法和第一个@Test方法。但是,在每个浏览器完成第一个@Test方法之后,它将等待所有其他浏览器完成它们各自的第一个@Test方法。
测试的结构如下:
public class sampleTestClass {
@BeforeClass
public void setup(){
//setup Remote WebDriver
}
@Test
public void method1(){
//do things
}
@Test(dependsOnMethods = "method1")
public void method2(){
//do things
}
@Test(dependsOnMethods = "method2")
public void method3(){
//do things
}
@AfterClass
public void teardown(){
//call teardown
}
}
每个类中有多个@Test方法。我将补充说,当我使用这个.xml文件时,一切都按照我喜欢的方式运行:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<suite name="MySuite" parallel="tests" thread-count="20">
<test name="First Test">
<classes>
<class name="testcases.test1"/>
</classes>
</test>
<test name="Second Test">
<classes>
<class name="testcases.test2"/>
</classes>
</test>
<test name="Third Test">
<classes>
<class name="testcases.test3"/>
</classes>
</test>
<test name="Fourth Test">
<classes>
<class name="testcases.test4"/>
</classes>
</test>
<!--<test name="Fifth Test">
<classes>
<class name="testcases.test5"/>
</classes>
</test>-->
<test name="Sixth Test">
<classes>
<class name="testcases.test6"/>
</classes>
</test>
<test name="Seventh Test">
<classes>
<class name="testcases.test7"/>
</classes>
</test>
</suite>
我对此配置不满意的原因是,我不认为它完全保留了标签的语义含义,而且两个(最重要的是)我喜欢它能够并行运行自动生成的故障套件,但该.xml文件的配置与我遇到问题的顶级配置相同。
在我看来,指定parallel =&#34; classes&#34;套件标签中的内容与TestNG文档一致,但并未在单独的类中实现@Test方法的异步执行。
为什么.xml文件的配置不起作用?我需要做些什么才能使其有效?
答案 0 :(得分:2)
在具有多个方法的webdriver测试类的上下文中,假设该类中有一个webdriver实例,我不知道如何在方法之间同时共享一个webdriver实例。我似乎必须一次调用一个方法,以便每个方法都使用webdriver实例。否则,你似乎会得到某种并发异常。
我已多次尝试使用与TestNG一起使用的并行方法,但从未成功过。 There is an example in the source code though这可能是一个线索;只需查看同一文件夹中的testng.xml即可。