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

我可以在TestNG中的@Factory中创建一个新套件吗?,testng,Testng,我有一个带有TestNG注释的类,它在网站上运行功能测试,我首先定义了一个浏览器类-simple POJO: class Browser { private String browserName; private String browserVersion; private String platform; ...getters and setters and constructor... } 现在是TestNG注释类本身: class BrowserTest { pub

我有一个带有TestNG注释的类,它在网站上运行功能测试,我首先定义了一个浏览器类-simple 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();

    }
}
类浏览器测试{
公共浏览器测试(浏览器b){
...
创建浏览器会话等(在下面使用Selenium网格)
...
}
@试验
公共无效登录(){
…测试登录。。。
}
@试验
公开作废注销(){
…测试注销。。。
}
@工厂
公共对象[]create()引发异常{
List testList=new ArrayList();
浏览器[]浏览器={
新浏览器(“谷歌浏览器”、“谷歌浏览器”、“谷歌浏览器”),
新浏览器(“firefox”、“firefox”、“firefox”),
新浏览器(“internet explorer”、“9”和“),
};
//为每个浏览器创建此类的新实例
用于(浏览器b:浏览器){
添加(新浏览器测试(b));
}
返回testList.toArray();
}
}
上面的@Factory方法运行良好,我创建了BrowserTest类的多个实例,每个实例都使用不同的浏览器初始化,TestNG将在包含BrowserTest第一个实例的同一套件中运行


我想知道是否可以为每个新的类实例创建一个新的套件,或者更好的是,TestNG是否提供了一个顶级机制来在套件级别操作对象(当然@Factory方法只在类级别工作)-这样我就可以通过编程方式创建新的套件实例,每个实例都初始化为使用不同的浏览器。

@Factory
仅在测试级别有效,因此您的问题的答案是否定的

但是,您可以使用TestNG的XML API创建新套件,该API通过创建TestNG.XML文件的内存版本在更高级别上工作。查找
XmlSuite
XmlTest
等。。。上课。如果您这样做,您可能根本不需要
@Factory
,因为您可以直接实例化测试类,然后将它们包含在使用XmlTest创建的
标记中


希望这能有所帮助。

谢谢塞德里克。我还试图通过ISuite侦听器上传递的ISuite接口修改套件,但没有成功。如果您决定在TestNG中加入一些功能,以在TestNG.xml文件本身中使用大量参数迭代一个套件,请期待。正确的是,传递给侦听器的对象应该是只读的,尽管对它们进行了一些修改。请随时通过电子邮件将您的建议发送给testng用户,我们可以从那里获取建议。