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

    Я из компании 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 на хостовую систему добавьте в файл /etc/hosts следующие строки:


    ip-основного-хоста hypervisor

    DEMO TEST


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


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



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


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


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

    на


    device.setCapability("app", "http://ссылка-до-вашей-apk");


    или


    device.setCapability("app", "http://hypervisor:8000/game2048.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

    AdBlock похитил этот баннер, но баннеры не зубы — отрастут

    Подробнее
    Реклама

    Комментарии 0

    Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

    Самое читаемое