update configuration and documentation

This commit is contained in:
2026-04-14 11:40:14 +03:00
parent 6a19b574b8
commit 0cd4e29d02
4 changed files with 93 additions and 29 deletions
+11
View File
@@ -0,0 +1,11 @@
DB_URL=jdbc:postgresql://<host>:<port>/<db>
DB_USER=<db_user>
DB_PASSWORD=<db_password>
WISHLISTS_USERNAME=<login_1>
WISHLISTS_PASSWORD=<password_1>
GIFTS_USERNAME=<login_2>
GIFTS_PASSWORD=<password_2>
RESERVATION_USERNAME=<login_3>
RESERVATION_PASSWORD=<password_3>
RESERVATION_OWNER=<login_owner>
+1
View File
@@ -5,3 +5,4 @@ build/
.DS_Store .DS_Store
allure-results/ allure-results/
logcat.txt logcat.txt
.env
+61 -19
View File
@@ -19,14 +19,6 @@
- `src/test/java` — только тестовые классы. - `src/test/java` — только тестовые классы.
- `wiremock` — маппинги и APK. - `wiremock` — маппинги и APK.
## Тестовые аккаунты
- `user1us / user1us`
- `user2us / user2us`
- `user3us / user3us`
- `user4us / user4us`
`user4us` используется как владелец подарка в тесте резервирования.
## Запуск ## Запуск
1. Поднять окружение: 1. Поднять окружение:
```bash ```bash
@@ -38,23 +30,73 @@ docker compose up -d
docker compose ps docker compose ps
``` ```
3. Указать доступ к БД: 3. Подготовить переменные окружения (использовать один из вариантов):
Вариант A: через `.env`
- скопировать `.env.example` в `.env`;
- заполнить `.env` актуальными значениями вашей среды;
- загрузить `.env` в текущую shell-сессию.
PowerShell: PowerShell:
```powershell ```powershell
$env:DB_URL="jdbc:postgresql://sql.otus.kartushin.su:5432/wishlist" Get-Content .env | Where-Object { $_ -match '^[^#].+=.+' } | ForEach-Object {
$env:DB_USER="student" $name, $value = $_ -split '=', 2
$env:DB_PASSWORD="student" [System.Environment]::SetEnvironmentVariable($name, $value, 'Process')
``` }
bash:
```bash
export DB_URL="jdbc:postgresql://sql.otus.kartushin.su:5432/wishlist"
export DB_USER="student"
export DB_PASSWORD="student"
``` ```
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. Запустить тесты: 4. Запустить тесты:
```bash ```bash
mvn test mvn test
``` ```
Тесты запускаются параллельно по классам (2 потока) и распределяются по эмуляторам через очередь. Примечание: если нужен запуск только на одном эмуляторе, можно поднять только `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"
```
@@ -1,7 +1,7 @@
package ru.otus.mobile.config; package ru.otus.mobile.config;
public enum TestAccount { public enum TestAccount {
WISHLISTS("user1us", "user1us", """ WISHLISTS("WISHLISTS", "user1us", "user1us", """
WITH target_user AS ( WITH target_user AS (
SELECT id FROM users WHERE username = ? SELECT id FROM users WHERE username = ?
), ),
@@ -14,7 +14,7 @@ public enum TestAccount {
) )
SELECT 1; SELECT 1;
"""), """),
GIFTS("user2us", "user2us", """ GIFTS("GIFTS", "user2us", "user2us", """
WITH target_user AS ( WITH target_user AS (
SELECT id FROM users WHERE username = ? SELECT id FROM users WHERE username = ?
), ),
@@ -27,7 +27,7 @@ public enum TestAccount {
) )
SELECT 1; SELECT 1;
"""), """),
RESERVATION("user3us", "user3us", """ RESERVATION("RESERVATION", "user3us", "user3us", """
WITH owner_user AS ( WITH owner_user AS (
SELECT id FROM users WHERE username = ? SELECT id FROM users WHERE username = ?
), ),
@@ -59,25 +59,35 @@ public enum TestAccount {
FROM owner_wishlist; FROM owner_wishlist;
"""); """);
private final String username; private final String envPrefix;
private final String password; private final String defaultUsername;
private final String defaultPassword;
private final String resetSql; private final String resetSql;
TestAccount(String username, String password, String resetSql) { TestAccount(String envPrefix, String defaultUsername, String defaultPassword, String resetSql) {
this.username = username; this.envPrefix = envPrefix;
this.password = password; this.defaultUsername = defaultUsername;
this.defaultPassword = defaultPassword;
this.resetSql = resetSql; this.resetSql = resetSql;
} }
public String username() { public String username() {
return username; return resolve(envPrefix + "_USERNAME", defaultUsername);
} }
public String password() { public String password() {
return password; return resolve(envPrefix + "_PASSWORD", defaultPassword);
} }
public String resetSql() { public String resetSql() {
return resetSql; return resetSql;
} }
private String resolve(String envKey, String defaultValue) {
String value = System.getenv(envKey);
if (value == null || value.isBlank()) {
return defaultValue;
}
return value;
}
} }