Suites de tests et scénarios de tests
Vous pouvez créer un scénario de test pour différents cas d'utilisation. Vous créez un de ces scénarios de test à partir de JSON ou en enregistrant des conversations dans le testeur de conversation. Ces scénarios de test font partie des métadonnées de la compétence afin qu'ils persistent entre les versions.
Pour cette raison, vous pouvez exécuter ces scénarios de test pour vous assurer que les extensions apportées à la compétence n'ont pas brisé les fonctionnalités de base. Les scénarios de test ne se limitent pas à la préservation des fonctions de base. Vous les utilisez pour tester de nouveaux scénarios. Au fur et à mesure que votre compétence évolue, vous pouvez retirer les scénarios de test qui échouent continuellement en raison des modifications apportées au moyen d'extensions.
Tous les scénarios de test appartiennent à une suite de tests, des conteneurs qui vous permettent de partitionner vos tests. Nous fournissons une suite de tests appelée Default Test Suite, mais vous pouvez également créer la vôtre. La page Groupes tests répertorie tous les groupes de tests et les scénarios de test qui leur appartiennent. Les séries de tests listées dans cette page peuvent être celles que vous avez créées ou avoir été héritées d'une compétence que vous avez étendue ou clonée. Vous pouvez utiliser cette page pour créer et gérer des séries de tests et des scénarios de test et les compiler dans des exécutions de test.
Description de l'illustration test-suites.png
Ajouter des scénarios de test
Que vous définissiez une compétence à partir de zéro ou que vous étendiez une compétence existante, vous pouvez créer un scénario test pour chaque cas d'utilisation. Par exemple, vous pouvez créer un scénario de test pour chaque type de données utiles. Vous pouvez créer une suite complète de scénarios de test pour une compétence simplement en enregistrant des conversations ou en créant des fichiers JSON qui définissent des objets de message.
Créer un scénario de test à partir d'une conversation
- Ouvrez la compétence ou l'assistant numérique pour lequel vous voulez créer le test.
- Dans la barre d'outils située en haut de la page, cliquez sur Prévisualiser.
- Cliquez sur Bot Tester.
- Sélectionnez le canal.
Note
Les scénarios de test sont propres au canal : c'est la conversation de test, telle qu'elle est traitée par le canal sélectionné, qui est enregistrée pour un scénario de test. Par exemple, les scénarios de test enregistrés à l'aide de l'un des canaux texte du testeur de compétence ne peuvent pas être utilisés pour tester la même conversation sur le canal Web Oracle. - Entrez les énoncés spécifiques au comportement ou à la sortie à tester.
- Cliquez sur Save as Test (Enregistrer en tant que test).
- Complétez la boîte de dialogue Save Conversation as Test Case (Enregistrer la conversation en tant que test) :
- Si nécessaire, excluez le scénario de test des exécutions de test en désactivant Activé.
- Si vous exécutez un scénario de test pour des conversations ou des messages ayant des actions de republication, vous pouvez activer Ignorer les variables de republication pour permettre au scénario de réussir en ignorant les différences entre le message attendu et le message réel au niveau de la variable de republication.
- Entrez un nom et un nom d'affichage décrivant le test.
- Comme étape facultative, ajoutez des détails dans le champ Description qui décrivent comment le scénario de test valide le comportement attendu pour un scénario ou un cas d'utilisation.
- Si nécessaire, sélectionnez une suite de tests autre que la suite de tests par défaut dans la liste Test Suite (Suite de tests).
- Pour tester les différentes valeurs de paramètre que les utilisateurs peuvent entrer dans leurs demandes ou réponses, ajoutez des tableaux à l'objet dans le champ Paramètres d'entrée pour chaque paramètre d'entrée et remplacez les paramètres fictifs correspondants par l'entrée utilisateur que vous testez dans la zone de texte Conversation. Par exemple, entrez un tableau
{"AGE":["24","25","26"]}
dans le champ Paramètres d'entrée et${"AGE"}
(paramètre fictif) dans la zone de texte Conversation. - Si les réponses de la compétence ou de l'assistant numérique incluent des informations dynamiques telles que des horodatages qui entraîneront l'échec continu des scénarios de test, remplacez la définition de variable qui alimente ces valeurs par un paramètre fictif formaté comme
${MY_VARIBALE_NAME}
.
- Cliquez sur Add to Suite (Ajouter à la suite).
Ajouter des paramètres d'entrée pour les messages d'utilisateur
Pendant que vous ajoutez des paramètres fictifs de variable pour vous assurer que les scénarios de test réussissent lorsque les messages de compétence ont des valeurs en constante modification, vous ajoutez des paramètres d'entrée pour tester une variété de valeurs dans les messages d'utilisateur. Les paramètres d'entrée simplifient les tests car ils vous permettent d'exécuter plusieurs variantes d'un seul scénario de test. Sans eux, vous devrez créer des scénarios de test en double pour chaque valeur de paramètre. Toutefois, en raison de la flexibilité offerte par les paramètres d'entrée, vous pouvez générer plusieurs résultats de test en ajoutant simplement un tableau pour les valeurs des paramètres d'entrée dans votre définition de scénario de test. Lorsque vous exécutez le scénario de test, des résultats de test distincts sont générés pour chaque élément de votre définition de tableau de paramètres d'entrée. Un tableau de trois paires clé-valeur de paramètre d'entrée entraîne une exécution de test avec trois résultats de test, par exemple. La numérotation de ces résultats est basée sur l'index de l'élément de tableau correspondant.
Description de l'illustration input-parameters-test-run-results.png
text
dans les données utiles du message de l'utilisateur par un paramètre fictif et définir un tableau correspondant de valeurs de paramètre :
- Dans la vue Test de robot, cliquez sur Enregistrer en tant que test.
- Dans la zone de texte Conversation, remplacez la valeur du champ
text
dans un message utilisateur ({"source": "user", ...}
) par une expression Apache FreeMarker qui nomme le paramètre d'entrée. Par exemple,"${AGE}"
dans l'extrait de code suivant :{ "source": "user", "messagePayload": { "type": "text", "text": "${AGE}", "channelExtensions": { "test": { "timezoneOffset": 25200000 } } } },
- Cliquez sur
pour développer le champ Paramètres d'entrée.
- Dans l'objet de champ Paramètres d'entrée (
{}
), ajoutez des paires clé-valeur pour chaque paramètre. Les valeurs doivent être des tableaux de valeurs de chaîne. Par exemple :{"AGE":["24","25","26"], "CRUST": ["Thick","Thin"]}
Voici quelques points à noter lors de la définition des paramètres d'entrée :- Utiliser des tableaux seulement - Les paramètres d'entrée doivent être définis en tant que tableaux et non en tant que chaînes.
{"NAME": "Mark"}
entraîne un résultat de test ayant échoué, par exemple. - Utilisez des valeurs de chaîne dans votre tableau - Tous les éléments du tableau doivent être des chaînes. Si vous entrez un élément en tant que valeur entière à la place (
{"AGE": ["25", 26]}
, par exemple), il sera converti en chaîne. Aucun résultat de test n'est généré pour les valeurs nulles.{ "AGE": [ "24", "25", null ] }
donne deux résultats de test, pas trois. - Utilisez une casse cohérente - La casse de la clé et du paramètre fictif dans l'expression FreeMarker doit correspondre. Le casse non concordant (
Age
etAGE
, par exemple) entraînera l'échec du scénario de test.
- Utiliser des tableaux seulement - Les paramètres d'entrée doivent être définis en tant que tableaux et non en tant que chaînes.
- Cliquez sur Add to Suite (Ajouter à la suite).
Ajouter des paramètres fictifs de variable
Les variables avec des valeurs en constante évolution dans les réponses de compétence ou d'assistant numérique entraîneront l'échec des scénarios de test lorsque l'exécution du test compare la valeur réelle à la valeur attendue. Vous pouvez exclure les informations dynamiques de la comparaison en ajoutant un paramètre fictif au format ${MY_VARIBALE_NAME}
dans la réponse de la compétence. Par exemple, une valeur temporelle, telle que celle retournée par l'opération de date ${.now?string.full}
Apache FreeMarker, entraînera l'échec continu des scénarios de test en raison de la non-concordance de l'heure à laquelle le scénario de test a été enregistré et de l'heure à laquelle le scénario de test a été exécuté.
Description de l'illustration view-variable-value-difference.png
messagePayload
du robot dans la zone de texte Conversation par un paramètre fictif. Par exemple, ${ORDER_TIME}
remplace une chaîne de date comme Monday, April 8, 2024 7:42:46 PM UTC
dans les éléments suivants :{
"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."
}
}
Pour les nouveaux scénarios de test, le champ Variable contient le paramètre fictif SYSTEM_BOT_ID qui est automatiquement remplacé par les valeurs
system.botId
qui changent lorsque la compétence a été importée à partir d'une autre instance ou clonée.
Créer un scénario de test à partir d'un objet JSON
[]
) avec les objets de message. Voici le modèle pour les différents types de données utiles : {
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.]
}
Exécuter des scénarios de test
Vous ne pouvez pas supprimer un scénario de test hérité, vous pouvez uniquement le désactiver.

Description de l'illustration test-run-results.png
Voir les résultats d'exécution des tests

Les résultats d'exécution de test pour chaque compétence sont stockés pendant une période de 14 jours, après quoi ils sont supprimés du système.
Vérifier les scénarios de test qui ont échoué
Le rapport répertorie les points d'échec au niveau du message. La colonne Élément de message indique la position du message de compétence dans la conversation du scénario de test. Pour chaque message, le rapport fournit une comparaison de haut niveau des données utiles attendues et réelles. Pour forer pour voir cette comparaison en détail et pour rapprocher les différences afin de permettre la réussite de ce scénario de test dans les exécutions de test futures, cliquez sur le menu Actions.
Description de l'illustration top-level-menu.png
Corriger les scénarios de test en échec
- Tout développer - Développe les noeuds d'objet de message.
- Voir la différence - Fournit une comparaison côte à côte de la sortie réelle et attendue. La vue varie en fonction du noeud. Par exemple, vous pouvez afficher une seule action ou l'ensemble du tableau d'actions. Vous pouvez utiliser cette action avant de rapprocher la sortie réelle et la sortie prévue.
- Ignorer la différence - Sélectionnez cette action lorsque des valeurs en conflit n'ont pas d'incidence sur la fonctionnalité. Si vous avez plusieurs différences et que vous ne voulez pas les parcourir une par une, vous pouvez choisir cette option. Au niveau de la republication, par exemple, vous pouvez appliquer les valeurs réelles individuellement ou ignorer les différences pour l'ensemble de l'objet de republication.
- Appliquer la valeur réelle - Certaines modifications, même mineures, peuvent entraîner l'échec de nombreux cas de test au cours de la même exécution. Il s'agit en général des modifications apportées aux chaînes de texte telles que les invites ou les étiquettes. Par exemple, si vous modifiez l'invite "How big of a pizza do you want?" (Quelle taille de pizza voulez-vous?) en "What pizza size?" (Quelle taille de pizza?), tout scénario de test qui contient cette invite échoue, même si la fonctionnalité de la compétence n'est pas affectée. Vous pouvez appliquer cette modification en réenregistrant entièrement le scénario de test, mais vous pouvez mettre à jour rapidement la définition de ce dernier avec l'invite modifiée en cliquant sur Apply Actual Value. Comme le scénario de test est à présent conforme à la nouvelle définition de la compétence, il réussit (ou, s'il échoue, ce n'est pas à cause de la formulation modifiée) lors des prochaines exécutions de test.
Note
Bien que vous puissiez appliquer des valeurs de chaîne, telles que des invites et des URL, vous ne pouvez pas utiliser Apply Actual Value (Appliquer la valeur réelle) pour corriger un scénario de test lorsqu'une modification des valeurs d'une entité ou de son comportement (désactivation de la fonction Out of Order Extraction (Extraction de la commande), par exemple) rend non valides les valeurs fournies par le scénario de test. La mise à jour d'une entité entraîne l'échec du cas, car la compétence demande continuellement une valeur qu'elle ne reçoit jamais et ses réponses ne correspondent pas à la séquence définie par le scénario de test. - Ajouter une expression rationnelle - Vous pouvez remplacer une expression rationnelle pour résoudre les valeurs de texte en conflit. Par exemple, vous ajoutez
user*
pour résoudre les chaînesuser
etuser1
en conflit. - Add (Ajouter) - Au niveau de republication du parcours, les actions Add (Ajouter) s'affichent lorsqu'une compétence révisée inclut des actions de republication qui n'étaient pas présentes dans le scénario de test. Pour éviter l'échec du scénario de test en raison de la nouvelle action de republication, vous pouvez cliquer sur Add (Ajouter) pour l'inclure dans le scénario de test. (Ajouter est similaire à Appliquer la valeur réelle, mais au niveau de la republication.)
Le jeu de résultats de test généré pour les paramètres d'entrée font tous référence au même scénario de test initial, de sorte que le rapprochement d'une valeur de paramètre d'entrée dans un résultat de test rapproche simultanément les valeurs de ce paramètre d'entrée dans le reste des résultats de test.
Importer et exporter des scénarios de test
- Pour exporter une suite de tests, sélectionnez d'abord la suite de tests (ou les suites de tests). Cliquez ensuite sur Plus > Exporter la suite sélectionnée ou sur Tout exporter. (Vous pouvez également exporter toutes les séries de tests en sélectionnant Exporter les tests dans le menu kebab.
dans la vignette de compétence.) Le fichier ZIP exporté contient un dossier nommétestSuites
qui contient un fichier JSON décrivant la suite de tests exportée. Voici un exemple de format JSON :{ "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" }
- Ouvrez la page Suites de tests de la compétence cible, puis cliquez sur More (Plus) > Import (Importer).
- Accédez au fichier ZIP contenant la définition JSON des suites de tests, puis sélectionnez-le. Cliquez ensuite sur Charger.
- Une fois l'importation terminée, cliquez sur Télécharger le rapport dans l'avis de confirmation pour obtenir plus de détails sur l'importation dans le fichier JSON inclus dans le fichier ZIP téléchargé.
Par exemple :{ "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" : [ ] } ] } ] }

Pour trouver la cause du résultat de l'échec, vérifiez le tableau
invalidReasons
dans le fichier importJSON
téléchargé. "testCasesValidationDetails" : [ {
"name" : "Test",
"invalidReasons" : [ "INVALID_INPUT_PARAMETERS" ],
...