# Pengujian Aplikasi iOS Otomatis Gabungkan sistem memori Synapse dengan Computer Control API untuk membangun pengujian aplikasi iOS berbasis LLM. LLM mengingat skenario pengujian, belajar dari kegagalan masa lalu, dan beradaptasi dengan perubahan UI. ## Arsitektur ``` ┌──────────────┐ commands ┌──────────────┐ screenshots ┌──────────────┐ │ LLM Agent │ ─────────────▶│ Synapse │ ────────────────▶ │ iOS Sim │ │ (Claude) │ │ Computer │ ◀──────────────── │ (via agent) │ └──────────────┘ │ Control │ results └──────────────┘ │ └──────────────┘ │ store/recall ▼ ┌──────────────┐ │ Memories │ (test scenarios, past failures, UI patterns) └──────────────┘ ``` ## Prasyarat - Akun Synapse + Mind Key - Synapse MCP server dikonfigurasi di Claude Desktop - iOS Simulator dengan `screen-remote-agent` terpasang - Komputer terdaftar di Synapse (lihat [Computer Control API](/docs/api/computers)) ## Langkah 1: Daftarkan Komputer Simulator Di Mac yang menjalankan iOS Simulator: ```bash # Get install code from 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_..." } # Run screen-remote-agent on the Mac # (uses the install code to register) ``` ## Langkah 2: Simpan Skenario Pengujian di Memori Simpan skenario pengujian yang dapat digunakan kembali sebagai memori: ```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") ``` ## Langkah 3: Eksekusi Pengujian Berbasis LLM Di Claude Desktop (dengan Synapse MCP dikonfigurasi): ``` 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 akan: 1. Memanggil `memory_search` untuk menemukan memori `test_scenario_login_flow` 2. Memanggil `computer_screenshot` untuk melihat kondisi saat ini 3. Mengeksekusi setiap langkah melalui `computer_command_queue` (klik, ketik) 4. Memverifikasi hasil melalui tangkapan layar 5. Menyimpan kegagalan apa pun sebagai memori `mistake` ## Langkah 4: Pengujian Self-Healing Saat pengujian gagal, simpan kegagalan dan pemulihannya: ```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" }) # Example 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.") ``` Saat LLM menjalankan pengujian berikutnya, ia akan recall kegagalan dan menerapkan pemulihan secara otomatis. ## Langkah 5: Pelacakan Hasil Pengujian Lacak pengujian yang dijalankan sebagai tugas: ```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" }) ``` ## Perintah Umum | Aksi | Perintah | |--------|---------| | Luncurkan Simulator | `xcrun simctl launch booted com.example.app` | | Tangkapan layar | `computer_screenshot` (via Synapse MCP) | | Ketuk di (x,y) | `computer_command_queue {type:"click", payload:{x,y}}` | | Ketik teks | `computer_command_queue {type:"type", payload:{text:"..."}}` | | Tekan Home | `computer_command_queue {type:"key", payload:{keys:["Cmd","Shift","H"]}}` | ## Praktik Terbaik > [!TIP] > - **Simpan koordinat UI sebagai memori** — UI berubah, tetapi LLM dapat belajar ulang > - **Gunakan label aksesibilitas** — lebih stabil dari koordinat > - **Simpan data pengujian secara terpisah** — gunakan variabel untuk nama pengguna, kata sandi > - **Jalankan pengujian dalam kondisi bersih** — reset Simulator antara pengujian > - **Catat tangkapan layar untuk kegagalan** — berguna untuk debugging ## Langkah Berikutnya - [Pengujian Self-Healing](/docs/guides/self-healing-tests) - [Computer Control API](/docs/api/computers) - [Praktik Terbaik Memori](/docs/guides/memory-best-practices)