refactor project structure and stabilize execution
This commit is contained in:
@@ -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 потока) и распределяются по эмуляторам через очередь.
|
||||
|
||||
Reference in New Issue
Block a user