1
0
forked from BRT/arc
arc/tests/mock_server/WINDOWS.md
2026-04-12 15:17:28 +07:00

358 lines
14 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.

# Запуск тестов на Windows
## Оглавление
1. [Быстрый старт](#1-быстрый-старт)
2. [Вспомогательные скрипты](#2-вспомогательные-скрипты)
3. [Генерация FETCH_TRANSACTIONS задач](#3-генерация-fetch_transactions-задач)
4. [Ручной запуск (пошагово)](#4-ручной-запуск-пошагово)
5. [Мониторинг и отчёт](#5-мониторинг-и-отчёт)
6. [Ручной инжект задач](#6-ручной-инжект-задач)
7. [ADB на Windows](#7-adb-на-windows)
8. [Типовые проблемы](#8-типовые-проблемы)
9. [Быстрый чеклист](#9-быстрый-чеклист)
---
## 1. Быстрый старт
```powershell
cd tests\mock_server
powershell -ExecutionPolicy Bypass -File setup.ps1
```
Скрипт `setup.ps1` автоматически:
1. Проверяет / устанавливает **Python 3.12+** (через winget)
2. Устанавливает **Flask**
3. Создаёт вспомогательные скрипты `gen_transactions.ps1` и `run_server.ps1`
4. Находит `config.ini` и проверяет **базу данных**
5. Удаляет старые сгенерированные данные (профиль + scenarios, пул не трогает)
6. Генерирует `default_profile.json` и FETCH_PROFILE scenarios из БД
7. Если порт занят — убивает старый процесс
8. Переключает `config.ini` на mock (`apiBase=http://127.0.0.1:8888`)
9. Показывает сводку: устройства, профили, материалы, пул транзакций
10. Запускает mock-сервер и открывает HTML-отчёт в браузере
При первом логине ARC мок автоматически ставит **FETCH_PROFILE** задачи
на каждый материал. **FETCH_TRANSACTIONS** задачи нужно генерировать отдельно
(см. [раздел 3](#3-генерация-fetch_transactions-задач)).
### Параметры
| Параметр | По умолчанию | Описание |
|---|---|---|
| `-Port` | 8888 | Порт mock-сервера |
| `-FtPerMaterial` | 3 | FETCH_TRANSACTIONS на материал при бутстрапе (из пула) |
| `-SkipInstall` | — | Пропустить установку Python/Flask |
| `-GenerateOnly` | — | Только сгенерировать данные, не запускать сервер |
| `-Clean` | — | Также очистить пул транзакций (`scenarios/pool/`) |
### Примеры
```powershell
# Всё автоматически (установка + генерация + запуск)
.\setup.ps1
# На другом порту с 5 транзакциями на материал
.\setup.ps1 -Port 9999 -FtPerMaterial 5
# Пропустить установку (Python/Flask уже есть)
.\setup.ps1 -SkipInstall
# Только подготовить данные, сервер не запускать
.\setup.ps1 -GenerateOnly
# Полная очистка (включая пул транзакций)
.\setup.ps1 -Clean
```
---
## 2. Вспомогательные скрипты
После первого запуска `setup.ps1` в папке `tests\mock_server\` появляются
скрипты с зашитым путём до Python — искать `python.exe` вручную не нужно:
| Скрипт | Назначение | Запуск |
|---|---|---|
| `gen_transactions.ps1` | Генерация FETCH_TRANSACTIONS с устройства | `powershell -ExecutionPolicy Bypass -File gen_transactions.ps1` |
| `run_server.ps1` | Запуск mock-сервера | `powershell -ExecutionPolicy Bypass -File run_server.ps1` |
| `setup.ps1` | Полная установка + генерация + запуск | `powershell -ExecutionPolicy Bypass -File setup.ps1` |
Скрипты принимают дополнительные аргументы, которые передаются в Python-скрипт:
```powershell
# Генерация с явным серийником
powershell -ExecutionPolicy Bypass -File gen_transactions.ps1 --serial 28291FDH300712
# Запуск сервера на другом порту
powershell -ExecutionPolicy Bypass -File run_server.ps1 --port 9999
```
---
## 3. Генерация FETCH_TRANSACTIONS задач
FETCH_TRANSACTIONS задачи генерируются **только вручную** с живого устройства.
Скрипт подключается по ADB, проходит по списку транзакций на экране
(тап -> снятие суммы/даты -> назад) и сохраняет JSON-файлы в `scenarios/pool/`.
### Подготовка
1. Подключите устройство по USB
2. Убедитесь что ADB видит устройство:
```powershell
tools\adb\windows\adb.exe devices
# Должно показать серийник со статусом "device"
```
3. Откройте на устройстве банковское приложение на экране **списка транзакций**
- Ozon: раздел "Операции" -> список переводов/пополнений
- Dushanbe City Bank: раздел "Операции" -> список P2P операций
### Запуск
```powershell
# Через вспомогательный скрипт (рекомендуется)
cd tests\mock_server
powershell -ExecutionPolicy Bypass -File gen_transactions.ps1
# Или напрямую (если Python в PATH)
python tests\mock_server\gen_fetch_transactions.py
```
Скрипт:
1. Покажет меню с активными материалами:
```
Available materials (3):
1. Pixel 7 / ozon / Галина Терехина (material 30bc106c... serial=28291FDH30xxxx)
2. Pixel 7 / dushanbe_city_bank / Мехрубон (material 61d967d1...)
3. TECNO KM4 / ozon / Владислав Касаткин (material 49001bb5...)
Pick [1-3] or 'all':
```
2. Выберите нужный материал (номер) или `all` для всех
3. Скрипт попросит подтвердить что список транзакций открыт -> нажмите **Enter**
4. Автоматически пройдёт по каждой транзакции на экране (**не трогайте телефон!**)
5. Сохранит задачи в `scenarios/pool/`
6. Если mock-сервер запущен — сразу инжектнёт задачи в него
### Флаги
| Флаг | Описание |
|---|---|
| `--serial 28291FDH30xxxx` | Явный ADB-серийник (если несколько устройств) |
| `--kopecks 100` | Множитель суммы (по умолчанию 100: рубли -> копейки) |
| `--config path` | Путь к config.ini |
### Примеры
```powershell
# Интерактивный выбор материала
powershell -ExecutionPolicy Bypass -File gen_transactions.ps1
# Для конкретного устройства
powershell -ExecutionPolicy Bypass -File gen_transactions.ps1 --serial 28291FDH300712
# С другим config
powershell -ExecutionPolicy Bypass -File gen_transactions.ps1 --config cmake-build-debug\config.ini
```
### Результат
После генерации в `scenarios/pool/` появятся файлы вида:
```
pixel_7_ozon_ft_01_plus_15000_143022.json
pixel_7_ozon_ft_02_minus_500_150133.json
tecno_km4_ozon_ft_01_plus_3000_091500.json
```
Каждый файл содержит задачу с реальной суммой (в копейках) и временем (UTC):
```json
{
"bank_name": "ozon",
"material_id": "30bc106c-6935-4f4b-85f3-f1a06adc5c13",
"type": "FETCH_TRANSACTIONS",
"body": {
"amount": 1500000,
"created_at": "2026-04-10T11:30:22Z"
}
}
```
При следующем запуске `setup.ps1` пул сохраняется (если не указать `-Clean`),
и мок будет раздавать задачи из него при бутстрапе.
---
## 4. Ручной запуск (пошагово)
Если не хотите использовать `setup.ps1`:
### 4.1. Установка зависимостей
```powershell
# Python 3.9+ (если нет — скачать с python.org, включить «Add to PATH»)
python --version
# Flask
pip install flask
```
### 4.2. Подготовка config.ini
В `config.ini` (рядом с `ARC.exe`) переключить `apiBase`:
```ini
[net]
apiBase=http://127.0.0.1:8888
```
> Совет: держите копию `config.ini.mock`, а перед тестом
> `copy config.ini.mock config.ini`.
### 4.3. Генерация профиля из БД
```powershell
# Из корня проекта
python tests\mock_server\gen_mock_data.py
```
Создаёт `default_profile.json` и FETCH_PROFILE scenarios.
### 4.4. Генерация пула транзакций (опционально)
См. [раздел 3](#3-генерация-fetch_transactions-задач).
### 4.5. Запуск mock-сервера
```powershell
cd tests\mock_server
python mock_server.py --port 8888
```
Должны увидеть:
```
[mock] state cleared — starting fresh
[mock] loaded default_profile.json: 3 bank_profiles, 3 materials
[mock] loaded pool: 19 FETCH_TRANSACTIONS across 3 materials
* Running on http://127.0.0.1:8888
```
### 4.6. Запуск ARC
В отдельном терминале:
```powershell
cd build\Release
ARC.exe
```
Или через CLion: Run -> ARC.
При логине мок автоматически ставит задачи:
- 1 x FETCH_PROFILE на каждый материал (всегда)
- N x FETCH_TRANSACTIONS из пула (если пул не пуст)
Задачи раздаются по 1 на material за поллинг — следующая только
после результата предыдущей.
---
## 5. Мониторинг и отчёт
```powershell
# Открыть отчёт в браузере (авто-обновление каждые 2 сек)
start http://127.0.0.1:8888/_admin/report/html
# Счётчики
curl -s http://127.0.0.1:8888/_admin/state
# Полный JSON-отчёт
curl -s http://127.0.0.1:8888/_admin/report
```
Если `curl` нет, используйте PowerShell:
```powershell
# Счётчики
(Invoke-WebRequest http://127.0.0.1:8888/_admin/state).Content | ConvertFrom-Json
# Полный отчёт в файл
Invoke-WebRequest http://127.0.0.1:8888/_admin/report -OutFile report.json
```
На главной странице отчёта (`/_admin/report/html`) отображаются:
- Счётчики задач (всего / выполнено / в очереди)
- **Загруженные данные** — устройства, профили, материалы с количеством задач в пуле (группировка по устройствам)
- Задачи с результатами, сгруппированные по устройствам
---
## 6. Ручной инжект задач
```powershell
# Одна задача из файла
curl -X POST http://127.0.0.1:8888/_admin/inject ^
-H "Content-Type: application/json" ^
--data-binary @scenarios\pixel_7_ozon_fetch_profile.json
# N случайных из пула
python inject_random.py --count 5
# Повторный бутстрап (1 FP + N FT на material)
curl -X POST http://127.0.0.1:8888/_admin/bootstrap
# Сброс (очистка очереди + результатов)
curl -X POST http://127.0.0.1:8888/_admin/reset
```
---
## 7. ADB на Windows
ARC использует ADB из `tools\adb\windows\`. Проверка:
```powershell
tools\adb\windows\adb.exe devices
```
Должно показать устройства в статусе `device`.
Если ADB занят другим процессом (Android Studio, scrcpy):
```powershell
tools\adb\windows\adb.exe kill-server
tools\adb\windows\adb.exe start-server
tools\adb\windows\adb.exe devices
```
---
## 8. Типовые проблемы
| Проблема | Решение |
|---|---|
| `python` не найден | Запустите `setup.ps1` — установит автоматически. Или используйте скрипты `gen_transactions.ps1` / `run_server.ps1` — в них путь уже зашит |
| Порт 8888 занят | `setup.ps1` убивает старый процесс автоматически. Вручную: `netstat -ano \| findstr :8888` -> `taskkill /PID <pid> /F` |
| `curl` нет | `Invoke-WebRequest` (PowerShell) или `winget install curl` |
| Firewall блокирует | Разрешить `python.exe` в Windows Firewall. Мок слушает только `127.0.0.1` |
| ARC не видит устройства | Проверить USB-драйверы, включить USB debugging, подтвердить RSA-ключ |
| Кракозябры в консоли | `chcp 65001` перед запуском (UTF-8). Скрипты `.ps1` делают это автоматически |
| BOM в config.ini | `setup.ps1` пишет без BOM. Если правили вручную — пересохраните в UTF-8 без BOM (VS Code) |
| No active materials | БД пустая. Запустите ARC с боевым сервером, залогиньтесь, добавьте устройства |
| Пул транзакций пуст | Сгенерируйте: [раздел 3](#3-генерация-fetch_transactions-задач) |
| `No ADB devices match` | Устройства не подключены или serial не совпадает с БД. Проверьте `adb devices` |
| SSL ошибки при сборке | OpenSSL DLL копируются автоматически через CMake post-build |
---
## 9. Быстрый чеклист
```
[ ] powershell -ExecutionPolicy Bypass -File setup.ps1
[ ] Устройства в adb devices -> device
[ ] (опционально) powershell -ExecutionPolicy Bypass -File gen_transactions.ps1
[ ] ARC.exe запущен (отдельный терминал)
[ ] Браузер: http://127.0.0.1:8888/_admin/report/html
[ ] Дождаться completed = всего в отчёте
[ ] Вернуть config.ini: apiBase=http://93.183.75.134:8005
```