Выбор следующего доступного устройства для параллельного тестирования с помощью Appium и UIAutomator2.JAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Выбор следующего доступного устройства для параллельного тестирования с помощью Appium и UIAutomator2.

Сообщение Anonymous »

В настоящее время я пытаюсь улучшить нашу инфраструктуру автоматизации тестирования путем распараллеливания наших тестов. Я знаю, как это сделать, но у меня возникает вопрос об управлении устройствами. Представьте, что у меня есть 5 разных устройств и 10 тестов, которые я хочу запустить параллельно. Каждый тест занимает разное количество времени и может быть запущен снова в случае неудачи. Теперь я мог бы выбирать для каждого теста одно конкретное устройство, но не хочу этого делать. Вместо этого я хочу иметь фрагмент кода, который за меня решает, какое устройство является бесплатным, и использует его. Я могу сделать это, просматривая текущие сеансы на моем сервере Appium. Это работает нормально, пока два теста не запускаются одновременно. Затем UiAutomator2 выбирает одно и то же устройство для обоих тестов и не соответствует ожидаемому результату.
org.openqa.selenium.SessionNotCreatedException: Could not start a new session. Response code 500. Message: An unknown server-side error occurred while processing the command. Original error: The instrumentation process cannot be initialized.
Мой вопрос: есть ли у кого-нибудь здесь опыт распараллеливания тестов на нескольких устройствах и может ли он подсказать, что я могу попробовать? Я использую Appium в качестве сервера, Android в качестве ОС, Java в качестве языка программирования и TestNG.
Вот код моего костюма


















Вот мой код, как я сейчас проверяю наличие занятых устройств
private URL getHubUrl() {
URL remoteAddress = null;
try {
remoteAddress = new URL("http://127.0.0.1:4723/wd/hub");
} catch (MalformedURLException e) {
Assert.fail("Selenium Grid address is malformed. Exception message: ", e);
}
return remoteAddress;
}

public void setDriver() {
DesiredCapabilities caps = new DesiredCapabilities();

caps.setCapability("platformName", "android");
caps.setCapability("appium:automationName", "uiautomator2");

caps.setCapability("appium:appPackage", "com.example.exampleApp");
caps.setCapability("appium:appActivity", "com.example.exampleApp.frontend.MainActivity");

List busyDevices = get_busyDevices("http://127.0.0.1:4723/wd/hub");

List availableDevices = findIdleDevices(Constants.allDevices, busyDevices);

if (!availableDevices.isEmpty()) {
System.out.println("SecondTest running on " + availableDevices.getFirst());
caps.setCapability("appium:udid", availableDevices.getFirst());
} else {
throw new RuntimeException("No device found");
}

driver = new AndroidDriver(getHubUrl(), caps);
}

public List findIdleDevices(List allDevices, List busyDevices) {
return allDevices.stream()
.filter(device -> !busyDevices.contains(device))
.collect(Collectors.toList());
}

private static List\ get_busyDevices(String appiumServerUrl) {
try (CloseableHttpClient httpClient = HttpClients.createDefault()) {
HttpGet request = new HttpGet(appiumServerUrl + "/sessions");
try (CloseableHttpResponse response = httpClient.execute(request)) {
String responseString = EntityUtils.toString(response.getEntity());
JSONObject jsonResponse = new JSONObject(responseString);
return extract_Udid(jsonResponse);
}
} catch (Exception e) {
e.printStackTrace();
return new ArrayList();
}
}

public static List extract_Udid(JSONObject jsonResponse) {
JSONArray valueArray = jsonResponse.getJSONArray("value");
List udidList = new ArrayList();

for (int i = 0; i < valueArray.length(); i++) {
JSONObject capabilities = valueArray.getJSONObject(i).getJSONObject("capabilities");
String udid = capabilities.getString("udid");
if (!udidList.contains(udid)) {
udidList.add(udid);
}
}
return udidList;
}


Подробнее здесь: https://stackoverflow.com/questions/790 ... d-uiautoma
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»