Zum Hauptinhalt springen
Connic
Test

Test YAML

Das vollständige Schema für Testsuiten, dateiweite Standardwerte, Testfälle, Assertions, Fixtures, Mocks und Freigabeentscheidungen.

Zuletzt aktualisiert
Auf dieser Seite

YAML-Format

Jede Datei definiert einen oder mehrere Testfälle. Dateiweite defaults gelten für jeden Fall; Felder am einzelnen Fall überschreiben sie.

tests/stress-tester.yaml
version: "1.0"

# Standardwerte auf Dateiebene gelten für jeden Case.
# Angaben im einzelnen Case überschreiben diese Werte.
defaults:
  runs: 5                     # Agenten je Case fünfmal aufrufen
  success_threshold: 80       # vier von fünf Aufrufen müssen bestehen
  timeout_s: 60               # maximale Laufzeit je Aufruf

tests:
  - name: adds_two_numbers
    payload: '{"message": "add 4 and 6", "a": 4, "b": 6}'
    expected_result: status == "completed"
    expected_tool_calls:
      - math.calculator.add: invocations >= 1

  - name: plain_message_no_tools
    payload: "say hello"
    expected_result: status == "completed"
    expected_no_tool_calls:
      - math.calculator.add

  - name: high_concurrency_smoke
    payload: '{"message": "stress ping"}'
    runs: 20                  # override file default for this case
    success_threshold: 95
    expected_result: status == "completed"

Für mehrere Testsuiten desselben Agenten lässt sich der vom Dateinamen abgeleitete Standard mit dem Feld agent: überschreiben. Die beiden Dateien hier zielen jeweils auf stress-tester:

tests/stress-tester-load.yaml
# Eine zweite Suite für den Agenten stress-tester. Der Dateiname kann nicht ebenfalls
# stress-tester.yaml lauten (bereits vergeben), daher gibt diese Datei den Agenten
# explizit an und verwendet einen aussagekräftigeren Namen.
agent: stress-tester

defaults:
  runs: 50
  success_threshold: 90

tests:
  - name: sustained_burst
    payload: '{"message": "stress ping"}'
    expected_result: status == "completed"

Feldreferenz

FeldTypStatusBeschreibung
versionstringOptionalSchema-Version.Standard: "1.0"
agentstringOptionalAgent, auf den die Testsuite zielt. Standardmäßig wird der Dateiname ohne Endung verwendet (zum Beispiel tests/foo.yaml → foo). Das Feld lässt sich explizit festlegen, um eine große Testsuite für einen Agenten auf mehrere Dateien aufzuteilen.
defaultsobjectOptionalDateiweite Standardwerte, die für jeden Fall gelten. Felder am einzelnen Fall überschreiben sie.
runsintegerOptionalWie oft jeder Fall den Agenten aufruft. Bereich: 1–100.Standard: 1
success_thresholdintegerOptionalProzentanteil der Runs, die erfolgreich sein müssen, damit der Fall insgesamt besteht. Bereich: 1–100.Standard: 100
timeout_sintegerOptionalZeitlimit für die gesamte Dauer eines Aufrufs in Sekunden. Bereich: 1–3600.Standard: 120
mocksstringOptionalStandardmodul zum Ersetzen von eigenem Code für jeden Fall in der Datei. Ein mocks-Wert im einzelnen Testfall überschreibt es. Siehe Tools und Lifecycle-Code mocken.
strict_mocksbooleanOptionalBei true schlägt ein Fall fehl, wenn der Agent ein nicht gemocktes eigenes dateibasiertes Tool aufruft. Diese Prüfung gilt nur für Tools; separate Flags legen fest, ob auch Middleware, Hooks und eigene Guardrails gemockt werden müssen. Ein strict_mocks-Wert im einzelnen Testfall überschreibt diesen. Siehe Tools und Lifecycle-Code mocken.Standard: false
strict_hook_mocksbooleanOptionalBei true schlägt ein Fall fehl, bevor eine konfigurierte Hook-Phase, die Mocks unterstützt, ohne passenden Ersatz ausgeführt wird. Fehlende Hook-Phasen sind ausgenommen. Ein strict_hook_mocks-Wert im einzelnen Testfall überschreibt diesen.Standard: false
strict_middleware_mocksbooleanOptionalBei true schlägt ein Fall fehl, bevor eine konfigurierte Middleware-Phase ohne passenden Mock ausgeführt wird. Fehlende Middleware-Phasen sind ausgenommen. Ein strict_middleware_mocks-Wert im einzelnen Testfall überschreibt diesen.Standard: false
strict_guardrail_mocksbooleanOptionalBei true schlägt ein Fall fehl, bevor ein konfigurierter eigener Guardrail ohne passenden Mock ausgeführt wird. Fehlende Phasen und integrierte Guardrails sind ausgenommen. Ein strict_guardrail_mocks-Wert im einzelnen Testfall überschreibt diesen.Standard: false
strict_approval_decisionsbooleanOptionalBei true schlägt der Testfall fehl, wenn für eine ausstehende Freigabe keine passende Entscheidung hinterlegt ist oder nach der Ausführung ungenutzte Entscheidungen übrig bleiben. Ein strict_approval_decisions-Wert im einzelnen Testfall überschreibt diesen. Siehe Approvals testen.Standard: false
testsobject[]ErforderlichTestfälle. Mindestens einer ist erforderlich.
namestringErforderlichKennung des Testfalls innerhalb der Datei. Muss eindeutig sein und wird als Zeilentitel im Pipeline-Panel des Dashboards angezeigt.
payloadstringOptionalAgent-Input als String. JSON-Strings werden zu strukturiertem Input. Bei JSON-Ausgaben des Agenten unterstützt expected_result Punktzugriff, zum Beispiel output.id == 10. Erforderlich, sofern builder nicht gesetzt ist.
filesstring[]OptionalEinfache Dateinamen, die unter tests/files/ liegen. Jede Datei wird Base64-codiert und unter files angehängt. Wenn payload ein JSON-Objekt ist oder ein builder ein Dictionary zurückgibt, bleiben dessen Schlüssel neben files auf oberster Ebene. Andere Payloads werden als {message: payload} übergeben. Siehe Dateianhänge.Standard: []
builderstringOptionalName eines Python-Moduls unter tests/builders/ (mit oder ohne Endung .py). Ersetzt das statische payload durch den Rückgabewert von build(context, builder_args, test_name, payload, files). Siehe Dynamische Payload Builder.
builder_argsobjectOptionalBeliebige Keyword-Argumente, die als Argument builder_args an build() und cleanup() weitergegeben werden. Damit lassen sich Fixtures variieren, ohne für jeden Fall einen eigenen Builder zu schreiben.
mocksstringOptionalName eines Python-Moduls unter tests/mocks/ (mit oder ohne Endung .py), das Ersatzfunktionen für eigene dateibasierte Tools, Middleware-Phasen, Tool-Hooks und eigene Guardrails enthält. Eine passende Funktion ersetzt die jeweilige Phase. Ohne sie wird der reale Code ausgeführt, sofern das zugehörige Strict-Mock-Flag nicht aktiv ist. Vordefinierte und api:-Tool-Implementierungen sowie integrierte Guardrails werden real ausgeführt. Ausgehende Verbindungen aus Agenten-Tools und Middleware bilden die Ausnahme: Sie werden ohne Auslieferung erfasst. Siehe Tools und Lifecycle-Code mocken.
strict_mocksbooleanOptionalÜberschreibt defaults.strict_mocks für diesen Testfall. Bei true schlägt der Fall fehl, wenn er ein nicht gemocktes eigenes dateibasiertes Tool aufruft. Middleware-, Hook- oder Custom-Guardrail-Ersetzungen werden davon nicht gesteuert.
strict_hook_mocksbooleanOptionalÜberschreibt defaults.strict_hook_mocks für diesen Testfall. Der Testfall schlägt vor der Ausführung einer konfigurierten Hook-Phase fehl, wenn diese Mocks unterstützt und kein passender Mock vorhanden ist. Nicht konfigurierte Hook-Phasen sind ausgenommen.
strict_middleware_mocksbooleanOptionalÜberschreibt defaults.strict_middleware_mocks für diesen Testfall. Der Testfall schlägt vor der Ausführung einer konfigurierten Middleware-Phase fehl, wenn kein passender Mock vorhanden ist. Nicht konfigurierte Phasen sind ausgenommen.
strict_guardrail_mocksbooleanOptionalÜberschreibt defaults.strict_guardrail_mocks für diesen Testfall. Der Testfall schlägt vor der Ausführung eines konfigurierten eigenen Guardrails fehl, wenn kein passender Mock vorhanden ist. Nicht konfigurierte Phasen und integrierte Guardrails sind ausgenommen.
approval_decisionsobject[]OptionalSkriptbasierte HITL-Antworten. Jeder Eintrag enthält ein kanonisches tool, eine decision (approve, reject oder timeout) sowie optional einen params-Ausdruck und einen reason. Siehe Approvals testen.Standard: []
strict_approval_decisionsbooleanOptionalÜberschreibt defaults.strict_approval_decisions für diesen Testfall.
runsintegerOptionalÜberschreibt defaults.runs für diesen Testfall.
success_thresholdintegerOptionalÜberschreibt defaults.success_threshold für diesen Testfall.
timeout_sintegerOptionalÜberschreibt defaults.timeout_s für diesen Testfall.
expected_resultstringOptionalAusdruck, der mit den Variablen output, error, status und context ausgewertet wird. Fehlt das Feld, besteht der Fall, sobald der Run completed erreicht. Siehe Assertions und Expressions.
expected_tool_callslistOptionalEntweder einfache Tool-Namen (mindestens einmal aufgerufen) oder Mappings mit einem Schlüssel {tool: <expr on invocations, params, and/or context>}. Gemischte Einträge sind in derselben Liste erlaubt. Dasselbe Tool darf in mehreren Einträgen vorkommen, um unterschiedliche Argumentgruppen unabhängig zu prüfen.Standard: []
expected_tool_call_orderstring[]OptionalTool-Namen, die im Trace der Tool-Aufrufe des Runs in dieser relativen Reihenfolge erscheinen müssen. Dazwischen dürfen andere Tool-Aufrufe stattfinden.Standard: []
expected_no_tool_callsstring[]OptionalTool-Namen, die während des Runs NICHT aufgerufen werden dürfen. Nützlich, um bei einer bedingten Tool-Auswahl unerwünschte Aufrufe auszuschließen.Standard: []
expected_child_agentsobjectOptionalMapping aus dem Namen eines gestarteten Agenten auf Assertions für diesen untergeordneten Run. Jeder Eintrag akzeptiert dieselben Felder expected_result / expected_tool_calls / expected_tool_call_order / expected_no_tool_calls wie der Parent sowie ein eigenes verschachteltes expected_child_agents für tiefere Trigger-Ketten. Siehe Assertions für gestartete Agenten.Standard: null
expected_triggeredintegerOptional(Innerhalb eines expected_child_agents-Eintrags.) Mindestanzahl, wie oft der benannte untergeordnete Agent gestartet werden muss. Nützlich, wenn der Parent nur prüfen kann, ob ein Fire-and-Forget-Trigger stattgefunden hat.Standard: 1
expected_payloadstringOptional(Innerhalb eines expected_child_agents-Eintrags.) Ausdruck, der mit dem Input ausgewertet wird, den der Parent an trigger_agent übergeben hat. Bindings: payload (als JSON geparst, wenn der Parent einen JSON-String übergeben hat, sonst der Rohwert), payload_raw (Stringdarstellung, "", falls nicht anwendbar) und context. Funktioniert auch bei Fire-and-Forget-Triggern, da die Payload beim Aufruf erfasst wird.
expected_resultstringOptional(Innerhalb eines expected_child_agents-Eintrags.) Dieselbe Ausdrucksgrammatik wie beim Feld auf oberster Ebene, ausgewertet mit der Ausgabe des untergeordneten Runs. Erfordert mindestens einen wait_for_response=True-Trigger.
expected_tool_callslistOptional(Innerhalb eines expected_child_agents-Eintrags.) Dieselbe Grammatik wie beim Feld auf oberster Ebene, ausgewertet mit den Tool-Aufrufen des untergeordneten Runs.Standard: []
expected_tool_call_orderstring[]Optional(Innerhalb eines expected_child_agents-Eintrags.) Tool-Namen, die im Trace der Tool-Aufrufe des untergeordneten Runs in dieser relativen Reihenfolge erscheinen müssen.Standard: []
expected_no_tool_callsstring[]Optional(Innerhalb eines expected_child_agents-Eintrags.) Tools, die der untergeordnete Agent NICHT aufrufen darf.Standard: []
expected_child_agentsobjectOptional(Innerhalb eines expected_child_agents-Eintrags.) Rekursive Assertions für Agenten, die dieser untergeordnete Agent seinerseits startet. Die Verschachtelung kann so tief sein wie die Trigger-Kette.Standard: null