103 lines
3.9 KiB
Markdown
103 lines
3.9 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:WISHLISTS_USERNAME="<login_1>"
|
||
$env:WISHLISTS_PASSWORD="<password_1>"
|
||
$env:GIFTS_USERNAME="<login_2>"
|
||
$env:GIFTS_PASSWORD="<password_2>"
|
||
$env:RESERVATION_USERNAME="<login_3>"
|
||
$env:RESERVATION_PASSWORD="<password_3>"
|
||
$env:RESERVATION_OWNER="<login_owner>"
|
||
```
|
||
|
||
bash:
|
||
```bash
|
||
export DB_URL="jdbc:postgresql://<host>:<port>/<db>"
|
||
export DB_USER="<db_user>"
|
||
export DB_PASSWORD="<db_password>"
|
||
export WISHLISTS_USERNAME="<login_1>"
|
||
export WISHLISTS_PASSWORD="<password_1>"
|
||
export GIFTS_USERNAME="<login_2>"
|
||
export GIFTS_PASSWORD="<password_2>"
|
||
export RESERVATION_USERNAME="<login_3>"
|
||
export RESERVATION_PASSWORD="<password_3>"
|
||
export RESERVATION_OWNER="<login_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"
|
||
```
|
||
|