20+ инструментов для тестирования мобильных приложений

При ручном тестировании (manual testing) тестировщики вручную выполняют тесты, не используя никаких средств автоматизации. Ручное тестирование – самый низкоуровневый и простой тип тестирования, не требующий большого количества дополнительных знаний.

ОО-язык, который принадлежит корпорации Oracle. Java придерживается принципа WORA, что расшифровывается как «write-once-run-anywhere» (на русском: «напиши единожды, запускай повсюду»). Это даёт много межплатформенных преимуществ. Этот язык в своих внутренних системах использует большое количество разных крупных компаний. В современном мире насчитывается больше 3 млрд устройств, на которых установлены Java-приложения.

Для модульного тестирования чаще всего используют JUnit. В. Если речь идёт о браузерах, пользуются библиотека JUnit и инструмент Selenium WebDriver. Также можно посоветовать следующие фреймворки:

  1. JBehave;
  2. TestNG;
  3. Cucumber.

What you will learn

  • Писать авто-тесты на языке Python для проверки корректности работы интерфейсов ваших проектов с помощью фреймворка Selenium
  • Работать с веб-элементами для написания авто-тестов
  • Проектировать авто-тесты правильно с целью повышения их стабильности и удобства их поддержания
  • Использовать тестовые фреймворки (в основном, pytest), которые позволяют удобно настраивать запуск тестов, подготовку данных и понятные читаемые результаты прохождения тест-сценариев (не просто упал/не упал, а на каком шаге и почему)
  • Использовать паттерн проектирования PageObject для написания читаемых тест-сценариев, которые легко поддерживать и создавать
  • На базовом уровне работать с git и Github

Место автоматизации GUI в процессе разработки

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

Инструменты для автоматизации GUI

Путем проб и ошибок мы в Ukad пришли к следующему инструментарию для GUI автоматизации:

  • Java — как язык для написания тест-скриптов.
  • Maven — для сборки проекта.
  • Selenide — как фреймворк для написания GUI тестов.
  • TestNG — как фреймворк для управления запуском тестов.
  • Selenoid — для непосредственного управления сессиями браузера.
  • Allure — для создания и эффектной презентации отчета.
  • Jenkins — для непрерывной интеграции тестов в процесс разработки.

Более подробно об инструментах и причинах, почему мы выбрали именно этот набор:

  • Java. Мы используем Java, так как это путь наименьшего сопротивления ведь сообщество просто огромно, что дает доступ к большому количеству готовых решений для тестирования и не только. Это в свою очередь позволяет не тратить много времени на исследование и решение часто возникающих проблем, так как очень велика вероятность того, что решение уже найдено.
  • Maven. Можно использовать любой другой сборщик. Для автотестов это не принципиально, но лично мне Maven ближе.
  • Selenide позволяет не изобретать свой велосипед для решения стандартных проблем Selenium (таких как ожидания и поиск элементов на странице, добавление «мягких» проверок и т. д.) и значительно повысить скорость разработки и стабильность тестов.
  • TestNG. Мы перешли с Junit на TestNG для использования наборов на основе .xml файлов, а также возможности объединения тестов в группы.
  • Selenoid. Мы используем Selenoid вместо Selenium Hub, так как он более стабилен и позволяет запускать сессии браузеров в Docker контейнерах, плюс добавляет такие приятные бонусы, как просмотр выполнения конкретного теста и запись видео его прохождения.
  • Allure. Позволяет значительно расширить возможности стандартного TestNG отчета, эффектно и удобно презентовать всю информацию о пройденных сценариях. В репорте каждый член команды сможет найти для себя полезную информацию. Начиная от времени и количества пройденных сценариев с результатами прохождения, до прикрепленного видео прохождения и скриншотами для упавших тестов.
  • Jenkins. Мы используем Jenkins для сборки некоторых своих проектов, поэтому мы решили использовать его же для сборки тестов. Также с Jenkins удобно интегрировать Allure репорты при помощи дополнительного плагина.
Читайте также:  Способы переноса контактов с одного iPhone на другой

Знакомство с гостями

Александр Шуков в игровой индустрии с 2011 года, сейчас он работает в минском офисе Wargaming на проекте World of Tanks. Он начинал как Manual QA engineer, а потом на несколько лет ушёл в функциональное тестирование игрового сервера. Затем в RND группу, в которой занимался углубленной автоматизацией. Пару лет назад в компании создали полноценный отдел QA Automation, и Шуков с тех пор занимает там должность тимлида и техлида.

Александр Романов начал заниматься тестированием в 2011 году, но в геймдев пришёл чуть больше трёх лет назад. До этого он занимался автоматизацией на разных системах, в том числе финансовых. Сейчас в Playtika он занимается автоматизацией тестирования игры Caesars Casino. До этого тоже был одновременно техлидом и тимлидом.

Создание своего первого макроса

Прошу прощения за длительную теорию, теперь немедленно приступаем к созданию своего первого макроса задача которого объединить несколько документов формата PDF в один, предоставляя нам право выбора исходных файлов, а затем показать на рабочем столе результат.

Создание своего первого макроса

Как я уже не раз говорил, макрос это логическая последовательность действий, в нашем примере таких действий три: выбор исходных данных; процесс конвертации (визуально не отображается) и вывод результата.

Добавляем первое действие «запросить объекты finder» путем перетаскивания его из библиотеки в рабочую область программы.

Создание своего первого макроса

Не забудьте поставить галочку множественный выбор, это позволит программе понять, что нам необходимо получить не один файл, а несколько.

Получение исходных данных мы задали, теперь нужно их обработать, в нашем случае это «объединить PDF-страницы»

Создание своего первого макроса

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

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

Создание своего первого макроса

Ну вот и все, осталось сохранить наш проект.

Читайте также:  Как настроить айфон: от будильника до переадресации

Не забудьте убедиться, что формат сохраняемого файла — программа. Выбираем место где она будет храниться и проверяем, должен получиться файл с расширением *.app.

Создание своего первого макроса

Программа готова, теперь когда вы ее запустите она попросит у вас файлы для обработки, склеит их и сохранит на рабочем столе.

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

P.S. Еще до того как задумывался этот цикл, я уже писал о том как с помощью automator сделать службу которая позволяет быстро сохранять текст в заметки.

Пример использования GUI автоматизации

Создаем проект с тестами

Пример использования GUI автоматизации

Рассмотрим, как используется GUI автоматизация на примере простого теста. Для этого создадим Maven-проект и подключим необходимые зависимости для Selenide, TestNG и Allure. Добавим простой тест, который будет открывать главную страницу сайта и проверять, что футер отображается. Для написания теста используется PageObject паттерн. Для управлением драйверами браузера используется WebDriverManager.

Актуальный и исходный код проекта доступен по ссылке.

Пример использования GUI автоматизации

Проект может быть запущен командой «mvn test» (Maven должен быть установлен и добавлен к системным переменным). Все работает, но тест будет запущен в локальном браузере, а нам необходимо запускать на тестовом стенде. Самые популярные варианты удаленного запуска тестов — Selenium hub и Selenoid. Остановимся подробнее на Selenoid.

Selenoid

Пример использования GUI автоматизации

Selenoid — это имплементация Selenium hub кода, использующая Docker-контейнеры для запуска браузера, что позволяет нам не задумываться об управлении браузерами и сессиями. Для каждого теста будет запущен свой Docker-контейнер, который будет остановлен после окончания теста. После установки Selenoid (по ссылке доступна подробная инструкция по установке) нам только остается подправить код создания драйвера на код предложенный Selenoid.

Снова запустим наш проект командой “mvn test”.

Пример использования GUI автоматизации

Тест работает. Но что если мы хотим видеть выполнение теста? Для этого достаточно добавить дополнительный параметр в создание браузера и использовать Selenoid контейнеры с поддержкой VNC, например “selenoid/vnc:chrome_66.0” для 66 версии Chrome. Также нужно добавить дополнительную Capability к созданию браузера “(«enableVNC», true);”.

Вот так выглядит после обновления. Для простоты я оставил только Chrome 66 версии.

Пример использования GUI автоматизации

Также добавим дополнительную Capability к созданию драйвера “(«enableVNC», true);”.

Запустим наш тест еще раз и перейдем на вкладку «Session». Теперь мы можем следить за выполнением теста.

Пример использования GUI автоматизации

Но для эффективного использования автотестов необходима непрерывная интеграция с процессом разработки. Для этого мы используем Jenkins.

Jenkins CI

Пример использования GUI автоматизации

Jenkins — проект для непрерывной интеграции с открытым исходным кодом, написанный на Java. Используется для сборки и поставки программного обеспечения. У нас есть возможность использовать Jenkins для запуска тестов для каждой новой сборки тестируемого продукта. Для создания тестовой сборки нам необходимо установить дополнительные плагины:

  • Maven Integration — для более удобной интеграции с Maven.
  • Allure Jenkins Plugin — для генерации и отображения отчета.
Пример использования GUI автоматизации

Создадим новую Jenkins job с типом «Maven project».

Добавим наш репозиторий с тестами в секцию «Source Code Management».

Пример использования GUI автоматизации

Для генерации Allure отчета добавим «Post-build Actions» -> «Allure report».

Читайте также:  Android process media произошла ошибка как исправить?

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

Пример использования GUI автоматизации

А вот и Allure отчет.

Финальная стадия интеграции — связываем нашу тестовую сборку со сборкой нашего тестируемого приложения путем добавления в «Build Triggers» — > «Project to watch».

Пример использования GUI автоматизации

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

Полезные ссылки

  • официальная документация Selenide;
  • официальная документация TestNG;
  • официальная страница Maven;
  • официальная документация Selenoid;
  • официальная документация Allure;
  • официальная документация Jenkins;
  • Иван Крутов «Selenoid: запускаем Selenium тесты в Docker контейнерах» — обзорный доклад о Selenoid от одного из разработчиков;
  • Allure 2: new gen test report tool — обзорный доклад по Allure 2 от разработчика.

Что в итоге?

  • Язык программирования позволит нам расширять фреймворк как нам будет угодно и не страдать от недостатка какой-либо функциональности в готовых решениях;
  • Средства сборки позволят легко добавлять новые библиотеки и запускать из консоли наши тесты;
  • xUnit-библиотеки делают наш фреймворк тестовым фреймворком и позволяют запускаться в параллели;
  • Page Object Model разбивает фреймворк на структуру, позволяющую использовать разные его части как маленькие кубики конструктора. К тому же, работа с GIT сильно облегчается благодаря более редким конфликтам;
  • Описание моделей, используя аннотации из gson помогает быстрой сериализации в REST API-объекты для использования в адаптерах при подготовке тестовых данных. SQL здесь же в случае, если REST API отсутствует;
  • Selenide/Selenium — решать вам самим. Я к примеру устал от вечных ();
  • Continuous Integration — просто must have и не заканчивается на Jenkins;
  • Логи, репортинг, кастомные exceptions — сильно облегчают последующие дебаг и увеличивают уровень счастья заказчика;
  • utils/others, ресурсы — вспомогательные классы/файлы для любых действий не связанных с пунктами, перечисленными выше.

У вас есть что добавить к архитектуре фреймворка?

Mобильные эмуляторы и инструменты тестирования

Дополнительная помощь тестировщику, у которого не все физические смартфоны / планшеты под руками, а тест нужно провести быстро. Большинство из инструментов в этой рубрике — веб-сервисы с интерактивным интерфейсом, работающим в практически любом современном браузере.

mobiReady

Инструмент верификации и оценки готовности сайтов и прототипов для мобильных устройств. Есть подсказки и рекомендации по тестированию и оптимизации сайтов и приложений под различные мобильные гаджеты.

BrowserStack

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

CrossBrowserTesting

Кроссбраузерное тестирование для iOS, Android и Blackberry.

Screenfly

Инструмент-эмулятор для готовых приложений, сайтов и интерактивных прототипов. Есть поддержка разных диагоналей экрана и устройств.

Mobile phone emulator

Эмулятор различных мобильных телефонов для проверки совместимости приложения.

Responsive

Инструмент тестирования приложений на предмет полноценной функциональности адаптивного дизайна.

ProtoFluid

Инструмент для тестирования адаптивного дизайна и «жидких» текстур.