Автоматизоване тестування iOS-додатків
Використовуйте Synapse + Computer Control API для автоматизації тестування iOS-додатків через Simulator.
Автоматизоване тестування 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)
Крок 1: Зареєструйте комп'ютер Simulator
На Mac, де запущено iOS Simulator:
# Отримайте код встановлення від 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: Збережіть тестові сценарії в пам'яті
Зберігайте багаторазові тестові сценарії як спогади:
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:
- Викличе
memory_search, щоб знайти спогадtest_scenario_login_flow - Викличе
computer_screenshot, щоб побачити поточний стан - Виконає кожен крок через
computer_command_queue(click, type) - Перевірить результати через знімки екрана
- Збереже будь-які невдачі як спогади
mistake
Крок 4: Тести з самовідновленням
Коли тест провалюється, збережіть невдачу та відновлення:
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: Відстеження результатів тестів
Відстежуйте запуск тестів як завдання:
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"]}} |