Skip to main content

Tests automatisés d'applications iOS

Utilisez Synapse + l'API Computer Control pour automatiser les tests d'applications iOS via Simulator.


Tests automatisés d'applications iOS

Combinez le système de mémoire de Synapse avec l'API Computer Control pour construire des tests d'applications iOS pilotés par LLM. Le LLM se souvient des scénarios de test, apprend des échecs passés et s'adapte aux changements d'interface.

Architecture

┌──────────────┐    commands    ┌──────────────┐    screenshots    ┌──────────────┐
│  LLM Agent   │ ─────────────▶│  Synapse     │ ────────────────▶ │  iOS Sim     │
│  (Claude)    │               │  Computer    │ ◀──────────────── │  (via agent) │
└──────────────┘               │  Control     │    results        └──────────────┘
       │                       └──────────────┘
       │ store/recall
       ▼
┌──────────────┐
│  Memories    │ (test scenarios, past failures, UI patterns)
└──────────────┘

Prérequis

  • Compte Synapse + Mind Key
  • Serveur MCP Synapse configuré dans Claude Desktop
  • iOS Simulator avec screen-remote-agent installé
  • Ordinateur enregistré dans Synapse (voir API Computer Control)

Étape 1 : enregistrer l'ordinateur Simulator

Sur le Mac exécutant iOS Simulator :

# Obtenir le code d'installation de 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_..." }

# Exécuter screen-remote-agent sur le Mac
# (utilise le code d'installation pour s'enregistrer)

Étape 2 : stocker les scénarios de test en mémoire

Stockez les scénarios de test réutilisables en tant que mémoires :

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")

Étape 3 : exécution de test pilotée par LLM

Dans Claude Desktop (avec MCP Synapse configuré) :

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 va :

  1. Appeler memory_search pour trouver la mémoire test_scenario_login_flow
  2. Appeler computer_screenshot pour voir l'état actuel
  3. Exécuter chaque étape via computer_command_queue (clic, saisie)
  4. Vérifier les résultats via captures d'écran
  5. Stocker tout échec en tant que mémoires mistake

Étape 4 : tests auto-réparables

Quand un test échoue, stockez l'échec et la récupération :

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"
        })

# Exemple
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.")

La prochaine fois que le LLM exécute le test, il rappelle l'échec et applique la récupération automatiquement.

Étape 5 : suivi des résultats de test

Suivez les exécutions de test en tant que tâches :

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"
        })

Commandes courantes

Action Commande
Lancer Simulator xcrun simctl launch booted com.example.app
Capture d'écran computer_screenshot (via MCP Synapse)
Taper à (x,y) computer_command_queue {type:"click", payload:{x,y}}
Saisir du texte computer_command_queue {type:"type", payload:{text:"..."}}
Appuyer sur Home computer_command_queue {type:"key", payload:{keys:["Cmd","Shift","H"]}}

Bonnes pratiques

Prochaines étapes