2011-10-25 8 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クラスの複数のインスタンスを作成します。それぞれのインスタンスは、BrowserTestの最初のインスタンスを含む同じスイート内でTestNGが実行する別のブラウザで初期化されます。

新しいクラスインスタンスごとに新しいスイートを作成することが可能かどうか、またTestNGがスイートレベルでオブジェクトを操作するトップレベルのメカニズムを提供しているかどうかを知りたい(アフリカの@Factoryメソッドのみが動作するクラスレベルで) - 新しいスイートインスタンスをプログラムで作成して、それぞれ別のブラウザを使用するように初期化することができます。

答えて

0

@Factoryはテストレベルでのみ動作しますので、あなたの質問に対する答えはいいえです。

しかし、TestNGのXML APIを使用して新しいスイートを作成することができます。これは、testng.xmlファイルのメモリ内バージョンを作成することによって、より高いレベルで動作します。 XmlSuiteXmlTestなどのクラスを参照してください。その場合、テストクラスを直接インスタンス化してXmlTestで作成した<test>タグに含めることができるので、おそらくは@Factoryは必要ありません。

これが役に立ちます。

+1

ありがとうCedric。また、ISuiteListenerリスナーに渡されたISuiteインターフェイスを使用してスイートを変更しようとしましたが、役に立たなかったのです。 TestNGにいくつかの機能を組み込んで、testng.xml XMLファイル自体にいくつかのパラメータを持つスイートを繰り返すのを楽しみにしています。 – antorsae

+0

リスナーに渡されるオブジェクトは、正しく動作するようになっていますが、リスナーに渡されるオブジェクトは読み取り専用です。あなたの提案をtestng-usersに電子メールで送ってもらえれば、そこから取得することができます。 –

関連する問題