refactor project structure and stabilize execution

This commit is contained in:
2026-04-14 09:21:46 +03:00
parent ea52943000
commit 6a19b574b8
8 changed files with 40 additions and 89 deletions
+32 -49
View File
@@ -1,33 +1,25 @@
# OTUS Homework 7: Mobile Testing
Проект содержит мобильные UI-тесты для приложения Wishlist на базе `selenide-appium`.
Проект содержит мобильные UI-тесты приложения Wishlist на `selenide-appium`.
Реализованы сценарии:
- создание и редактирование списка желаний;
- создание и редактирование подарка;
Сценарии:
- создание/редактирование списка желаний;
- создание/редактирование подарка;
- изменение статуса резервирования подарка другого пользователя.
## Архитектура
- `Guice` для DI.
- `JUnit 5 Extension` вместо базового тестового класса.
- `AbsPageObject` -> `AbsBasePage` / `BaseMobileComponent`.
- `BlockingQueue` для распределения тестов по эмуляторам.
- код инфраструктуры и page object находится в `src/main/java`;
- в `src/test/java` находятся только тестовые классы.
## Что реализовано по требованиям
- `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-скриптов).
## Инфраструктура
`docker-compose.yml` поднимает:
- `wiremock` для раздачи `wishlist.apk`;
- `android-emulator-1` (Android 13, Appium `:4723`, VNC `:6080`);
- `android-emulator-2` (Android 12, Appium `:4725`, VNC `:6081`).
Приложение не маунтится в эмулятор и не ставится через ADB.
APK скачивается Appium по capability `app`.
Источник APK для Wiremock: файл `wishlist-349317-5fd795.apk` в корне проекта.
Эмулятор запускается без `privileged`, доступ к аппаратной виртуализации передается через `/dev/kvm`.
## Структура
- `src/main/java` — инфраструктура, конфиги, page/component object.
- `src/test/java` — только тестовые классы.
- `wiremock` — маппинги и APK.
## Тестовые аккаунты
Тесты используют заранее созданные аккаунты:
- `user1us / user1us`
- `user2us / user2us`
- `user3us / user3us`
@@ -35,43 +27,34 @@ APK скачивается Appium по capability `app`.
`user4us` используется как владелец подарка в тесте резервирования.
## Подготовка
Нужно задать доступ к БД, иначе `mvn test` завершится ошибкой:
## Запуск
1. Поднять окружение:
```bash
docker compose up -d
```
2. Убедиться, что сервисы `wiremock`, `android-emulator-1`, `android-emulator-2` имеют статус `healthy`:
```bash
docker compose ps
```
3. Указать доступ к БД:
PowerShell:
```powershell
$env:DB_URL="jdbc:postgresql://sql.otus.kartushin.su:5432/wishlist"
$env:DB_USER="student"
$env:DB_PASSWORD="student"
```
## Запуск
1. Поднять окружение:
bash:
```bash
docker compose up -d
export DB_URL="jdbc:postgresql://sql.otus.kartushin.su:5432/wishlist"
export DB_USER="student"
export DB_PASSWORD="student"
```
2. Дождаться статуса `healthy` у `wiremock`, `android-emulator-1`, `android-emulator-2`:
```bash
docker compose ps
```
Тесты не ждут загрузку эмулятора сами. Готовность окружения проверяется на уровне Docker Compose.
3. Запустить тесты:
4. Запустить тесты:
```bash
mvn test
```
По умолчанию тесты запускаются параллельно на уровне классов (2 потока), а сессии распределяются по эмуляторам через `BlockingQueue`.
Опционально можно явно задать пул эмуляторов:
```powershell
$env:MOBILE_EMULATORS="android-emulator-1|http://localhost:4723|Android Emulator,android-emulator-2|http://localhost:4725|Android Emulator"
```
## Логи
После выполнения тестов logcat сохраняется в файл `logcat.txt` в корне проекта через Selenium/Appium logs API.
Тесты запускаются параллельно по классам (2 потока) и распределяются по эмуляторам через очередь.