OTUS Homework 7: Mobile Testing

Проект содержит мобильные UI-тесты приложения Wishlist на selenide-appium.

Сценарии:

  • создание/редактирование списка желаний;
  • создание/редактирование подарка;
  • изменение статуса резервирования подарка другого пользователя.

Что реализовано по требованиям

  • docker-compose поднимает wiremock и 2 Android-эмулятора (android-emulator-1, android-emulator-2) для параллельного запуска.
  • APK хранится в wiremock/__files/wishlist.apk и устанавливается через Appium capability app.
  • DI на Guice, запуск через JUnit 5 Extension, балансировка эмуляторов через BlockingQueue.
  • Подготовка тестовых данных выполняется через JDBC перед каждым тестом.
  • Логи logcat сохраняются в logcat.txt через Appium logs API (без ADB-скриптов).

Структура

  • src/main/java — инфраструктура, конфиги, page/component object.
  • src/test/java — только тестовые классы.
  • wiremock — маппинги и APK.

Запуск

  1. Поднять окружение:
docker compose up -d
  1. Убедиться, что сервисы wiremock, android-emulator-1, android-emulator-2 имеют статус healthy:
docker compose ps
  1. Подготовить переменные окружения (использовать один из вариантов):

Вариант A: через .env

  • скопировать .env.example в .env;
  • заполнить .env актуальными значениями вашей среды;
  • загрузить .env в текущую shell-сессию.

PowerShell:

Get-Content .env | Where-Object { $_ -match '^[^#].+=.+' } | ForEach-Object {
  $name, $value = $_ -split '=', 2
  [System.Environment]::SetEnvironmentVariable($name, $value, 'Process')
}

bash:

set -a
source .env
set +a

Вариант B: напрямую в shell-сессии

PowerShell:

$env:DB_URL="jdbc:postgresql://<host>:<port>/<db>"
$env:DB_USER="<db_user>"
$env:DB_PASSWORD="<db_password>"
$env:MOBILE_HOST="127.0.0.1"

bash:

export DB_URL="jdbc:postgresql://<host>:<port>/<db>"
export DB_USER="<db_user>"
export DB_PASSWORD="<db_password>"
export MOBILE_HOST="127.0.0.1"

Оба варианта эквивалентны: тесты используют переменные окружения процесса.

Тестовые пользователи зафиксированы в коде (TestAccount):

  • user1us — тест списков желаний;
  • user2us — тест подарков;
  • user3us — пользователь, который резервирует подарок;
  • user4us — пользователь-владелец списка в тесте резервирования.

Для production-подобного запуска используйте шаблон .env.production.example и не коммитьте реальные значения в репозиторий.

Тесты запускаются параллельно по классам (2 потока) и распределяются по эмуляторам через очередь. 4. Запустить тесты:

mvn test

Примечание: эмуляторы зафиксированы в enum TestEmulator (порты 4723 и 4725), в конфигурации задается только хост (MOBILE_HOST).

S
Description
No description provided
Readme 9.2 MiB
Languages
Java 100%