2016-06-21 6 views
0

複数のデバイスで同時にAppiumを使用してテストを実行するためのtestNGスイートを作成しようとしています。私は現在、@BeforeSuiteを使用して各デバイスのサーバー/ドライバをセットアップし、次に@BeforeMethodと@AfterMethod関数を使用してテストメソッドに接続を分散します。私は、私のテストクラスのそれぞれに関連付けられている異なる子.xmlファイルを呼び出すマスタースイートスイート.xmlを持っています。テストクラスはそれぞれ@Factoryに関連付けられており、インスタンスを並列に実行できます(接続されたデバイスの数に基づいて実行時に決定されます)。TestNG Appium Paralell Runs組織

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd"> 
<suite name="Default Suite"> 
    <parameter name="other" value="@[email protected]"></parameter> 
    <suite-files> 
    <suite-file path="src/first.xml" /> 
    <suite-file path="src/second.xml" /> 
    </suite-files> 
</suite> 

子供

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd"> 
<suite name="first" parallel="instances"> 
    <test name="android"> 
    <classes> 
     <class name="TestFactory" /> 
    </classes> 
    </test> 
</suite> 

工場

public class TestFactory { 

    @Factory 
    public Object[] initial() { 
     int numDevices = DeviceManager.getNumAttachedDevices(); 
     Object[] result = new Object[numDevices]; 
     for (int i = 0; i < numDevices; i++) { 
      result[i] = new StartupTest(); 
     } 

     return result; 
    } 
} 

私は間違いなく行うにはしたくありませんこの。私が望むテストクラスごとに新しい@Factoryクラスを作成する必要があるのはかなりばかばかしいようです。私は最近、@ DataProviderの中でparallel = trueを使用できることを発見しました。これはparalell = "methods"と一緒に使用でき、同様の結果を得るためにinvocationCountの注釈トランスフォーマ(添付されたデバイス)。

@ BeforeMethodコールと@AfterMethodコールを使用して、正しいデバイスで必要なセットアップとクリーンアップを実行する方法がわかりません(デバイス名が不足しています)。これを行うための他の推奨される方法はありますか?それとも私の最善の選択肢ですか?

答えて

0

別のクラスをまとめて作るのではなく、テストクラスの中で@Factoryメソッドを使うことができます。

私が知る限り、TestNGスレッドをparallel = "methods"で制御するのは簡単ではないので、1つのメソッドを実行した後にすべてが結合されます。この機能がなければ、@ DataProviderを使うのはもっと複雑になり、価値がないようです。

私の@Factoryの中で、私は引き続き各インスタンスのカスタム引数を渡すことができます。