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:
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í.
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
Zatím žádné komentáře.