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

Для этого мы будем использовать AWS Device Farm.

В моей предыдущей статье по теме E2E Testing for React Native Android:



Я упомянул, что:

Если вы хотите запустить Appium на AWS Device Farm для тестирования своего приложения на реальных устройствах, вам нужно будет использовать Appium Python. Они не поддерживают Appium JS.

Если вы не знаете Python, вот краткое руководство по нему: https://learnxinyminutes.com/docs/python3/

Настраивать

Следуйте официальному руководству Facebook, чтобы начать проект React Native. Обязательно выберите Создание проектов с использованием собственного кода.

Установить аппиум, аппиум-доктор

yarn add --dev appium appium-doctor

Добавить скрипты, связанные с appium, в package.json

Запускаем аппиум-доктор

yarn run appium-doctor

Вам нужно будет исправить ошибки, которые выдает appium-doctor. Однако в целях тестирования Android вы можете игнорировать все, что связано с iOS (xCode, Carthage).

Запустить сервер Appium

yarn run appium

Запомните порт, он понадобится вам позже (порт по умолчанию - 4723).

Установка материалов на Python

Установить virtualenv

Есть несколько способов установить virtualenv.

  1. anaconda не установлено: pip install --user virtualenv
  2. Если вы установили anaconda: conda install virtualenv

Настроить virtualenv

virtualenv venv
source venv/bin/activate # Enter virtual environment

Установить зависимости

Поскольку мы вошли в виртуальную среду с предыдущих шагов, любые устанавливаемые нами пакеты Python будут локализованы на virtualenv этого проекта.

Пакеты для установки:

  • Appium-Python-Client: Наш клиент Appium
  • selenium: Наш веб-драйвер
  • pytest: Наш тестовый исполнитель
  • toolz: Некоторые вспомогательные функции
pip install Appium-Python-Client selenium pytest

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

pip freeze > requirements.txt

Базовый тест

Теперь, когда все готово, давайте напишем наш первый тест.

Этот первый файл необходимо сохранить в: ./__tests__/conftest.py. Он устанавливает базовую инициализацию нашего веб-драйвера Appium. Обратите внимание, что функция отмечена декоратором pytest.fixture. Это позволяет использовать его в тестовых функциях позже.

Этот второй файл необходимо сохранить в: ./__tests__/test_main.py. В этом файле используется driver прибор, который мы сделали в conftest.py. Он использует объект driver, полученный прибором.

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

Этот базовый тест просто проверяет, существует ли представление с accessibilityLabel="testview".

На что следует обратить внимание:

  • Путь к приложению в конфигурации указывается относительно корня вашего проекта. Не относительно тестового файла .

Вы можете спросить: «Почему accessibilityLabel?». Вот как мы ищем элементы при тестировании с помощью Appium и React Native. Это также совместимо с тестированием iOS в Appium. Предположительно в будущем будет testID поддержка, но пока это рекомендуемый способ.

Давайте добавим accessibilityLabel="testview" в корень представления нашего приложения в ./index.android.js.

Запустить тест

  1. Запустить эмулятор
  2. Запустить сервер разработки React Native: react-native start
  3. yarn test
  4. Ваш тест должен быть успешным!

Тест кнопки

Добавьте следующий код в ./__tests__/test_main.py.

Давайте добавим кнопку, которая увеличивает счетчик на экране. Ваш ./index.android.js теперь должен выглядеть так:

Запустите тест. Вы должны увидеть, как приложение само нажимает кнопку, и счетчик должен увеличиваться. Все ваши тесты должны пройти.

Теперь, когда мы написали несколько тестов и успешно запустили их на эмуляторе на наших локальных машинах, давайте попробуем запустить их на AWS Device Farm.

AWS Device Farm

Обновить тестовый код для AWS

Когда мы запускаем наши тесты на AWS, желаемые возможности должны быть пустыми. Давайте обновим код, чтобы мы могли работать на наших локальных машинах и AWS.

Создать APK-файл приложения

Нам нужно будет создать рабочий apk, который будет загружен в AWS:

  1. cd android && ./gradlew assembleRelease
  2. Файл находится по адресу: ./android/app/build/outputs/apk/app-release-unsigned.apk

Упакуйте свои тесты

Следуйте официальному руководству Amazon по упаковке тестов для AWS Device Farm.

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

  1. Зарегистрироваться в AWS Device Farm
  2. Создать новый проект
  3. Создать новую серию ›Загрузить apk продукции
  4. Настроить тест ›Appium Python› Загрузить zip-файл тестового пакета
  5. Выбрать устройства
  6. Укажите состояние устройства
  7. Обзор и запуск ›Установите максимальное время для каждого устройства
  8. Подождите, пока запустятся тесты

Готово! Спасибо за чтение, и я надеюсь, что этот урок был для вас полезным!

Сопутствующий код к этой статье можно найти в этом репо:



На заметку об AWS

  • Возможно, вам придется следить за структурой папок в zip-файле. Иногда в прошлом у меня были проблемы с zip-файлом, который содержал папку верхнего уровня. Однако я не столкнулся с этими проблемами при написании этого руководства.
  • Убедитесь, что у Appium-Python-Client правильная версия для AWS. Возможно, вам потребуется перейти на Appium-Python-Client==0.20.
  • Вы можете получить эту ошибку для команды driver.send_keys: https://github.com/appium/python-client/issues/162. В этом случае вам нужно будет перейти на selenium==3.3.1.
  • AWS будет отключать сервер Appium для каждого теста, поэтому фикстуры pytest с объемом module работать не будут. Все приспособления теперь фактически ограничены до function.