# 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. Поднять окружение: ```bash docker compose up -d ``` 2. Убедиться, что сервисы `wiremock`, `android-emulator-1`, `android-emulator-2` имеют статус `healthy`: ```bash docker compose ps ``` 3. Подготовить переменные окружения (использовать один из вариантов): Вариант A: через `.env` - скопировать `.env.example` в `.env`; - заполнить `.env` актуальными значениями вашей среды; - загрузить `.env` в текущую shell-сессию. PowerShell: ```powershell Get-Content .env | Where-Object { $_ -match '^[^#].+=.+' } | ForEach-Object { $name, $value = $_ -split '=', 2 [System.Environment]::SetEnvironmentVariable($name, $value, 'Process') } ``` bash: ```bash set -a source .env set +a ``` Вариант B: напрямую в shell-сессии PowerShell: ```powershell $env:DB_URL="jdbc:postgresql://:/" $env:DB_USER="" $env:DB_PASSWORD="" $env:MOBILE_HOST="127.0.0.1" ``` bash: ```bash export DB_URL="jdbc:postgresql://:/" export DB_USER="" export DB_PASSWORD="" export MOBILE_HOST="127.0.0.1" ``` Оба варианта эквивалентны: тесты используют переменные окружения процесса. Тестовые пользователи зафиксированы в коде (`TestAccount`): - `user1us` — тест списков желаний; - `user2us` — тест подарков; - `user3us` — пользователь, который резервирует подарок; - `user4us` — пользователь-владелец списка в тесте резервирования. Для production-подобного запуска используйте шаблон `.env.production.example` и не коммитьте реальные значения в репозиторий. Тесты запускаются параллельно по классам (2 потока) и распределяются по эмуляторам через очередь. 4. Запустить тесты: ```bash mvn test ``` Примечание: эмуляторы зафиксированы в enum `TestEmulator` (порты `4723` и `4725`), в конфигурации задается только хост (`MOBILE_HOST`).