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 durch Aufzeichnen von Unterhaltungen im Unterhaltungstester. Diese Testfälle sind Teil der Metadaten des Skills, sodass sie über Versionen bleiben.
Aus diesem Grund können Sie diese Testfälle ausführen, um sicherzustellen, dass alle Erweiterungen, die an dem Skill vorgenommen wurden, die Basisfunktionalität nicht verletzt haben. Testfälle beschränken sich nicht nur auf die Beibehaltung der Kernfunktionen. Sie können damit neue Szenarios testen. Während sich Ihr Skill weiterentwickelt, können Sie die Testfälle zurückziehen, die aufgrund der Änderungen, die durch Erweiterungen eingeführt wurden, kontinuierlich nicht erfolgreich sind.
Alle Testfälle gehören zu einer Testsuite, Containern, 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 von Ihnen erstellte Testsuites sein oder von einem Skill geerbt wurden, den Sie erweitert oder geklont haben. Auf dieser Seite können Sie Test-Suites und Testfälle erstellen und verwalten sowie 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:
- Entfernen Sie bei Bedarf den Testfall aus den Testläufen, indem Sie Aktiviert ausschalten.
- 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. Dabei werden die Unterschiede zwischen der erwarteten Nachricht und der tatsächlichen Nachricht auf Postback-Variablenebene ignoriert.
- Geben Sie einen Namen und einen Anzeigenamen ein, die den Test beschreiben.
- Als optionalen Schritt fügen Sie 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 Testsuite eine andere Testsuite als die Standardtestsuite aus.
- Um 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 im Feld "Eingabeparameter" ein Array
{"AGE":["24","25","26"]}
und im Textbereich "Unterhaltung"${"AGE"}
(Platzhalter) ein. - Wenn der Skill oder die Antworten des digitalen Assistenten dynamische Informationen wie Zeitstempel enthalten, die dazu führen, dass Testfälle kontinuierlich nicht erfolgreich sind, 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
Wenn Sie variable Platzhalter hinzufügen, um sicherzustellen, dass Testfälle erfolgreich sind, wenn sich Werte für Skillnachrichten ständig ändern, fügen Sie Eingabeparameter hinzu, die auf eine Vielzahl von Werten in Benutzernachrichten getestet werden. Eingabeparameter vereinfachen das Testen, da sie Ihnen die Ausführung mehrerer Variationen eines einzelnen Testfalls ermöglichen. Ohne sie müssten Sie doppelte Testfälle für jeden Parameterwert erstellen. Aufgrund der Flexibilität der Eingabeparameter können Sie jedoch mehrere Testergebnisse generieren, indem Sie einfach ein Array für die Eingabeparameterwerte in Ihrer Testfalldefinition hinzufügen. Wenn Sie den Testfall ausführen, werden für jedes Element in der Definition des Eingabeparameter-Arrays separate Testergebnisse generiert. Ein Array aus drei Schlüssel/Wert-Paaren für Eingabeparameter 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-FreeMarker-Ausdruck, 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 von Zeichenfolgenwerten sein. Beispiel:{"AGE":["24","25","26"], "CRUST": ["Thick","Thin"]}
Beim Definieren von Eingabeparametern sind folgende Punkte zu beachten:- Nur Arrays verwenden - Eingabeparameter müssen als Arrays und nicht als Zeichenfolgen festgelegt werden.
{"NAME": "Mark"}
führt beispielsweise zu einem nicht erfolgreichen Testergebnis. - Verwenden Sie Zeichenfolgenwerte in Ihrem Array. Alle Arrayelemente müssen Zeichenfolgen sein. Wenn Sie stattdessen ein Element als Ganzzahlwert eingeben (Beispiel:
{"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 müssen ü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 verlaufen, wenn der Testlauf den tatsächlichen Wert mit dem erwarteten Wert vergleicht. Sie können dynamische Informationen aus dem Vergleich ausschließen, indem sie einen Platzhalter, der als ${MY_VARIBALE_NAME}
formatiert ist, in der Skillantwort ersetzen. Beispiel: Ein zeitlicher Wert, wie der vom Datumsvorgang ${.now?string.full}
Apache FreeMarker zurückgegebene, führt dazu, dass Testfälle aufgrund einer nicht übereinstimmenden Zeit, zu der der Testfall aufgezeichnet wurde, und der Zeit, zu der der der Testfall ausgeführt wurde, kontinuierlich fehlschlagen.
Beschreibung der Abbildung view-variabel-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 gibt das Feld "Variable" den Platzhalter SYSTEM_BOT_ID an, der automatisch für die
system.botId
-Werte eingesetzt wird, die sich ändern, wenn der Skill aus einer anderen Instanz importiert oder geklont wurde.
Testfall aus einem JSON-Objekt erstellen
[]
) mit den Nachrichtenobjekten ausfüllen 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.

Description of the illustration test-run-results.png
Testlaufergebnisse anzeigen

Die Testlaufergebnisse für jeden Skill werden für einen Zeitraum von 14 Tagen gespeichert. Anschließend werden sie aus dem System entfernt.
Nicht erfolgreiche Testfälle prüfen
Der Bericht listet die Fehlerpunkte auf Nachrichtenebene auf. In der Spalte "Nachrichtenelement" 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, um diesen Vergleich im Detail anzuzeigen und die Unterschiede abzustimmen, damit dieser Testfall in zukünftigen Testläufen erfolgreich ausgeführt werden kann, klicken Sie auf das Menü Aktionen.
Beschreibung der Abbildung auf oberster Ebene-menu.png
Fehlerhafte Testfälle beheben
- Alle einblenden: Blendet die Nachrichtenobjektknoten ein.
- Differenz anzeigen - Bietet einen direkten Vergleich der tatsächlichen und 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 sich aufeinander folgende Werte nicht auf die Funktionalität auswirken. Wenn Sie mehrere Unterschiede haben und Sie diese nicht einzeln durchgehen 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.
- Istwert anwenden: Einige Änderungen, auch wenn sie klein sind, können dazu führen, dass viele Testfälle in derselben Ausführung nicht erfolgreich sind. Dies ist häufig bei Änderungen an Textzeichenfolgen, wie Prompts oder Labels, der Fall. 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 übernehmen, indem Sie den Testfall entweder vollständig neu aufzeichnen. Sie können die Testfalldefinition aber auch stattdessen schnell mit dem überarbeiteten Prompt aktualisieren, indem Sie auf Tatsächlichen Wert anwenden klicken. Da der Testfall nun der neuen Skill-Definition entspricht, wird der Testfall in zukünftigen Testläufen bestanden (bzw. zumindest nicht aufgrund der geänderten Wortfolge).
Hinweis
Sie können zwar Zeichenfolgenwerte wie Prompts und URLs anwenden, aber nicht den Istwert anwenden verwenden, um einen Testfall zu korrigieren, wenn eine Änderung der Entitywerte oder des Verhaltens (z.B. die Deaktivierung der Funktion Out-of-Order-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, da der Skill kontinuierlich einen Wert anfordert, den sie nie erhält. Die Antworten entsprechen nicht der vom Testfall definierten Sequenz. - Regulären Ausdruck hinzufügen - Sie können einen regulären Ausdruck ersetzen, um widersprüchliche Textwerte aufzulösen. Beispiel: Sie fügen
user*
hinzu, um unvereinbareuser
- unduser1
-Zeichenfolgen aufzulösen. - Hinzufügen: Auf der Postback-Ebene der Traversal werden Aktionen vom Typ Hinzufügen 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 einzuschließen. (Hinzufügen ähnelt dem Istwert anwenden, jedoch auf Postback-Ebene.)
Das Set der für Eingabeparameter generierten Testergebnisse bezieht sich auf denselben ursprünglichen Testfall. Wenn Sie also einen Eingabeparameterwert in einem Testergebnis abstimmen, werden die Werte für diesen Eingabeparameter im Rest der Testergebnisse gleichzeitig abgestimmt.
Testfälle importieren und exportieren
- Um eine Testsuite zu exportieren, wählen Sie zuerst die Testsuite (oder die Testsuiten) aus. Klicken Sie dann auf Weitere Informationen > 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 namenstestSuites
mit einer JSON-Datei, in der die exportierte Testsuite beschrieben wird. 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 "Testsuiten" 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 für das nicht erfolgreiche Ergebnis zu ermitteln, prüfen Sie das Array
invalidReasons
in der heruntergeladenen Datei importJSON
. "testCasesValidationDetails" : [ {
"name" : "Test",
"invalidReasons" : [ "INVALID_INPUT_PARAMETERS" ],
...