В настоящее время я пытаюсь улучшить нашу инфраструктуру автоматизации тестирования путем распараллеливания наших тестов. Я знаю, как это сделать, но у меня возникает вопрос об управлении устройствами. Представьте, что у меня есть 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
Выбор следующего доступного устройства для параллельного тестирования с помощью Appium и UIAutomator2. ⇐ JAVA
Программисты JAVA общаются здесь
1728081094
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;
}
Подробнее здесь: [url]https://stackoverflow.com/questions/79055960/choosing-the-next-available-device-for-parallel-testing-with-appium-and-uiautoma[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия