Это руководство представляет собой пошаговое руководство для людей, которые хотят запускать тесты 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
.
anaconda
не установлено:pip install --user virtualenv
- Если вы установили
anaconda
:conda install virtualenv
Настроить virtualenv
virtualenv venv source venv/bin/activate # Enter virtual environment
Установить зависимости
Поскольку мы вошли в виртуальную среду с предыдущих шагов, любые устанавливаемые нами пакеты Python будут локализованы на virtualenv этого проекта.
Пакеты для установки:
Appium-Python-Client
: Наш клиент Appiumselenium
: Наш веб-драйвер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
.
Запустить тест
- Запустить эмулятор
- Запустить сервер разработки React Native:
react-native start
yarn test
- Ваш тест должен быть успешным!
Тест кнопки
Добавьте следующий код в ./__tests__/test_main.py
.
Давайте добавим кнопку, которая увеличивает счетчик на экране. Ваш ./index.android.js
теперь должен выглядеть так:
Запустите тест. Вы должны увидеть, как приложение само нажимает кнопку, и счетчик должен увеличиваться. Все ваши тесты должны пройти.
Теперь, когда мы написали несколько тестов и успешно запустили их на эмуляторе на наших локальных машинах, давайте попробуем запустить их на AWS Device Farm.
AWS Device Farm
Обновить тестовый код для AWS
Когда мы запускаем наши тесты на AWS, желаемые возможности должны быть пустыми. Давайте обновим код, чтобы мы могли работать на наших локальных машинах и AWS.
Создать APK-файл приложения
Нам нужно будет создать рабочий apk, который будет загружен в AWS:
cd android && ./gradlew assembleRelease
- Файл находится по адресу:
./android/app/build/outputs/apk/app-release-unsigned.apk
Упакуйте свои тесты
Следуйте официальному руководству Amazon по упаковке тестов для AWS Device Farm.
Запуск тестов на AWS
- Зарегистрироваться в AWS Device Farm
- Создать новый проект
- Создать новую серию ›Загрузить apk продукции
- Настроить тест ›Appium Python› Загрузить zip-файл тестового пакета
- Выбрать устройства
- Укажите состояние устройства
- Обзор и запуск ›Установите максимальное время для каждого устройства
- Подождите, пока запустятся тесты
Готово! Спасибо за чтение, и я надеюсь, что этот урок был для вас полезным!
Сопутствующий код к этой статье можно найти в этом репо:
На заметку об 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
.