2015-07-17 4 views
1

Я работаю над машиной Windows 7 и пытаюсь реализовать тест Appium для запуска на двух реальных устройствах Android параллельно. я был в состоянии запустить на каждом из 2-х устройств по отдельности и испытаний, выполненных, как ожидалось, но одновременный запуск с использованием JUnit терпит неудачу с следующий StackTrace для одного из устройств:Ошибка запуска Appium на нескольких устройствах

info: [debug] Pushing command to appium work queue: ["element:getText",{"elementId":"2"}] 
info: [debug] [BOOTSTRAP] [debug] Got data from client: {"cmd":"action","action":"element:getText","params":{"elementId":"2"}} 
info: [debug] [BOOTSTRAP] [debug] Got command of type ACTION 
info: [debug] [BOOTSTRAP] [debug] Got command action: getText 
info: [debug] [BOOTSTRAP] [debug] Returning result: {"value":"Sign up","status":0} 
info: [debug] Responding to client with success: {"status":0,"value":"Sign up","sessionId":"c730d16f-ca7f-42aa-be23-da33bbefd9f0"} 
info: <-- GET /wd/hub/session/c730d16f-ca7f-42aa-be23-da33bbefd9f0/element/2/text 200 56.413 ms - 81 {"status":0,"value":"Sign up","sessionId":"c730d16f-ca7f-42aa-be23-da33bbefd9f0"} 
info: --> DELETE /wd/hub/session/c730d16f-ca7f-42aa-be23-da33bbefd9f0 {} 
info: Shutting down appium session 
info: [debug] Pressing the HOME button 
info: [debug] executing cmd: C:\Users\Kristaps.Mezavilks\AppData\Local\Android\sdk\platform-tools\adb.exe -s 192.168.1.204:5555 shell "input keyevent 3" 
info: [debug] Stopping logcat capture 
info: [debug] Logcat terminated with code null, signal SIGTERM 
info: [debug] [BOOTSTRAP] [debug] Got data from client: {"cmd":"shutdown"} 
info: [debug] [BOOTSTRAP] [debug] Got command of type SHUTDOWN 
info: [debug] [BOOTSTRAP] [debug] Returning result: {"value":"OK, shutting down","status":0} 
info: [debug] [BOOTSTRAP] [debug] Closed client connection 
info: [debug] [UIAUTOMATOR STDOUT] INSTRUMENTATION_STATUS: numtests=1 
info: [debug] [UIAUTOMATOR STDOUT] INSTRUMENTATION_STATUS: stream=. 
info: [debug] [UIAUTOMATOR STDOUT] INSTRUMENTATION_STATUS: id=UiAutomatorTestRunner 
info: [debug] [UIAUTOMATOR STDOUT] INSTRUMENTATION_STATUS: test=testRunServer 
info: [debug] [UIAUTOMATOR STDOUT] INSTRUMENTATION_STATUS: class=io.appium.android.bootstrap.Bootstrap 
info: [debug] [UIAUTOMATOR STDOUT] INSTRUMENTATION_STATUS: current=1 
info: [debug] [UIAUTOMATOR STDOUT] INSTRUMENTATION_STATUS_CODE: 0 
info: [debug] [UIAUTOMATOR STDOUT] INSTRUMENTATION_STATUS: stream= 
info: [debug] [UIAUTOMATOR STDOUT] Test results for WatcherResultPrinter=. 
info: [debug] [UIAUTOMATOR STDOUT] Time: 6.985 
info: [debug] [UIAUTOMATOR STDOUT] OK (1 test) 
info: [debug] [UIAUTOMATOR STDOUT] INSTRUMENTATION_STATUS_CODE: -1 
info: [debug] Sent shutdown command, waiting for UiAutomator to stop... 
info: [debug] UiAutomator shut down normally 
info: [debug] Cleaning up android objects 
info: [debug] Cleaning up appium session 
info: [debug] Responding to client with success: {"status":0,"value":null,"sessionId":"c730d16f-ca7f-42aa-be23-da33bbefd9f0"} 

Перед запуском я выполнить следующие действия:

  • запуск Селен сетки:
    java -jar selenium-server-standalone-2.46.0.jar -role -hub -throwOnCapabilityNotPresent
  • запуск 2 Appium узлы:
    node appium --nodeconfig C:\Users\Kristaps.Mezavilks\selenium\node_p.json -p 4728 --udid 192.168.219:5555
    и
    node appium --nodeconfig C:\Users\Kristaps.Mezavilks\selenium\node_c.json -p 4730 --udid 192.168.204:5555

Пример конфигурационного файла node_c.json:

{ 
    "capabilities":[ 
     { 
     "browserName":"android", 
     "version":"4.4.2", 
     "maxInstances":3, 
     "platform":"ANDROID", 
     "deviceName":"192.168.1.204:5555" 
     } 
    ], 
    "configuration":{ 
     "cleanUpCycle":2000, 
     "timeout":30000, 
     "proxy":"org.openqa.grid.selenium.proxy.DefaultRemoteProxy", 
     "url":"http://localhost:4730/wd/hub", 
     "host":"localhost", 
     "port":4730, 
     "maxSession":1, 
     "register":true, 
     "registerCycle":5000, 
     "hubPort":4444, 
     "hubHost":"192.168.1.216" 
    } 
} 

Получение Android драйвера:

static AndroidDriver get() { 
     DesiredCapabilities capabilities = new DesiredCapabilities(); 
     capabilities.setPlatform(Platform.ANDROID) 
     capabilities.setBrowserName("") 
     capabilities.setVersion(mobileVersion) 
     capabilities.setCapability(MobileCapabilityType.DEVICE_NAME, deviceID); 
     capabilities.setCapability(MobileCapabilityType.APP, appPath); 
     capabilities.setCapability(MobileCapabilityType.UDID, deviceID) 
     def URL remoteAddress = new URL("http://localhost:4444/wd/hub") 
     new AndroidDriver(remoteAddress, capabilities) 
    } 

Есть ли у вас представление о том, что это проблема или по крайней мере, вы могли бы указать мне в правильном направлении, чтобы найти проблему? Большое спасибо.

EDIT: После @Ageoffan предложение зафиксировал первую проблему, но теперь есть проблема сброса соединения:

info: [debug] [UIAUTOMATOR STDOUT] INSTRUMENTATION_STATUS: current=1 
info: [debug] [UIAUTOMATOR STDOUT] INSTRUMENTATION_STATUS: id=UiAutomatorTestRunner 
info: [debug] [UIAUTOMATOR STDOUT] INSTRUMENTATION_STATUS: class=io.appium.android.bootstrap.Bootstrap 
info: [debug] [UIAUTOMATOR STDOUT] INSTRUMENTATION_STATUS: stream= 
info: [debug] [UIAUTOMATOR STDOUT] io.appium.android.bootstrap.Bootstrap: 
info: [debug] [UIAUTOMATOR STDOUT] INSTRUMENTATION_STATUS: numtests=1 
info: [debug] [UIAUTOMATOR STDOUT] INSTRUMENTATION_STATUS: test=testRunServer 
info: [debug] [UIAUTOMATOR STDOUT] INSTRUMENTATION_STATUS_CODE: 1 
info: [debug] [BOOTSTRAP] [debug] Socket opened on port 4724 
info: [debug] [BOOTSTRAP] [debug] Appium Socket Server Ready 
info: [debug] [BOOTSTRAP] [debug] Loading json... 
info: [debug] Waking up device if it's not alive 
info: [debug] Pushing command to appium work queue: ["wake",{}] 
info: [debug] [BOOTSTRAP] [debug] json loading complete. 
info: [debug] [BOOTSTRAP] [debug] Registered crash watchers. 
error: Unhandled error: Error: read ECONNRESET 
    at exports._errnoException (util.js:746:11) 
    at TCP.onread (net.js:559:26) context: [POST /wd/hub/session {"desiredCapabilities":{"app":"C:\\Users\\Kristaps.Mezavilks\\Workspace\\android-app\\project\\build\\outputs\\apk\\project-debug2.apk","browserName":"","udid":"192.168.1.219:5555","platformName":"Android] 
+0

Хм, пытались ли вы случайно убедиться, что оба устройства могут инициировать метод setUp параллельно? Я могу только предположить, что он пытался запустить его, когда другой еще использовался. – SomeStudent

+0

Спасибо @Ageoffan за предложение - он исправил эту проблему. К сожалению, сейчас проблема с соединением (отредактирован исходный вопрос). Это может быть ошибка [Appium bug # 4288] (https://github.com/appium/appium/issues/4288)? Возможно, есть возможность указать Аппию на разделение АБР? –

ответ

1

я имел дело с этой проблемой в течение недели, но в конце концов я сосредоточился на следующую StackTrace линии info: [debug] [BOOTSTRAP] [debug] Socket opened on port 4724 и понял, что все экземпляры подключения к тому же (все команды переадресации tcp были равны для всех экземпляров).

Так что через некоторое время мне удалось найти способ определения пересылки на пользовательских портах с помощью параметра порта загрузочного порта -bp <post_number>, добавленного в команду node. После того, как я установил пользовательские порты, я смог запускать параллельные тесты даже на 4 устройствах в режиме реального времени.

Спасибо @Ageoffan за помощь!

0

Я думаю, что JUnit использует тот же порт, как для вашего тестового случая, когда вы запустите в параллели. Попробуйте параметризовать номер порта.

0

Сообщение Редактировать, попробуйте посмотреть, является ли раздел, в котором вы заявляете свои возможности, точным. Поскольку журнал ошибок, похоже, указывает на это местоположение. Я знаю, что мои желаемые возможности для моего андроида тестов выглядят следующим образом:

 File app = new File("pathway to your apk"); 

     DesiredCapabilities capabilities = new DesiredCapabilities(); 

     capabilities.setCapability(CapabilityType.BROWSER_NAME, "Android");   
     capabilities.setCapability("platformName", "Android");   
     capabilities.setCapability("deviceName", "Android Emulator");   
     capabilities.setCapability("platformVersion", "4.4.2"); 
     capabilities.setCapability(MobileCapabilityType.APP, app.getAbsolutePath()); 

     driver = new AndroidDriver(new URL("your server url here"),capabilities);