Запуск автотестов на реальных устройствах с помощью Amazon Device Farm и Browserstack

Руслан Дзутцев
Effective Developers
8 min readAug 6, 2020

Статья также доступна на английском языке по ссылке.

В настоящее время автоматизация тестирования стала повсеместной, и это неудивительно. Большое количество регрессий на различных проектах — это проблема ресурсов, и автоматизация помогает в этом вопросе как нельзя лучше. Однако если автоматизация тестирования веб-сайтов на различных браузерах с помощью Selenium — не слишком затратная штука, то автоматизация тестирования нативных (и не только) мобильных приложений требует определенных вложений.

Сами принципы тестирования говорят о том, что проверять продукт нужно как можно ближе к условиям его реального использования. В случае с мобильными приложениями QA-специалисту необходимо тестировать на реальных устройствах. И тут мы сталкиваемся с двумя проблемами.

Первая из них — отсутствие своей «фермы девайсов». Многие приложения нужно проверить на достаточно большом наборе различных по конфигурации устройств. Это значит, что устройства должны быть в наличии, так как эмуляторы и симуляторы не всегда дают нужное приближение к реальным условиям использования. И если не проблема проверить все на собственном смартфоне, а также прогнать на нем автотест, то когда для проверки нужно пять, десять или более устройств, тестирование становится весьма затратным, ведь каждое устройство нужно приобрести и потратить время на установку сборок и конфигурационное тестирование.

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

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

В современном мире не беда, если у вас под рукой нет большого количества реальных устройств для тестирования. Многие компании предлагают свой штат устройств, и сегодня мы рассмотрим две из них: Amazon Device Farm и BrowserStack. Обе фирмы давно известны тем, что предоставляют доступ к тестовым устройствам, но немногие знают, что они позволяют также провести автотесты на нескольких реальных устройствах одновременно. Как это сделать, мы расскажем ниже.

Amazon Device Farm

Для начала работы с Amazon Device Farm нужно пройти по ссылке https://aws.amazon.com/device-farm/ и нажать кнопку Create an AWS Account. Полностью описывать регистрацию на сервисе я не вижу смысла, там все достаточно подробно расписано. Если у вас уже есть аккаунт, можно пропустить этот шаг.

После регистрации мы попадем на страницу Device Farm (страница также доступна из консоли AWS по одноименному пункту меню), где предлагается создать новый проект для автоматизированного тестирования. Для создания проекта нажмите Create a new project.

Далее введите имя проекта и нажмите Create Project.

После чего откроется страница создания и прохождения тест-ранов.

А теперь выполним еще несколько манипуляций с нашими тестами.

Для тестов мы используем конфигурацию Appium + Java + Junit, и дальнейшие действия также будут описываться исходя из этой конфигурации. Ваша конфигурация может отличаться.

Для использования ADF необходимо создать архив с нашими тестами, которые будут запускаться на различных устройствах. Для этого нам нужно подключить некоторые плагины в файле проекта Pom.xml, а именно: Apache Maven JAR Plugin и Apache Maven Assembly Plugin. Для подключения в pom-файле следует прописать следующее:

<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.6</version>
<executions>
<execution>
<goals>
<goal>test-jar</goal>
</goals>
</execution>
</executions>
</plugin>

<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>2.10</version>
<executions>
<execution>
<id>copy-dependencies</id>
<phase>package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<outputDirectory>${project.build.directory}/dependency-jars/</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>

<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.5.4</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
<configuration>
<finalName>zip-with-dependencies</finalName>
<appendAssemblyId>false</appendAssemblyId>
<descriptors>
<descriptor>src/main/assembly/zip.xml</descriptor>
</descriptors>
</configuration>
</execution>
</executions>
</plugin>

</plugins>
</build>

Убедитесь, что используются самые последние версии плагинов. Обновите плагины при необходимости.

После того как Мавен подключит все плагины, нужно с их помощью составить jar-файлы нашего теста, а также архив с ними. Для этого в IntelliJ IDEA нужно открыть боковую панель Maven, открыть папку Plugins, открыть папку jar и нажать на jar:jar, а затем на jar:test-jar.

В результате работы плагинов в корневой папке проекта в папке target сформируется два jar-файла.

Далее в IDEA, в папке assembly, нужно запустить плагин под названием assembly:assembly.

После выполнения плагина в той же папке target появится zip-файл с нашими тестами. Он-то нам и понадобится в дальнейшем.

Вернемся в ADF. На странице с созданным проектом выбираем Create a new run.

Далее настроим наш тест-ран. На первом этапе нужно загрузить тестируемый APK. Для этого следует выбрать кнопку с Android/iOS и загрузить APK в предложенное поле.

После того как была загружена APK, станут доступны все Capabilities этого приложения. Следует убедиться, что все верно, после чего нажать Next step.

На следующем этапе нужно сконфигурировать непосредственно ваш тест. Для этого в выпадающем окне следует выбрать фреймворки, которые были использованы для его написания (у меня это Appium + Java + JUnit; если у вас была другая конфигурация, то выбрать из списка нужно именно ее).

Далее будет предложено загрузить тест. В качестве теста берем сформированный ранее zip-архив. Как только архив с тестами загрузился, можно выбрать опциональные конфигурации, такие как «Запись видео» и App Performance Data Capture (я рекомендую сделать это, так как дальнейшая отладка тестов будет проходить несколько проще), и переходить к следующему этапу.

На следующем этапе добавляем устройства, на которых хотим прогнать наше приложение по автотестам. Можно выбрать уже готовую конфигурацию, которую предлагает Amazon, либо нажать Create new device pool и задать набор устройств самостоятельно, указав его название и описание.

После того как устройства выбраны, переходим на следующий этап, на котором задается конфигурация устройств. Device Farm дает возможность добавить дополнительные данные, добавить другие приложения (например, для проверки взаимодействия), указать локацию устройства и многое другое. После того как нужная конфигурация для ваших устройств выбрана, переходим к заключительному этапу.

На заключительном этапе задается максимальное время работы для устройства, после чего устройство принудительно останавливается. Я рекомендую брать время с небольшим запасом. Если ваши тесты предположительно будут идти 20 минут, то следует взять 30–35 минут на каждое устройство. После выбора времени завершаем настройку конфигурации и начинаем тестовый прогон.

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

После успешного (или неуспешного) прохождения тестов появится сообщение об окончании выполнения. У нас будет возможность изучить логи по каждому устройству, посмотреть видеозапись выполнения тестов, ознакомиться с другими параметрами — например, с параметрами производительности.

BrowserStack

Чтобы запустить автотесты на Browserstack, нужно зарегистрироваться на browserstack.com. Ресурс предоставляет бесплатную пробную версию. Нажав на Free trial или Get started free, переходим к созданию аккаунта.

Можно создать бесплатный аккаунт с помощью учетной записи Google или через форму регистрации. После этого следует нажать кнопку Sign me up и перейти на главную страницу. Чтобы перейти на страницу с автотестами, нужно нажать ссылку App Automate.

Чтобы выполнить автотесты с помощью Browserstack, на текущей странице нужно нажать Get started with App Automate.

Будет предложено выбрать фреймворк, с помощью которого запускается тест. Для своих тестов я выбираю Appium, но также можно выбрать и Espresso, и XCUI.

После нажатия будут доступны настройки теста. Следует выбрать язык, на котором написаны тесты. У меня это будет Java, хотя для дальнейших действий это не так важно.

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

После выбора конфигураций будет сформирован код, который нужно добавить в свой проект, и теперь можно приступать к выполнению тестов.

Мы запускаем тесты так же, как если бы мы запускали их с обычного устройства.

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

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

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

Вывод

Если у вас нет своих устройств для автотестирования, или если вы хотите улучшить этот процесс, то «фермы девайсов» вполне способны помочь. Разобраться с запуском тестов недолго, и вы получите еще один эффективный инструмент в работе автоматизатором. Какую из «ферм» выбрать — вопрос удобства использования, каждый может остановиться на лучшем варианте для себя.

Если вам или кому-то из ваших знакомых нужно разработать качественное мобильное приложение, веб-сервис, или помочь в решении бизнес-задач, смело обращайтесь к нам в Effective, мы готовы сотрудничать с вами в любом виде: как на проекте целиком, так и на аутстафф. Связаться с нами можно через почту contact@effective.band

--

--