一步一步的過程
使用 GRID 與 Appium 進行並行測試:我將描述對我有用的方法。使用 Appium 建立 Selenium Grid
- 設定 selenium 網格在本地檔案系統上下載 selenium 獨立伺服器 jar 開啟終端並導航到放置 jar 檔案的目錄並執行以下命令:
java -jar selenium-server-standalone-2.53.3.jar -role hub
Open http://localhost:4444/grid/console and you should be able to see GRID console in your browser.
- 設定 Appium 節點在這裡你必須建立 json 檔案。假設你要在兩個裝置上執行,然後建立兩個不同的 json 檔案。這是一個 json 檔案,我有:{
capabilities
:[{applicationName
:ONEPLUS A3003
,browserName
:ONEPLUS A3003
,platformName
:ANDROID
,maxInstances
:1}] ,configuration
:{cleanUpCycle
:2000,timeout
:30000,proxy
:“org.openqa.grid.selenium.proxy.DefaultRemoteProxy”,host
:“127.0.0.1”,port
: 4723,maxSession
:1,register
:true,registerCycle
:5000,hubPort
:4444,hubHost
:“你的 ip 地址”}}將上述檔案儲存為 jasonFile1。
appium –nodeconfig C:/richa/jasonfile1.json -p 4723 -bp 4724 -U xxxx
i)注意你需要提供 json 檔案的絕對 pasth 位於 ii)埠為 4723 iii)Bootstrap 埠為 4724 iv)-U 例如我給出的為 xxxx
你可以找到裝置 ID 為 - >你的手機 - >設定 - >狀態 - >序列號你也可以執行 adb device
並檢查此裝置 ID。
然後它將使用一個裝置建立 Selenium Grid。
現在再次執行第二個 json 檔案,你將獲得 appium 啟動這是第二個 json 檔案:
{capabilities
:[{applicationName
:Lenovo K50a40
,browserName
:Lenovo K50a40
,platformName
:ANDROID
,maxInstances
:1}],configuration
:{cleanUpCycle
: 2000,超時:30000,代理:“org.openqa.grid.selenium.proxy.DefaultRemoteProxy”,主機:“127.0.0.1”,埠:4730,maxSession
:1,“註冊“:true,”registerCycle“:5000,”hubPort“:4444,”hubHost“:”你的 ip 地址“}}將上述檔案儲存為 jasonFile2.json
使用 Lenovo Mobile 啟動第二個節點。appium –nodeconfig C:/ richa / jasonFile2.json -p 4730 -bp 4731 -U xxxx
Selenium Grid 看起來像這樣
3)建立 TestNG 並行執行方法來執行測試。
- >請注意裝置名稱的值將是你之前提供的 udid。你可以通過在命令提示符下執行 adb 裝置來獲取它。
現在建立 SearchHotelTestCase.Java,如下所示:package com.trivago.TestCases;
import java.net.MalformedURLException; import java.net.URL; import java.util.concurrent.TimeUnit;
import org.openqa.selenium.remote.DesiredCapabilities; import org.openqa.selenium.remote.RemoteWebDriver; import org.testng.annotations.BeforeMethod; import org.testng.annotations.Parameters; import org.testng.annotations.Test;
import com.trivago.pages.LocaleSelectionPage; import com.trivago.pages.SearchLocation; import com.trivago.pages.SplashScreenPage;
import io.appium.java_client.MobileElement; import io.appium.java_client.android.AndroidDriver;
公共類 SearchHotelTestCase {private AndroidDriver driver;
@Parameters({“deviceName _”,“platformVersion _”,“applicationName_”})@BeforeMethod public void beforeMethod(String deviceName_,String platformVersion_,String applicationName_)丟擲 MalformedURLException,InterruptedException {
DesiredCapabilities capabilities = new DesiredCapabilities(); capabilities.setCapability(deviceName
,deviceName_); capabilities.setCapability(platformVersion
,platformVersion_); capabilities.setCapability(platformName
,Android
); capabilities.setCapability(applicationName
,applicationName_); capabilities.setCapability(app
,“/ Users /richa.b.shrivastava / Download / com.trivago_2017-04-28.apk”); capabilities.setCapability(appPackage
,“com.trivago”); capabilities.setCapability(appActivity
,“com.trivago.activities.SplashActivity”);
URL url = new URL(“ http://0.0.0.0:4723/wd/hub/ ”); System.out.println(“在 webdriver 之前”); driver = new AndroidDriver(url, capabilities); System.out.println(“在 webdriver 之後”); driver.manage()
。timeouts()。implicitlyWait(10,TimeUnit.SECONDS); 了 Thread.sleep(4000); }
@Test public void SearchHotel()
{//建立頁面類 LocaleSelectionPage 的物件 localeSelectionPage = new LocaleSelectionPage(driver); SplashScreenPage splashScreenPage =新的 SplashScreenPage(驅動程式); SearchLocation searchLocation = new SearchLocation(driver);
//呼叫頁面類的方法 localeSelectionPage.selectLocale(); splashScreenPage.clickSplashSearchText(); searchLocation.inputSearchText( 巴黎); searchLocation.selectSuggestions(“艾菲爾鐵塔,巴黎”);
}
}