我可以在TestNG的@Factory中创建一个新套件吗?

时间:2011-10-25 11:53:08

标签: testng

我有一个带有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方法仅适用于类级别) - 所以我可以以编程方式创建新的套件实例,每个实例初始化为使用不同的浏览器。

1 个答案:

答案 0 :(得分:0)

@Factory仅适用于测试级别,因此您的问题的答案是否定的。

但是,您可以使用TestNG的XML API创建新的套件,该API通过创建testng.xml文件的内存版本在更高级别上运行。查找XmlSuiteXmlTest等等类。如果你走这条路,你可能根本不再需要@Factory,因为你可以直接实例化测试类,然后将它们包含在用XmlTest创建的<test>标签中。

希望这有帮助。