# Запуск тестов на 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 /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 ```