# Автоматизоване тестування iOS-додатків Поєднайте систему пам'яті Synapse з Computer Control API для побудови тестів iOS-додатків під керуванням LLM. LLM запам'ятовує тестові сценарії, вчиться з минулих невдач та адаптується до змін UI. ## Архітектура ``` ┌──────────────┐ commands ┌──────────────┐ screenshots ┌──────────────┐ │ LLM Agent │ ─────────────▶│ Synapse │ ────────────────▶ │ iOS Sim │ │ (Claude) │ │ Computer │ ◀──────────────── │ (via agent) │ └──────────────┘ │ Control │ results └──────────────┘ │ └──────────────┘ │ store/recall ▼ ┌──────────────┐ │ Memories │ (test scenarios, past failures, UI patterns) └──────────────┘ ``` ## Передумови - Обліковий запис Synapse + Mind Key - MCP-сервер Synapse налаштовано у Claude Desktop - iOS Simulator із встановленим `screen-remote-agent` - Комп'ютер зареєстровано в Synapse (дивіться [Computer Control API](/docs/api/computers)) ## Крок 1: Зареєструйте комп'ютер Simulator На Mac, де запущено iOS Simulator: ```bash # Отримайте код встановлення від Synapse curl -X POST https://synapse.schaefer.zone/computers/install-code \ -H "Authorization: Bearer YOUR_MIND_KEY" \ -d '{"computer_name":"ios-sim"}' # → { "install_code": "ic_..." } # Запустіть screen-remote-agent на Mac # (використовує код встановлення для реєстрації) ``` ## Крок 2: Збережіть тестові сценарії в пам'яті Зберігайте багаторазові тестові сценарії як спогади: ```python import requests def store_test_scenario(name, steps, app): requests.post(f"{URL}/memory", headers={"Authorization": f"Bearer {MIND_KEY}"}, json={ "category": "skill", "key": f"test_scenario_{name}", "content": f"App: {app}\nSteps:\n" + "\n".join(steps), "tags": ["test", "ios", app], "priority": "high" }) store_test_scenario("login_flow", [ "Launch app", "Tap email field", "Type test@example.com", "Tap password field", "Type password123", "Tap Login button", "Verify home screen appears" ], "MyApp") ``` ## Крок 3: Виконання тестів під керуванням LLM У Claude Desktop (із налаштованим Synapse MCP): ``` Run the login_flow test scenario on the iOS Simulator. Take a screenshot after each step and verify the expected UI. If any step fails, store the failure as a memory so we can avoid it next time. ``` Claude: 1. Викличе `memory_search`, щоб знайти спогад `test_scenario_login_flow` 2. Викличе `computer_screenshot`, щоб побачити поточний стан 3. Виконає кожен крок через `computer_command_queue` (click, type) 4. Перевірить результати через знімки екрана 5. Збереже будь-які невдачі як спогади `mistake` ## Крок 4: Тести з самовідновленням Коли тест провалюється, збережіть невдачу та відновлення: ```python def store_test_failure(scenario, step, error, recovery): requests.post(f"{URL}/memory", headers={"Authorization": f"Bearer {MIND_KEY}"}, json={ "category": "mistake", "key": f"failure_{scenario}_{step}", "content": f"Scenario: {scenario}\nStep: {step}\nError: {error}\nRecovery: {recovery}", "tags": ["test", "failure", "ios", scenario], "priority": "high" }) # Приклад store_test_failure("login_flow", "tap_login", "Login button not found at expected coordinates", "Button moved due to new logo. Search by accessibility label instead.") ``` Наступного разу, коли LLM запускає тест, він відкликає невдачу та застосовує відновлення автоматично. ## Крок 5: Відстеження результатів тестів Відстежуйте запуск тестів як завдання: ```python def track_test_run(scenario, status, duration): requests.post(f"{URL}/mind/task", headers={"Authorization": f"Bearer {MIND_KEY}", "Content-Type": "application/json"}, json={ "title": f"Test: {scenario}", "description": f"Status: {status}, Duration: {duration}s", "priority": "normal" }) ``` ## Поширені команди | Дія | Команда | |--------|---------| | Запуск Simulator | `xcrun simctl launch booted com.example.app` | | Знімок екрана | `computer_screenshot` (через Synapse MCP) | | Тап у (x,y) | `computer_command_queue {type:"click", payload:{x,y}}` | | Введення тексту | `computer_command_queue {type:"type", payload:{text:"..."}}` | | Натиснути Home | `computer_command_queue {type:"key", payload:{keys:["Cmd","Shift","H"]}}` | ## Найкращі практики > [!TIP] > - **Зберігайте координати UI як спогади** — UI змінюється, але LLM може перенавчатись > - **Використовуйте мітки доступності** — стабільніші за координати > - **Зберігайте тестові дані окремо** — використовуйте змінні для імен користувачів, паролів > - **Запускайте тести в чистому стані** — скидайте Simulator між запусками > - **Логуйте знімки для невдач** — корисно для налагодження ## Наступні кроки - [Тести з самовідновленням](/docs/guides/self-healing-tests) - [Computer Control API](/docs/api/computers) - [Найкращі практики роботи з пам'яттю](/docs/guides/memory-best-practices)