Test-Suites und Testfälle
Sie können einen Testfall für verschiedene Anwendungsfälle erstellen. Sie erstellen einen dieser Testfälle aus JSON oder indem Sie Unterhaltungen im Unterhaltungstester aufzeichnen. Diese Testfälle sind Teil der Metadaten des Skills, sodass sie über Versionen hinweg beibehalten werden.
Aus diesem Grund können Sie diese Testfälle ausführen, um sicherzustellen, dass alle Erweiterungen des Skills die grundlegende Funktionalität nicht beeinträchtigen. Testfälle beschränken sich nicht nur auf die Erhaltung der Kernfunktionen. Sie verwenden sie, um neue Szenarien zu testen. Wenn sich Ihr Skill weiterentwickelt, können Sie die Testfälle deaktivieren, die aufgrund der Änderungen, die durch Erweiterungen eingeführt wurden, kontinuierlich ausfallen.
Alle Testfälle gehören zu einer Testsuite, Container, mit denen Sie Ihre Tests partitionieren können. Wir bieten eine Testsuite namens Default Test Suite, aber Sie können auch Ihre eigene erstellen. Auf der Seite "Testsuites" werden alle Testsuites und die zugehörigen Testfälle aufgeführt. Die auf dieser Seite aufgeführten Testsuites können diejenigen sein, die Sie erstellt haben, oder sie wurden von einem Skill geerbt, den Sie erweitert oder geklont haben. Auf dieser Seite können Sie Testsuites und Testfälle erstellen und verwalten und Testfälle zu Testläufen kompilieren.
Beschreibung der Abbildung test-suites.png
Testfälle hinzufügen
Unabhängig davon, ob Sie einen neuen Skill erstellen oder einen Skill erweitern, können Sie einen Testfall für jeden Anwendungsfall erstellen. Beispiel: Sie können einen Testfall für jeden Payload-Typ erstellen. Sie können eine ganze Suite von Testfällen für einen Skill erstellen, indem Sie einfach Unterhaltungen aufzeichnen oder JSON-Dateien erstellen, die Nachrichtenobjekte definieren.
Testfall aus einer Unterhaltung erstellen
- Öffnen Sie den Skill oder den digitalen Assistenten, für den Sie den Test erstellen möchten.
- Klicken Sie oben auf der Seite in der Symbolleiste auf Vorschau.
- Klicken Sie auf Bottester.
- Wählen Sie den Kanal aus.
Hinweis
Testfälle sind kanalspezifisch: Für einen Testfall wird jeweils die Testunterhaltung aufgezeichnet, wie sie vom ausgewählten Kanal bearbeitet wird. Beispielsweise können Testfälle, die mit einem der textbasierten Kanäle des Skilltesters aufgezeichnet wurden, nicht zum Testen derselben Unterhaltung im Oracle-Webkanal verwendet werden. - Geben Sie die für das Verhalten oder die Ausgabe, die getestet werden soll, spezifischen Äußerungen ein.
- Klicken Sie auf Als Test speichern.
- Füllen Sie das Dialogfeld "Unterhaltung als Testfall speichern" aus:
- Bei Bedarf können Sie den Testfall aus Testläufen ausschließen, indem Sie Aktiviert deaktivieren.
- Wenn Sie einen Testfall für Unterhaltungen oder Nachrichten mit Postback-Aktionen ausführen, können Sie Postback-Variablen ignorieren aktivieren, damit der Testfall erfolgreich verläuft, indem Sie die Unterschiede zwischen der erwarteten und der tatsächlichen Nachricht auf Postback-Variablenebene ignorieren.
- Geben Sie einen Namen und einen Anzeigenamen ein, die den Test beschreiben.
- Fügen Sie als optionalen Schritt im Feld "Beschreibung" Details hinzu, die beschreiben, wie der Testfall das erwartete Verhalten für ein Szenario oder einen Anwendungsfall validiert.
- Wählen Sie bei Bedarf in der Liste Test-Suite eine andere Testsuite als "Standard-Test-Suite" aus.
- Um auf die verschiedenen Parameterwerte zu testen, die Benutzer in ihre Anforderungen oder Antworten eingeben können, fügen Sie dem Objekt im Feld "Eingabeparameter" für jeden Eingabeparameter Arrays hinzu, und ersetzen Sie die entsprechenden Platzhalter für die Benutzereingabe, die Sie im Textbereich "Unterhaltung" testen. Beispiel: Geben Sie ein Array
{"AGE":["24","25","26"]}
in das Feld "Eingabeparameter" und${"AGE"}
(der Platzhalter) im Textbereich "Unterhaltung" ein. - Wenn die Antworten des Skills oder digitalen Assistenten dynamische Informationen wie Zeitstempel enthalten, die dazu führen, dass Testfälle kontinuierlich nicht erfolgreich verlaufen, ersetzen Sie die Variablendefinition, die diese Werte auffüllt, durch einen Platzhalter, der als
${MY_VARIBALE_NAME}
formatiert ist.
- Klicken Sie auf Zu Suite hinzufügen.
Eingabeparameter für Benutzernachrichten hinzufügen
Während Sie variable Platzhalter hinzufügen, um sicherzustellen, dass Testfälle erfolgreich sind, wenn Skillnachrichten ständig sich ändernde Werte aufweisen, fügen Sie Eingabeparameter hinzu, um eine Vielzahl von Werten in Benutzernachrichten zu testen. Eingabeparameter vereinfachen das Testen, da sie die Ausführung mehrerer Variationen eines einzelnen Testfalls ermöglichen. Ohne sie müssen Sie doppelte Testfälle für jeden Parameterwert erstellen. Aufgrund der Flexibilität der Eingabeparameter können Sie jedoch mehrere Testergebnisse generieren, indem Sie in Ihrer Testfalldefinition nur ein Array für die Eingabeparameterwerte hinzufügen. Wenn Sie den Testfall ausführen, werden für jedes Element in der Array-Definition des Eingabeparameters separate Testergebnisse generiert. Ein Array aus drei Eingabeparameter-Schlüssel/Wert-Paaren führt beispielsweise zu einem Testlauf mit drei Testergebnissen. Die Nummerierung dieser Ergebnisse basiert auf dem Index des entsprechenden Arrayelements.
Beschreibung der Abbildung input-parameters-test-run-results.png
text
in der Nachrichten-Payload der Benutzernachricht durch einen Platzhalter ersetzen und ein entsprechendes Array von Parameterwerten definieren:
- Klicken Sie in der Ansicht "Bottester" auf Als Test speichern.
- Ersetzen Sie im Textbereich "Unterhaltung" den Feldwert
text
in einer Benutzernachricht ({"source": "user", ...}
) durch einen Apache-Ausdruck FreeMarker, der den Eingabeparameter benennt. Beispiel:"${AGE}"
im folgenden Snippet:{ "source": "user", "messagePayload": { "type": "text", "text": "${AGE}", "channelExtensions": { "test": { "timezoneOffset": 25200000 } } } },
- Klicken Sie auf
, um das Feld "Eingabeparameter" einzublenden.
- Fügen Sie im Feldobjekt "Eingabeparameter" (
{}
) Schlüsselwertpaare für jeden Parameter hinzu. Die Werte müssen Arrays mit Zeichenfolgenwerten sein. Beispiel:{"AGE":["24","25","26"], "CRUST": ["Thick","Thin"]}
Beachten Sie beim Definieren von Eingabeparametern Folgendes:- Nur Arrays verwenden - Eingabeparameter müssen als Arrays und nicht als Zeichenfolgen festgelegt werden.
{"NAME": "Mark"}
führt beispielsweise zu einem nicht erfolgreichen Testergebnis. - Zeichenfolgenwerte in Ihrem Array verwenden - Alle Arrayelemente müssen Zeichenfolgen sein. Wenn Sie stattdessen ein Element als Ganzzahl eingeben (z.B.
{"AGE": ["25", 26]}
), wird es in eine Zeichenfolge konvertiert. Für Nullwerte werden keine Testergebnisse generiert.{ "AGE": [ "24", "25", null ] }
führt zu zwei Testergebnissen, nicht zu drei. - Konsistente Groß-/Kleinschreibung verwenden – Die Groß-/Kleinschreibung für den Schlüssel und den Platzhalter im Ausdruck FreeMarker muss übereinstimmen. Eine nicht übereinstimmende Groß-/Kleinschreibung (z.B.
Age
undAGE
) führt dazu, dass der Testfall nicht erfolgreich verläuft.
- Nur Arrays verwenden - Eingabeparameter müssen als Arrays und nicht als Zeichenfolgen festgelegt werden.
- Klicken Sie auf Zu Suite hinzufügen.
Variable Platzhalter hinzufügen
Variablen mit sich ständig ändernden Werten in Skill- oder Digital Assistant-Antworten führen dazu, dass Testfälle nicht erfolgreich sind, wenn der Testlauf den Istwert mit dem erwarteten Wert vergleicht. Sie können dynamische Informationen aus dem Vergleich ausschließen, indem Sie einen Platzhalter verwenden, der in der Skillantwort als ${MY_VARIBALE_NAME}
formatiert ist. Beispiel: Ein zeitlicher Wert, wie der Wert, der vom Datumsvorgang ${.now?string.full}
Apache FreeMarker zurückgegeben wird, führt dazu, dass Testfälle aufgrund einer Unstimmigkeit zwischen der Zeit, zu der der der Testfall aufgezeichnet wurde, und der Zeit, zu der der der Testfall ausgeführt wurde, kontinuierlich nicht erfolgreich sind.
Beschreibung der Abbildung view-variable-value-difference.png
messagePayload
im Textbereich "Unterhaltung" durch einen Platzhalter. Beispiel: ${ORDER_TIME}
ersetzt eine Datumszeichenfolge wie Monday, April 8, 2024 7:42:46 PM UTC
im Folgenden:{
"source": "bot",
"messagePayload": {
"type": "text",
"text": "You placed an order at ${ORDER_TIME} for a large Veggie pizza on thin crust. Your order will be delivered to your home at 04:30 PM."
}
}
Bei neu erstellten Testfällen enthält das Feld "Variable" den Platzhalter SYSTEM_BOT_ID, der automatisch für die
system.botId
-Werte ersetzt wird, die sich ändern, wenn der Skill aus einer anderen Instanz importiert oder geklont wurde.
Testfall aus einem JSON-Objekt erstellen
[]
) Dialogfenster mit den Nachrichtenobjekten vervollständigen müssen. Im Folgenden finden Sie eine Vorlage für die verschiedenen Payload-Typen: {
source: "user", //text only message format is kept simple yet extensible.
type: "text"
payload: {
message: "order pizza"
}
},{
source: "bot",
type: "text",
payload: {
message: "how old are you?"
actions: [action types --- postback, url, call, share], //bot messages can have actions and globalActions which when clicked by the user to send specific JSON back to the bot.
globalActions: [...]
}
},
{
source: "user",
type: "postback"
payload: { //payload object represents the post back JSON sent back from the user to the bot when the button is clicked
variables: {
accountType: "credit card"
},
action: "credit card",
state: "askBalancesAccountType"
}
},
{
source: "bot",
type: "cards"
payload: {
message: "label"
layout: "horizontal|vertical"
cards: ["Thick","Thin","Stuffed","Pan"], // In test files cards can be strings which are matched with button labels or be JSON matched
cards: [{
title: "...",
description: "..."
imageUrl: "...",
url: "...",
actions: [...] //actions can be specific to a card or global
}],
actions: [...],
globalActions: [...]
}
},
{
source: "bot|user",
type: "attachment" //attachment message could be either a bot message or a user message
payload: {
attachmentType: "image|video|audio|file"
url: "https://images.app.goo.gl/FADBknkmvsmfVzax9"
title: "Title for Attachment"
}
},
{
source: "bot",
type: "location"
payload: {
message: "optional label here"
latitude: 52.2968189
longitude: 4.8638949
}
},
{
source: "user",
type: "raw"
payload: {
... //free form application specific JSON for custom use cases. Exact JSON matching
}
}
...
//multiple bot messages per user message possible.]
}
Testfälle ausführen
Sie können einen geerbten Testfall nicht löschen, sondern nur deaktivieren.

Beschreibung der Abbildung test-run-results.png
Testlaufergebnisse anzeigen

Die Testlaufergebnisse für jeden Skill werden für einen Zeitraum von 14 Tagen gespeichert, danach werden sie aus dem System entfernt.
Nicht erfolgreiche Testfälle prüfen
Der Bericht listet die Fehlerpunkte auf Meldungsebene auf. In der Spalte "Meldungselement" wird die Position der Skillnachricht in der Testfallunterhaltung angegeben. Für jede Nachricht bietet der Bericht einen allgemeinen Vergleich der erwarteten und tatsächlichen Payloads. Um einen Drilldown durchzuführen und diesen Vergleich im Detail anzuzeigen und die Unterschiede abzustimmen, damit dieser Testfall in zukünftigen Testläufen erfolgreich sein kann, klicken Sie auf das Menü Aktionen.
Beschreibung der Abbildung der obersten Ebene-menu.png
Fehlerhafte Testfälle beheben
- Alle einblenden: Blendet die Nachrichtenobjektknoten ein.
- Unterschied anzeigen – Bietet einen direkten Vergleich der tatsächlichen und der erwarteten Ausgabe. Die Ansicht variiert je nach Knoten. Beispiel: Sie können eine einzelne Aktion oder das gesamte Aktionsarray anzeigen. Sie können diese Aktion verwenden, bevor Sie die tatsächliche und die erwartete Ausgabe abstimmen.
- Differenz ignorieren: Wählen Sie diese Aktion aus, wenn in Konflikt stehende Werte die Funktionalität nicht beeinträchtigen. Wenn Sie mehrere Unterschiede haben und diese nicht einzeln durchlaufen möchten, können Sie diese Option auswählen. Auf der Postback-Ebene können Sie beispielsweise Istwerte einzeln anwenden oder Unterschiede für das gesamte Postback-Objekt ignorieren.
- Tatsächlichen Wert anwenden – Einige Änderungen (so klein sie auch sein mögen) können dazu führen, dass viele Testfälle in derselben Ausführung nicht erfolgreich sind. Dies geschieht häufig bei Änderungen an Textzeichenfolgen, wie Prompts oder Labels. Beispiel: Wenn Sie einen Text-Prompt von "Wie groß soll die Pizza sein?" in "Welche Pizzagröße?" ändern, ist jeder Testfall, der diesen Prompt enthält, nicht erfolgreich, obwohl die Funktionalität des Skills gleich bleibt. Sie können diese Änderung durch erneute Aufzeichnung des Testfalls übernehmen. Sie können die Testfalldefinition aber auch stattdessen schnell mit dem überarbeiteten Prompt aktualisieren, indem Sie auf Istwert anwenden klicken. Da der Testfall nun mit der neuen Skilldefinition Schritt hält, wird der Testfall in zukünftigen Testläufen erfolgreich (bzw. zumindest nicht durch die geänderte Wortänderung nicht fehlschlagen).
Hinweis
Sie können zwar Zeichenfolgenwerte wie Prompts und URLs anwenden, aber nicht die Istwert anwenden verwenden, um einen Testfall zu korrigieren, wenn eine Änderung der Entitywerte oder des Verhaltens (z.B. die Deaktivierung der Funktion Out-of-Oder-Extraktion) dazu führt, dass die vom Testfall bereitgestellten Werte ungültig werden. Die Aktualisierung einer Entity führt dazu, dass der Fall nicht erfolgreich verläuft, weil der Skill kontinuierlich einen Wert anfordert, den er nie erhält. Die Antworten stimmen nicht mit der vom Testfall definierten Sequenz überein. - Regulären Ausdruck hinzufügen - Sie können einen regulären Ausdruck ersetzen, um in Konflikt stehende Textwerte aufzulösen. Beispiel: Sie fügen
user*
hinzu, um unvereinbareuser
- unduser1
-Zeichenfolgen aufzulösen. - Hinzufügen - Auf Postback-Ebene des Traversals werden Hinzufügen-Aktionen angezeigt, wenn ein geänderter Skill Postback-Aktionen enthält, die im Testfall nicht vorhanden waren. Um zu verhindern, dass der Testfall aufgrund der neuen Postback-Aktion nicht erfolgreich verläuft, können Sie auf Hinzufügen klicken, um ihn in den Testfall aufzunehmen. (Hinzufügen ähnelt Istwert anwenden, jedoch auf Postback-Ebene.)
Die für Eingabeparameter generierten Testergebnisse beziehen sich alle auf denselben ursprünglichen Testfall. Wenn Sie also einen Eingabeparameterwert in einem Testergebnis abstimmen, werden gleichzeitig die Werte für diesen Eingabeparameter in den restlichen Testergebnissen abgestimmt.
Testfälle importieren und exportieren
- Um eine Testsuite zu exportieren, wählen Sie zuerst die Testsuite (oder die Testsuites) aus. Klicken Sie anschließend auf Mehr > Ausgewählte Suite exportieren oder Alle exportieren. (Sie können auch alle Testsuites exportieren, indem Sie im Kebab-Menü die Option Tests exportieren auswählen.)
in der Skillkachel.) Die exportierte ZIP-Datei enthält einen Ordner mit dem NamentestSuites
, der eine JSON-Datei mit einer Beschreibung der exportierten Testsuite enthält. Beispiel für das JSON-Format:{ "displayName" : "TestSuite0001", "name" : "TestSuite0001", "testCases" : [ { "channelType" : "websdk", "conversation" : [ { "messagePayload" : { "type" : "text", "text" : "I would like a large veggie pizza on thin crust delivered at 4:30 pm", "channelExtensions" : { "test" : { "timezoneOffset" : 25200000 } } }, "source" : "user" }, { "messagePayload" : { "type" : "text", "text" : "Let's get started with that order" }, "source" : "bot" }, { "messagePayload" : { "type" : "text", "text" : "How old are you?" }, "source" : "bot" }, { "messagePayload" : { "type" : "text", "text" : "${AGE}", "channelExtensions" : { "test" : { "timezoneOffset" : 25200000 } } }, "source" : "user" }, { "messagePayload" : { "type" : "text", "text" : "You placed an order at ${ORDER_TIME} for a large Veggie pizza on thin crust. Your order will be delivered to your home at 04:30 PM." }, "source" : "bot" } ], "description" : "Tests all values with a single utterance. Uses input parameters and variable values", "displayName" : "Full Utterance Test", "enabled" : true, "inputParameters" : { "AGE" : [ "24", "25", "26" ] }, "name" : "FullUtteranceTest", "platformVersion" : "1.0", "trackingId" : "A0AAA5E2-5AAD-4002-BEE0-F5D310D666FD" } ], "trackingId" : "4B6AABC7-3A65-4E27-8D90-71E7B3C5264B" }
- Öffnen Sie die Seite "Testsuites" des Zielskills, und klicken Sie auf Weitere Informationen > Importieren.
- Navigieren Sie zur ZIP-Datei mit der JSON-Definition der Testsuites, und wählen Sie sie aus. Klicken Sie dann auf Hochladen.
- Nachdem der Import abgeschlossen ist, klicken Sie in der Bestätigungsbenachrichtigung auf Bericht herunterladen, um weitere Details zum Import in der JSON-Datei zu erhalten, die in der heruntergeladenen ZIP-Datei enthalten ist.
Beispiel:{ "status" : "SUCCESS", "statusMessage" : "Successfully imported test cases and test suites. Duplicate and invalid test cases/test suites ignored.", "truncatedDescription" : false, "validTestSuites" : 2, "duplicateTestSuites" : 0, "invalidTestSuites" : 0, "validTestCases" : 2, "duplicateTestCases" : 0, "invalidTestCases" : 0, "validationDetails" : [ { "name" : "DefaultTestSuite", "validTestCases" : 1, "duplicateTestCases" : 0, "invalidTestCases" : 0, "invalidReasons" : [ ], "warningReasons" : [ ], "testCasesValidationDetails" : [ { "name" : "Test1", "invalidReasons" : [ ], "warningReasons" : [ ] } ] }, { "name" : "TestSuite0001", "validTestCases" : 1, "duplicateTestCases" : 0, "invalidTestCases" : 0, "invalidReasons" : [ ], "warningReasons" : [ ], "testCasesValidationDetails" : [ { "name" : "Test2", "invalidReasons" : [ ], "warningReasons" : [ ] } ] } ] }

Um die Ursache des nicht erfolgreichen Ergebnisses zu finden, prüfen Sie das Array
invalidReasons
in der heruntergeladenen Datei importJSON
. "testCasesValidationDetails" : [ {
"name" : "Test",
"invalidReasons" : [ "INVALID_INPUT_PARAMETERS" ],
...