14 KiB
Запуск тестов на Windows
Оглавление
- Быстрый старт
- Вспомогательные скрипты
- Генерация FETCH_TRANSACTIONS задач
- Ручной запуск (пошагово)
- Мониторинг и отчёт
- Ручной инжект задач
- ADB на Windows
- Типовые проблемы
- Быстрый чеклист
1. Быстрый старт
cd tests\mock_server
powershell -ExecutionPolicy Bypass -File setup.ps1
Скрипт setup.ps1 автоматически:
- Проверяет / устанавливает Python 3.12+ (через winget)
- Устанавливает Flask
- Создаёт вспомогательные скрипты
gen_transactions.ps1иrun_server.ps1 - Находит
config.iniи проверяет базу данных - Удаляет старые сгенерированные данные (профиль + scenarios, пул не трогает)
- Генерирует
default_profile.jsonи FETCH_PROFILE scenarios из БД - Если порт занят — убивает старый процесс
- Переключает
config.iniна mock (apiBase=http://127.0.0.1:8888) - Показывает сводку: устройства, профили, материалы, пул транзакций
- Запускает mock-сервер и открывает HTML-отчёт в браузере
При первом логине ARC мок автоматически ставит FETCH_PROFILE задачи на каждый материал. FETCH_TRANSACTIONS задачи нужно генерировать отдельно (см. раздел 3).
Параметры
| Параметр | По умолчанию | Описание |
|---|---|---|
-Port |
8888 | Порт mock-сервера |
-FtPerMaterial |
3 | FETCH_TRANSACTIONS на материал при бутстрапе (из пула) |
-SkipInstall |
— | Пропустить установку Python/Flask |
-GenerateOnly |
— | Только сгенерировать данные, не запускать сервер |
-Clean |
— | Также очистить пул транзакций (scenarios/pool/) |
Примеры
# Всё автоматически (установка + генерация + запуск)
.\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 -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/.
Подготовка
- Подключите устройство по USB
- Убедитесь что ADB видит устройство:
tools\adb\windows\adb.exe devices # Должно показать серийник со статусом "device" - Откройте на устройстве банковское приложение на экране списка транзакций
- Ozon: раздел "Операции" -> список переводов/пополнений
- Dushanbe City Bank: раздел "Операции" -> список P2P операций
Запуск
# Через вспомогательный скрипт (рекомендуется)
cd tests\mock_server
powershell -ExecutionPolicy Bypass -File gen_transactions.ps1
# Или напрямую (если Python в PATH)
python tests\mock_server\gen_fetch_transactions.py
Скрипт:
- Покажет меню с активными материалами:
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': - Выберите нужный материал (номер) или
allдля всех - Скрипт попросит подтвердить что список транзакций открыт -> нажмите Enter
- Автоматически пройдёт по каждой транзакции на экране (не трогайте телефон!)
- Сохранит задачи в
scenarios/pool/ - Если mock-сервер запущен — сразу инжектнёт задачи в него
Флаги
| Флаг | Описание |
|---|---|
--serial 28291FDH30xxxx |
Явный ADB-серийник (если несколько устройств) |
--kopecks 100 |
Множитель суммы (по умолчанию 100: рубли -> копейки) |
--config path |
Путь к config.ini |
Примеры
# Интерактивный выбор материала
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):
{
"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. Установка зависимостей
# Python 3.9+ (если нет — скачать с python.org, включить «Add to PATH»)
python --version
# Flask
pip install flask
4.2. Подготовка config.ini
В config.ini (рядом с ARC.exe) переключить apiBase:
[net]
apiBase=http://127.0.0.1:8888
Совет: держите копию
config.ini.mock, а перед тестомcopy config.ini.mock config.ini.
4.3. Генерация профиля из БД
# Из корня проекта
python tests\mock_server\gen_mock_data.py
Создаёт default_profile.json и FETCH_PROFILE scenarios.
4.4. Генерация пула транзакций (опционально)
См. раздел 3.
4.5. Запуск mock-сервера
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
В отдельном терминале:
cd build\Release
ARC.exe
Или через CLion: Run -> ARC.
При логине мок автоматически ставит задачи:
- 1 x FETCH_PROFILE на каждый материал (всегда)
- N x FETCH_TRANSACTIONS из пула (если пул не пуст)
Задачи раздаются по 1 на material за поллинг — следующая только после результата предыдущей.
5. Мониторинг и отчёт
# Открыть отчёт в браузере (авто-обновление каждые 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:
# Счётчики
(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. Ручной инжект задач
# Одна задача из файла
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\. Проверка:
tools\adb\windows\adb.exe devices
Должно показать устройства в статусе device.
Если ADB занят другим процессом (Android Studio, scrcpy):
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 |
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