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