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. Поднять окружение:
docker compose up -d
  1. Убедиться, что сервисы wiremock, android-emulator-1, android-emulator-2 имеют статус healthy:
docker compose ps
  1. Подготовить переменные окружения (использовать один из вариантов):

Вариант A: через .env

  • скопировать .env.example в .env;
  • заполнить .env актуальными значениями вашей среды;
  • загрузить .env в текущую shell-сессию.

PowerShell:

Get-Content .env | Where-Object { $_ -match '^[^#].+=.+' } | ForEach-Object {
  $name, $value = $_ -split '=', 2
  [System.Environment]::SetEnvironmentVariable($name, $value, 'Process')
}

bash:

set -a
source .env
set +a

Вариант B: напрямую в shell-сессии

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:

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. Запустить тесты:

mvn test

Примечание: если нужен запуск только на одном эмуляторе, можно поднять только wiremock и android-emulator-1, а перед mvn test задать:

PowerShell:

$env:MOBILE_EMULATORS="android-emulator-1|http://127.0.0.1:4723|Android Emulator"

bash:

export MOBILE_EMULATORS="android-emulator-1|http://127.0.0.1:4723|Android Emulator"
S
Description
No description provided
Readme 9.2 MiB
Languages
Java 100%