2017-05-08 13 views
1

私はappiumのフレームワークを作成し始めました。私はドライバを作成しようとするときに挑戦に直面しています。Appium並列実行+ TestNGフレームワークの問題

は、それは次のように起動し

ステップ1:スレッド数とデバイス私はTestNGの@Beforesuiteで、実行時にappiumサーバを作成されます基づいています。

cap.setCapability("noReset", "false"); 
    cap.setCapability(MobileCapabilityType.DEVICE_NAME, "Dev1"); 
    cap.setCapability(MobileCapabilityType.BROWSER_NAME, "Chrome"); 
    cap.setCapability(MobileCapabilityType.UDID, udid); 
    //Build the Appium service 
    builder = new AppiumServiceBuilder(); 
    builder.withIPAddress("127.0.0.1"); 
    builder.usingAnyFreePort(); 
    builder.withCapabilities(cap); 
    builder.withArgument(GeneralServerFlag.SESSION_OVERRIDE); 
    builder.withArgument(GeneralServerFlag.LOG_LEVEL, "error"); 

    appiumservice = AppiumDriverLocalService.buildService(builder); 
    appiumservice.start(); 

ステップ2:私は今、私はすべてのサーバーのURLや能力を持っている

appiumservice.getUrl().toString() 

を使用して接続されているすべてのデバイスのためのappiumサーバーのURLのを取得します。

パラレルとスレッド数を3に設定すると、質問はTestNG.xmlになります。どのようにして、別のappiumサーバーURLを使用してテストを実行する必要があるかを、毎回@BeforeMethodでAndroidDriverオブジェクトを作成する方法を設定できます? @Beforemethodと@Aftermethodはどうすればよいですか?

おかげ

答えて

0
Pass port and device from testng : 

<suite name="Suite" verbose="1" parallel="tests" thread-count="2"> 
<parameter name="properties" value="XXX" /> 
<tests> 
<test name="Run on device 1"> 
<classes> 
<parameter name="port" value="4723"/> 
<parameter name="device" value="DeviceID1"></parameter> 
<class name="com.testScripts.ABC"> 
<methods> 
    <include name="test1"/> 
</methods> 
</class> 
</classes> 
</test> 
<test name="run on device 2"> 
<classes> 
<parameter name="port" value="4724"></parameter> 
<parameter name="device" value="DeviceID2"></parameter> 
<class name="com.testScripts.ABC"> 
<methods> 
<include name="test1"/> 
</methods> 
</class> 
</classes> 
</test> 
</tests> 
</suite> 


Put following annotation in method whrere you are defining your capability .. 
@BeforeTest(alwaysRun=true) 
@Parameters({"port","device"}) 
Public void capablities() 
{ 
cap.setCapability("noReset", "false"); 
    cap.setCapability(MobileCapabilityType.DEVICE_NAME, device); 
    cap.setCapability(MobileCapabilityType.BROWSER_NAME, "Chrome"); 
    cap.setCapability(MobileCapabilityType.UDID, udid); 
    //Build the Appium service 
    builder = new AppiumServiceBuilder(); 
    builder.withIPAddress("127.0.0.1"); 
    //use port pass in testng file 
    // builder.usingAnyFreePort(); 
    builder.withCapabilities(cap); 
    builder.withArgument(GeneralServerFlag.SESSION_OVERRIDE); 
    builder.withArgument(GeneralServerFlag.LOG_LEVEL, "error"); 

    appiumservice = AppiumDriverLocalService.buildService(builder); 
    appiumservice.start(); 
} 
私は@BeforeClass方法でドライバを初期化することをお勧め
+0

おかげシブが、しかし、私は、ソリューションに関する質問のカップルを持っています提供されます。 @beforemethodでドライバオブジェクトを作成しますか?パラレル実行は、提供されるパラメータの異なるドライバオブジェクトを自動的に処理しますか? http://127.0.0,1:4723/wd/hubと他のhttp://127.0.0.1:4724/wd/hub – user2350138

+0

にあるスレッドを1つ言うと、デバイスとポート用に用意されたパラメータに基づいて作成されます。 .n ..インスタンス数127.0.0,1:4723/wd/hub、127.0.0,1:4724/wd/hub ...と並行してtesngを実行すると、タグの下で並列に実行されます。 – shiv

0

、およびSHIVは、使用TestNGのパラメータ述べたように:

driver = new RemoteWebDriver(new URL("http://0.0.0.0:"+ port +"/wd/hub"), capabilities); 
関連する問題