# 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:WISHLISTS_USERNAME="" $env:WISHLISTS_PASSWORD="" $env:GIFTS_USERNAME="" $env:GIFTS_PASSWORD="" $env:RESERVATION_USERNAME="" $env:RESERVATION_PASSWORD="" $env:RESERVATION_OWNER="" ``` bash: ```bash export DB_URL="jdbc:postgresql://:/" export DB_USER="" export DB_PASSWORD="" export WISHLISTS_USERNAME="" export WISHLISTS_PASSWORD="" export GIFTS_USERNAME="" export GIFTS_PASSWORD="" export RESERVATION_USERNAME="" export RESERVATION_PASSWORD="" export RESERVATION_OWNER="" ``` Оба варианта эквивалентны: тесты используют переменные окружения процесса. Тесты запускаются параллельно по классам (2 потока) и распределяются по эмуляторам через очередь. 4. Запустить тесты: ```bash mvn test ``` Примечание: если нужен запуск только на одном эмуляторе, можно поднять только `wiremock` и `android-emulator-1`, а перед `mvn test` задать: PowerShell: ```powershell $env:MOBILE_EMULATORS="android-emulator-1|http://127.0.0.1:4723|Android Emulator" ``` bash: ```bash export MOBILE_EMULATORS="android-emulator-1|http://127.0.0.1:4723|Android Emulator" ```