2011-10-25 77 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用戶,我們可以從那裏獲取。 –

相關問題