Files
homework_7/README.md
T

103 lines
3.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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"
```