Zpět na domů

Testwire: AI agenti a Flutter testy prostřednictvím MCP a hot reload

Testwire — nástroj pro integraci AI agentů do procesu vývoje integračních testů Flutter prostřednictvím MCP a hot reload, který řeší problémy vysoké spotřeby tokenů a dlouhých cyklů sestavení. Umožňuje agentům kontrolovat krok za krokem provádění testů, pořizovat snímky obrazovky a provádět opravy bez úplného přesestavení, zlepšuje efektivitu vývoje.

Testwire: Revolutionizing Flutter Testing with AI Agents and MCP
Advertisement 728x90

Testwire: Integrace AI agentů do vývoje Flutter testů pomocí MCP a hot reload

AI agenti narážejí na problémy při psaní integračních testů pro Flutter: vysoká spotřeba tokenů, dlouhé cykly sestavení a chybějící vizuální kontext. Testwire řeší tyto výzvy poskytnutím nástroje pro krokové provádění testů s připojením k VM Service přes MCP, což agentům umožňuje kontrolovat proces, pořizovat snímky obrazovky a používat hot reload pro rychlé opravy.

Architektura a princip fungování Testwire

Testwire se skládá ze tří klíčových komponent, které komunikují přes Model Context Protocol (MCP). Test se spustí v režimu flutter run s příznakem --dart-define=AGENT_MODE=true, což aktivuje ladící režim a registraci rozšíření Dart VM service. MCP server testwire_mcp se připojí k testu přes VM service a poskytuje agentovi sadu nástrojů pro řízení provádění. AI agent jako MCP klient tyto nástroje využívá k monitorování stavu kroků, provádění příkazů a analýze chyb s přístupem k vizuálnímu zobrazení rozhraní.

Hlavní MCP nástroje dostupné agentovi:

Google AdInline article slot
  • connect: Připojení k testu přes URI VM service.
  • step_forward: Provedení dalšího kroku s následnou pauzou.
  • run_remaining: Spuštění všech zbývajících kroků s zastavením při chybě.
  • retry_step: Opětovné provedení neúspěšného kroku.
  • get_test_state: Získání stavu všech kroků testu.
  • hot_reload_testwire_test: Hot reload se zachováním průběhu provádění.
  • hot_restart_testwire_test: Úplný restart testu.
  • screenshot: Vytvoření snímku obrazovky aktuálního UI.
  • disconnect: Odpojení od testu.

Implementace testů v Testwire: kód a struktura

Testy v Testwire jsou formulovány jako samostatné třídy dědící z TestwireTest, což je nutné pro podporu hot reload. Každý test je rozdělen na logické kroky se stavy: neprovedený, provedený, provádí se, provedený s chybou. Kroky jsou definovány pomocí metody step, která zahrnuje popis, kontext a akci. Příklad struktury testu pro kontrolu formuláře zpětné vazby:

class MyTest extends TestwireTest {
  MyTest() : super(
    'Submit feedback form',
    setUp: (tester) async {
      app.main();
      await tester.pumpAndSettle();
    },
  );

  @override
  Future<void> body(WidgetTester tester) async {
    await step(
      description: 'Navigate to Leave Review',
      context: 'Tap the "Leave Review" tile on the home screen.',
      action: () async {
        await tester.tap(find.byKey(const Key('leave_review_tile')));
        await tester.pumpAndSettle();
      },
    );

    await step(
      description: 'Enter name',
      context: 'Type "Alex" into the name field.',
      action: () async {
        await tester.enterText(
          find.byKey(const Key('name_field')), 'Alex');
        await tester.pumpAndSettle();
      },
    );

    await step(
      description: 'Tap 5-star rating',
      context: 'Tap the 5th star to set rating to 5.',
      action: () async {
        await tester.tap(find.byKey(const Key('star_5')));
        await tester.pumpAndSettle();
      },
    );

    await step(
      description: 'Verify result',
      context: 'Check that the success message is displayed.',
      action: () async {
        expect(find.text('Thank you!'), findsOneWidget);
        expect(find.text('5 stars from Alex'), findsOneWidget);
      },
    );
  }
}

Hot reload jako klíčový mechanismus ladění

Hot reload v Testwire umožňuje agentovi vnášet opravy do kódu testu bez úplné přestavby, čímž zachovává průběh provádění. Při selhání kroku se test pozastaví, agent analyzuje chybu s přístupem k logům, stavu VM a snímkům UI, poté provede hot reload a opakuje krok. Tím se zkrátí čas vývojového cyklu z 15–20 minut na několik iterací, sníží se spotřeba tokenů a kontextového okna. Podpora hot reload vyžaduje, aby testy byly formulovány jako třídy, nikoliv funkce, což zajišťuje zachování stavu mezi přenačteními.

Integrace do vývojového procesu a CI/CD

Testwire podporuje dva režimy provádění: agentový pro vývoj a běžný pro CI/CD. Ve vývoji se test spustí přes flutter run --dart-define=AGENT_MODE=true, což aktivuje MCP připojení a hot reload. Na CI se test provádí jako standardní integrační test pomocí flutter test, bez dalších příznaků. To umožňuje používat jeden soubor testu pro oba scénáře, čímž se zajišťuje konzistence a zjednodušuje se údržba. Integrace Testwire do projektu může vyžadovat nastavení agentových dovedností a dokumentace, ale nástroj dělá psaní integračních testů nezbytnou součástí úkolů, nikoliv volitelnou fází.

Google AdInline article slot

Co je důležité

  • Testwire řeší problémy AI agentů při psaní testů: vysoká spotřeba tokenů, dlouhá sestavení, absence vizuálního kontextu.
  • Nástroj využívá MCP pro připojení k VM Service, což agentům poskytuje kontrolu nad krokovým prováděním testů.
  • Hot reload umožňuje vnášet opravy bez úplné přestavby, zkracuje čas vývojových cyklů.
  • Testy jsou formulovány jako třídy pro podporu hot reload a kompatibilitu s CI/CD přes dva režimy spouštění.
  • Integrace vyžaduje nastavení, ale dělá testování nedílnou součástí vývojového procesu.

— Editorial Team

Advertisement 728x90

Číst dál