我有一个带有TestNG注释的类,它在网站上运行功能测试,我首先定义一个Browser类 - 简单的POJO:
class Browser {
private String browserName;
private String browserVersion;
private String platform;
...getters and setters and constructor...
}
现在是TestNG注释类本身:
class BrowserTest {
public BrowserTest(Browser b) {
...
create browser session, etc. (uses Selenium Grid underneath)
...
}
@Test
public void login() {
...test login...
}
@Test
public void logout() {
...test logout...
}
@Factory
public Object[] create() throws Exception {
List<Object> testList = new ArrayList<Object>();
Browser[] browsers = {
new Browser("google-chrome", "", ""),
new Browser("firefox", "", ""),
new Browser("internet-explorer", "9", ""),
};
//Create new instance of this class for each browser
for (Browser b: browsers) {
testList.add(new BrowserTest(b));
}
return testList.toArray();
}
}
上面的@Factory方法运行良好,我创建了BrowserTest类的多个实例,每个实例都使用不同的浏览器初始化,TestNG将在包含BrowserTest的第一个实例的同一个套件中运行。
我想知道是否可以为每个新的类实例创建一个新的套件,或者更好的是,如果TestNG提供了一个顶层机制来操纵套件级别的对象(假设@Factory方法仅适用于类级别) - 所以我可以以编程方式创建新的套件实例,每个实例初始化为使用不同的浏览器。
答案 0 :(得分:0)
@Factory
仅适用于测试级别,因此您的问题的答案是否定的。
但是,您可以使用TestNG的XML API创建新的套件,该API通过创建testng.xml文件的内存版本在更高级别上运行。查找XmlSuite
,XmlTest
等等类。如果你走这条路,你可能根本不再需要@Factory
,因为你可以直接实例化测试类,然后将它们包含在用XmlTest创建的<test>
标签中。
希望这有帮助。