89 lines
3.8 KiB
Markdown
89 lines
3.8 KiB
Markdown
# 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://<host>:<port>/<db>"
|
|
$env:DB_USER="<db_user>"
|
|
$env:DB_PASSWORD="<db_password>"
|
|
$env:MOBILE_HOST="127.0.0.1"
|
|
```
|
|
|
|
bash:
|
|
```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. Запустить тесты:
|
|
```bash
|
|
mvn test
|
|
```
|
|
|
|
Примечание: эмуляторы зафиксированы в enum `TestEmulator` (порты `4723` и `4725`), в конфигурации задается только хост (`MOBILE_HOST`).
|