Как стать автором
Обновить

Тестирование android приложений с использованием selenoid. Поиск location в мобильном приложении с помощью Appium

Время на прочтение5 мин
Количество просмотров13K

Я из компании Luxoft.
Предисловие из поста:


Selenoid — это программа, которая позволяет управлять браузерами и Android-эмуляторами с помощью специальных драйверов. Умеет запускать каждый из них изолированно в Docker-контейнере.


Основная идея Selenoid состоит в том, чтобы запускать новый контейнер для каждой сессии (запуска нового браузера или эмулятора) и останавливать его сразу же после закрытия сессии.


Selenoid позволяет поддерживать высокую нагрузку без дополнительных ресурсозатрат.


В этом посте будет запуск простых тестов в Android-эмуляторе.


Подготовка


Предварительно проверьте что ваша система может запускать виртуальные машины.


Аппаратная виртуализация должна поддерживаться вашим процессором. Это означает, что требуют­ся расширения процессора Intel­VT или AMD­V. Чтобы убедиться, поддерживает ли процессор одно из них, выполните команду:


egrep '(vmx|svm)' /proc/cpuinfo

Docker


На вашей операционной системе обязательно должен быть установлен и запущен Docker.


Установка Selenoid


Если у вас Redhat-based операционная система, вы можете использовать мой репозиторий для установки Configuration manager.


yum -y install yum-plugin-copr
yum copr enable antonpatsev/aerokube-cm-rpm
yum -y install aerokube-cm

Если у вас не Redhat-based операционная система, то вы можете скачать и использовать бинарник Configuration manager.


Запуск Selenoid используя Configuration manager и формирование browsers.json


Если у вас нет прямого доступа в инет и docker образы вы скачиваете через registry:


aerokube-cm selenoid start --force --browsers "android:6.0;chrome:78" --args "-session-attempt-timeout 2m -service-startup-timeout 2m" --registry ваш-docker-registry

Если у вас есть прямой доступ в инет.


aerokube-cm selenoid start --force --browsers "android:6.0;chrome:78" --args "-session-attempt-timeout 2m -service-startup-timeout 2m"

Ключ --args "-session-attempt-timeout 2m -service-startup-timeout 2m" нужен если у вас apk большого размера долго устанавливается.


Ключ --force перезаписывает файл browsers.json


Так как Selenoid Configuration manager пока что не умеет формировать browsers.json для мобильного Chrome, то его нужно поправить самостоятельно.


По умолчанию browsers.json формируется в директории ~/.aerokube/selenoid.


Итоговый файл browsers.json для тестирования Android приложений и Chrome внутри Android эмулятора.


{
    "android": {
        "default": "6.0",
        "versions": {
            "6.0": {
                "image": "docker-registry:443/selenoid/android:6.0",
                "port": "4444",
                "path": "/wd/hub"
            }
        }
    },
    "chrome": {
        "default": "mobile-75.0",
        "versions": {
            "mobile-75.0": {
                "image": "docker-registry:443/selenoid/chrome-mobile:75.0",
                "port": "4444",
                "path": "/wd/hub"
            }
        }
    }
}

Пока что версия мобильного хрома отстает от версии обычного хрома.
Скачиваем образ мобильного хрома


docker pull selenoid/chrome-mobile:75.0

Изменение browsers.json


При изменении файла browsers.json нужно перезагрузить selenoid


aerokube-cm selenoid stop

aerokube-cm selenoid start

Reloading configuration
Можно сделать Reloading configuration. Подробности по ссылке:
https://aerokube.com/selenoid/latest/#_reloading_configuration


Проверяем что docker контейнер запустился и образы скачались.


docker ps
docker images


Запуск Selenoid UI используя Configuration manager


aerokube-cm selenoid-ui start --registry https://docker-registry

Или


aerokube-cm selenoid-ui start

Проверяем что docker контейнер запустился и образы скачались.


docker ps
docker images


Заходим в selenoid-ui по адресу ip-где-вы-запускали-selenoid-и-selenoid-ui:8080


У вас должно быть гореть зеленым 2 слова CONNECTED и написано android и chrome.



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


Чтобы узнать имя виртуальной машины просто используйте команду hostname.


DEMO TEST


Скачиваем https://github.com/aerokube/demo-tests


Во всех трех java файлах меняем путь в RemoteWebDriver на полное или короткое имя виртуальной машины, где запускается selenoid (надо поменять скриншот).



или на другой адрес, там где вы запустили selenoid.


В файле AndroidRemoteApkTest.java меняем путь где можно скачать вашу APK.


device.setCapability("app", "http://ci.example.com/game2048.apk");

на


device.setCapability("app", "http:/полное-или-короткое-имя-виртуальной-машины-где-запускается-selenoid/ваша-apk");


По этой ссылке http:/полное-или-короткое-имя-виртуальной-машины-где-запускается-selenoid/ваша-apk вы должны скачивать APK как с виртуальной машины так внутри docker образов (в том числе и android).


Можно протестировать так:


curl http:/полное-или-короткое-имя-виртуальной-машины-где-запускается-selenoid/ваша-apk --output ваша-apk

Если вы будете ссылаться на localhost из docker, то у вас будет вот такая ошибка, так как вы из сети docker пытаетесь обратиться к localhost основного сервера:


Tests in error: 
  browserTest(com.aerokube.selenoid.AndroidRemoteApkTest): An unknown server-side error occurred while processing the command. Original error: Problem downloading app from url http://localhost:8000/apk/game2048.apk: connect ECONNREFUSED 127.0.0.1:8000

Как сделать доступной для скачивания ваши локальные файлы будет ниже.


В файле DemoTest.java добавляем setCapability для запуска chrome на Android чтобы получилось примерно так.



В каждом файле java вы можете включить или выключить запись видео, удаленный просмотр или управление через VNC и запись логов в файл. Чтобы выключить опцию нужно добавить 2 слеша в начало строки.



Чтобы сделать доступной для скачивания файлы из текущей директории, можно запустить в текущей консоли сервис static-server-in-dir:


yum -y install yum-plugin-copr

yum copr enable antonpatsev/static-server-in-dir

yum -y install static-server-in-dir

cd to directory

static-server-in-dir start

файлы в текущей директории будут доступны по порту 8000
выполнить тест

static-server-in-dir stop

Запуск тестов


В директории demo-tests запускаем тесты:


Если вам нужно указать настройки и у вас используется maven-прокси (Nexus, Artifactory)


mvn -s settings.xml clean test

Если запускаем с прямым доступом в инет и без каких-либо настроек


mvn clean test

Скорость


Общее время разворачивания android эмулятора и запуск 1 теста занимает меньше 1 минуты.


Известные баги


https://github.com/aerokube/demo-tests/issues/5


Видеозапись тестов


AndroidDemoTest.java:



AndroidRemoteApkTest.java:



DemoTest.java:



Поиск нужных location в мобильном приложении с помощью Appium


Appium — кроссплатформенный инструмент, т.е. позволяет писать тесты для мобильных платформ (iOS, Android, Windows), используя API. Это один из самых широко используемых инструментов для регрессионного тестирования приложений на смартфонах и планшетах.


Скачиваем и запускаем Appium


Идем в File --> New Session Window



В поле Remote host указываем адрес сервера, где запущен Selenoid.


В поле Remote Port указываем port, на котором запущен Selenoid — обычно это 4444.


В поле Remote Path указываем /wd/hub


В Desired Capabiliting указываем нужные вам Capabilities.


Минимальный JSON получается такой:


{
  "browserName": "chrome",
  "browserVersion": "mobile-75.0",
  "enableVNC": true
}

После старта сессии у вас появится вот такая картина:



Теперь можно исследовать/искать нужные вам location.



Телеграм чаты:


https://t.me/aerokube — chat Aerokube


https://t.me/atinfo_chat — chat for test automation engineers

Теги:
Хабы:
Если эта публикация вас вдохновила и вы хотите поддержать автора — не стесняйтесь нажать на кнопку
+7
Комментарии1

Публикации

Истории

Работа

Ближайшие события