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 von test-suites.png folgt
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

Die Aufzeichnung von Unterhaltungen ist schneller und weniger fehleranfällig als die Definition einer JSON-Datei. So erstellen Sie einen Testfall aus einer Unterhaltung:
  1. Öffnen Sie den Skill oder den digitalen Assistenten, für den Sie den Test erstellen möchten.
  2. Klicken Sie oben auf der Seite in der Symbolleiste auf Vorschau.
    Dieses Bild zeigt das Vorschausymbol am oberen Rand.

  3. Klicken Sie auf Bottester.
  4. 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.
  5. Geben Sie die für das Verhalten oder die Ausgabe, die getestet werden soll, spezifischen Äußerungen ein.
  6. Klicken Sie auf Als Test speichern.
    Bild der Schaltfläche "Als Test speichern"

  7. 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.
  8. 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 von input-parameters-test-run-results.png folgt
Beschreibung der Abbildung input-parameters-test-run-results.png

Um dem Testfall Eingabeparameter hinzuzufügen, müssen Sie den Wert text in der Nachrichten-Payload der Benutzernachricht durch einen Platzhalter ersetzen und ein entsprechendes Array von Parameterwerten definieren:
  1. Klicken Sie in der Ansicht "Bottester" auf Als Test speichern.
  2. 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
                    }
                }
            }
        },
  3. Klicken Sie auf Ein Bild des Pfeilsymbols, das das Feld erweitert., um das Feld "Eingabeparameter" einzublenden.
    Das Pfeilsymbol zum Erweitern des Feldes.

  4. 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 und AGE) führt dazu, dass der Testfall nicht erfolgreich verläuft.
  5. 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 von view-variable-value-difference.png folgt
Beschreibung der Abbildung view-variabel-value-difference.png

Um zu ermöglichen, dass diese Testfälle erfolgreich verlaufen, ersetzen Sie den Wert für die Konfliktzeit im Botobjekt 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."
        }
    }


Hinweis

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

Sie erstellen einen Testfall aus einem Arrayobjekt von Nachrichtenobjekten, indem Sie zuerst auf der Seite "Testsuite" auf + Testfall und dann auf das Dialogfeld "Neuer Testfall" klicken. Die Eigenschaften sind mit denen für aufgezeichnete Testfälle identisch, mit der Ausnahme, dass Sie das Array-Unterhaltungsfenster ([]) 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 Testläufe für einen einzelnen Testfall, eine Teilmenge von Testfällen oder für die gesamte Gruppe von Testfällen erstellen, die auf der Seite "Testsuite" aufgeführt sind. Während sich Ihr Skill weiterentwickelt, müssen Sie möglicherweise Testfälle zurückziehen, die aufgrund der absichtlichen Änderungen an einem Skill nicht erfolgreich sind. Sie können einen Testfall auch vorübergehend wegen fortlaufender Entwicklung deaktivieren.
Hinweis

Sie können einen geerbten Testfall nicht löschen, sondern nur deaktivieren.
After the test run completes, click the Test Run Results tab to find out which of the test cases passed or failed.
Beschreibung von test-run-results.png folgt
Description of the illustration test-run-results.png

Testlaufergebnisse anzeigen

Auf der Seite "Testlaufergebnisse" werden die zuletzt ausgeführten Testläufe und deren Ergebnisse aufgeführt. Die in den Testlauf kompilierten Testfälle sind nach einem Vergleich der erwarteten Ausgabe, die in der Testfalldefinition aufgezeichnet ist, und der tatsächlichen Ausgabe entweder erfolgreich oder nicht erfolgreich. Bei einer Übereinstimmung wird der Testfall als erfolgreich markiert. Andernfalls ist der Testfall nicht erfolgreich. Wenn Testfälle nicht erfolgreich sind, können Sie den Grund ermitteln, indem Sie auf Unterschiede anzeigen klicken.
Schaltfläche "Unterschiede anzeigen"

Hinweis

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 von top-level-menu.png folgt
Beschreibung der Abbildung auf oberster Ebene-menu.png

Fehlerhafte Testfälle beheben

Bei Bedarf können Sie mit den Aktionen Istwert anwenden, Differenz ignorieren und Hinzufügen einen Testfall (oder Teile eines Testfalls) beheben, um zu verhindern, dass er bei der nächsten Ausführung nicht erfolgreich verläuft. Die Optionen im Menü "Aktionen" sind knotenspezifisch. Daher unterscheiden sich die Aktionen auf Nachrichtenebene von den Aktionen an niedrigeren Punkten in der Traversal.
  • 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 unvereinbare user- und user1-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.)
Hinweis

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

Sie können Testsuites von einer Version des Skills in eine andere importieren, wenn Sie Parallelversionen desselben Skills entwickeln oder mit Klonen arbeiten.
  1. 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.
    Das ist das Döner-Menü.

    in der Skillkachel.) Die exportierte ZIP-Datei enthält einen Ordner namens testSuites 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"
    }
  2. Öffnen Sie die Seite "Testsuiten" des Zielskills, und klicken Sie auf Weitere Informationen > Importieren.
  3. Navigieren Sie zur ZIP-Datei mit der JSON-Definition der Testsuites, und wählen Sie sie aus. Klicken Sie dann auf Hochladen.
  4. 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.
    Der Link "Bericht herunterladen" in der Benachrichtigung.

    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" : [ ]
        } ]
      } ]
    }
Sie können nur gültige Testfälle importieren.
Das Warndialogfeld für ungültige Testfallimporte

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" ],
   ...