2011-10-25 80 views
0

我有TestNG的注释的类,它经营的网站上的功能测试,我首先定义了浏览器类 - 简单的POJO:我可以在TestNG的@Factory中创建一个新套件吗?

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提供了一个顶级机制来在套件级别操作对象(afaik @Factory方法只能工作在类级别) - 所以我可以编程创建新的套件实例,每个实例初始化为使用不同的浏览器。

回答

0

@Factory只适用于测试级别,所以你的问题的答案是否定的。

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

希望这会有所帮助。

+1

谢谢塞德里克。我也尝试通过在ISuiteListener侦听器上传递的ISuite接口来修改套件无济于事。如果您决定在TestNG中包含一些功能来在testng.xml XML文件本身中迭代一个包含许多参数的套件,那么展望未来。 – antorsae

+0

正确的,传递给侦听器的对象应该是只读的,尽管对它们的一些修改恰好可以工作。随意通过电子邮件将您的建议发送给testng用户,我们可以从那里获取。 –

相关问题