Suite di test e test di esempio

È possibile creare un caso di test per casi d'uso diversi. È possibile creare uno di questi casi di test da JSON o registrando le conversazioni nel tester delle conversazioni. Questi casi di test fanno parte dei metadati dello skill in modo che persistano tra le versioni.

Per questo motivo, è possibile eseguire questi casi di test per assicurarsi che tutte le estensioni apportate alla competenza non abbiano rotto la funzionalità di base. I casi di test non si limitano a preservare solo le funzioni principali. Li si utilizza per testare nuovi scenari. Man mano che la tua abilità si evolve, puoi ritirare i casi di test che falliscono continuamente a causa dei cambiamenti introdotti attraverso le estensioni.

Tutti i casi di test appartengono a una suite di test, contenitori che consentono di partizionare i test. Forniamo una suite di test chiamata Default Test Suite, ma puoi anche crearne una tua. La pagina Suite di test elenca tutte le suite di test e i casi di test che le appartengono. Le suite di test elencate in questa pagina potrebbero essere quelle create dall'utente o ereditate da un'abilità estesa o duplicata. È possibile utilizzare questa pagina per creare e gestire suite di test e casi di test e compilare casi di test in esecuzioni di test.
Descrizione del test: suites.png
Descrizione della figura test-suites.png

Aggiungi casi di test

Che si tratti di creare uno skill da zero o di estendere uno skill, è possibile creare un caso di test per ogni caso d'uso. Ad esempio, è possibile creare un caso di test per ogni tipo di payload. È possibile creare un'intera suite di casi di test per una competenza semplicemente registrando le conversazioni o creando file JSON che definiscono gli oggetti messaggio.

Creare un caso di test da una conversazione

La registrazione delle conversazioni è più rapida e meno soggetta a errori rispetto alla definizione di un file JSON. Per creare un caso di test da una conversazione:
  1. Aprire lo skill o l'assistente digitale per il quale si desidera creare il test.
  2. Nella barra degli strumenti nella parte superiore della pagina, fare clic su Anteprima.
    Questa è un'immagine dell'icona Anteprima nel margine superiore.

  3. Fare clic su Tester bot.
  4. Selezionare il canale.
    Nota

    I casi di test sono specifici del canale: la conversazione di test, gestita dal canale selezionato, è ciò che viene registrato per un caso di test. Ad esempio, i casi di test registrati utilizzando uno dei canali basati su testo del tester skill non possono essere utilizzati per eseguire il test della stessa congruenza sul canale Web Oracle.
  5. Immettere le espressioni specifiche del comportamento o dell'output che si desidera testare.
  6. Fare clic su Salva come test.
    Immagine del pulsante Salva come test

  7. Completare la finestra di dialogo Salva conversazione come caso di test:
    • Se necessario, escludere il caso di test dalle esecuzioni di test disattivando Abilitato.
    • Se si sta eseguendo un caso di test per conversazioni o messaggi con azioni di postback, è possibile attivare Ignora variabili postback per consentire il passaggio del caso di test ignorando le differenze tra il messaggio previsto e il messaggio effettivo a livello di variabile postback.
    • Immettere un nome e un nome visualizzato che descrivano il test.
    • Come passo facoltativo, aggiungere i dettagli nel campo Descrizione che descrivono il modo in cui il caso di test convalida il funzionamento previsto per uno scenario o un caso d'uso.
    • Se necessario, selezionare una suite di test diversa da Default Test Suite dall'elenco Test Suite.
    • Per eseguire il test dei diversi valori dei parametri che gli utenti possono immettere nelle richieste o nelle risposte, aggiungere array all'oggetto nel campo Parametri di input per ogni parametro di input e sostituire i segnaposto corrispondenti per l'input utente di cui si sta eseguendo il test nell'area di testo Conversazione. Ad esempio, immettere un array {"AGE":["24","25","26"]} nel campo Parametri di input e ${"AGE"} (il segnaposto) nell'area di testo Conversazione.
    • Se le risposte dello skill o dell'assistente digitale includono informazioni dinamiche, ad esempio indicatori orari, che potrebbero causare errori continui nei casi di test, sostituire la definizione di variabile che popola questi valori con un segnaposto formattato come ${MY_VARIBALE_NAME}.
  8. Fare clic su Aggiungi a suite.

Aggiungere parametri di input per i messaggi utente

Quando si aggiungono segnaposto variabili per assicurarsi che i casi di test vengano superati quando i messaggi di skill presentano valori in continua evoluzione, è necessario aggiungere parametri di input per verificare la presenza di vari valori nei messaggi utente. I parametri di input semplificano i test perché consentono di eseguire più variazioni di un singolo caso di test. Senza di essi, è necessario creare casi di test duplicati per ogni valore di parametro. A causa della flessibilità offerta dai parametri di input, tuttavia, è possibile generare più risultati di test semplicemente aggiungendo un array per i valori dei parametri di input nella definizione del caso di test. Quando si esegue il caso di test, vengono generati risultati di test separati per ogni elemento nella definizione dell'array dei parametri di input. Un array di tre coppie chiave-valore dei parametri di input determina un'esecuzione del test con tre risultati del test, ad esempio. La numerazione di questi risultati si basa sull'indice dell'elemento array corrispondente.
Di seguito è riportata la descrizione dell'input-parameters-test-run-results.png
Descrizione dell'immagine input-parameters-test-run-results.png

Per aggiungere parametri di input al caso di test, è necessario sostituire il valore text nel payload dei messaggi del messaggio utente con un segnaposto e definire un array corrispondente di valori dei parametri:
  1. Nella vista Tester bot, fare clic su Salva come test.
  2. Nell'area di testo della conversazione, sostituire il valore del campo text in un messaggio utente ({"source": "user", ...}) con un'espressione FreeMarker Apache che assegna un nome al parametro di input. Ad esempio, "${AGE}" nel seguente snippet:
       {
            "source": "user",
            "messagePayload": {
                "type": "text",
                "text": "${AGE}",
                "channelExtensions": {
                    "test": {
                        "timezoneOffset": 25200000
                    }
                }
            }
        },
  3. Fare clic su Immagine del simbolo della freccia che espande il campo. per espandere il campo Parametri di input.
    Icona freccia per l'espansione del campo.

  4. Nell'oggetto campo Parametri di input ({}), aggiungere coppie di valori chiave per ogni parametro. I valori devono essere array di valori di stringa. Ad esempio:
    {"AGE":["24","25","26"], "CRUST": ["Thick","Thin"]}


    Di seguito sono riportate alcune cose da notare quando si definiscono i parametri di input.
    • Usa solo array: i parametri di input devono essere impostati come array e non come stringhe. {"NAME": "Mark"} restituisce un risultato del test non riuscito, ad esempio.
    • Usa i valori stringa nell'array - Tutti gli elementi dell'array devono essere stringhe. Se si immette un elemento come valore intero, ad esempio {"AGE": ["25", 26]}, verrà convertito in stringa. Non vengono generati risultati di test per valori nulli. { "AGE": [ "24", "25", null ] } restituisce due risultati di test, non tre.
    • Usa involucro coerente: l'involucro per la chiave e il segnaposto nell'espressione FreeMarker deve corrispondere. L'involucro non corrispondente (ad esempio Age e AGE) causerà l'errore del caso di test.
  5. Fare clic su Aggiungi a suite.

Aggiungi segnaposto variabile

Le variabili con valori in continua evoluzione nelle risposte di skill o assistente digitale faranno sì che i casi di test non funzionino quando l'esecuzione del test confronta il valore effettivo con il valore previsto. È possibile escludere le informazioni dinamiche dal confronto sostituendo un segnaposto formattato come ${MY_VARIBALE_NAME} nella risposta skill. Ad esempio, un valore temporale, ad esempio quello restituito dall'operazione di data ${.now?string.full} Apache FreeMarker, causerà l'errore continuo dei casi di test a causa della mancata corrispondenza tra il momento in cui è stato registrato il caso di test e il momento in cui è stato eseguito il caso di test.
Di seguito è riportata la descrizione di view-variable-value-difference.png
Descrizione dell'immagine view-variable-value-difference.png

Per consentire il superamento di questi casi di test, sostituire il valore del tempo di conflitto nell'oggetto bot messagePayload nell'area di testo Conversazione con un segnaposto. Ad esempio, ${ORDER_TIME} sostituisce una stringa di data come Monday, April 8, 2024 7:42:46 PM UTC nel seguente modo:
{
        "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."
        }
    }


Nota

Per i nuovi casi di test creati, il campo Variabile indica il segnaposto SYSTEM_BOT_ID che viene sostituito automaticamente con i valori system.botId che cambiano quando lo skill è stato importato da un'altra istanza o duplicato.

Creare un caso di test da un oggetto JSON

Per creare un caso di test da un oggetto array di oggetti messaggio, fare prima clic su + Caso di test nella pagina Suite di test, quindi completare la finestra di dialogo Nuovo caso di test. Le proprietà sono uguali a quelle dei casi di test registrati, tranne per il fatto che è necessario completare la finestra Conversazioni array ([]) con gli oggetti messaggio. Di seguito è riportato un modello per i diversi tipi di payload.
    {
        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.]
}
 

Esegui casi di test

È possibile creare esecuzioni di test per un singolo caso di test, un subset di casi di test o per l'intero set di casi di test elencati nella pagina Suite di test. Man mano che la tua abilità evolve, potresti dover ritirare i casi di test che sono destinati a fallire a causa dei cambiamenti che sono stati deliberatamente apportati a un'abilità. È inoltre possibile disabilitare temporaneamente un caso di test a causa dello sviluppo in corso.
Nota

Non è possibile eliminare un caso di test ereditato, ma solo disabilitarlo.
Al termine dell'esecuzione del test, fare clic sulla scheda Risultati esecuzione test per individuare i casi di test passati o non riusciti.
Descrizione del test-run-results.png:
Descrizione dell'esecuzione del test della figura: results.png

Visualizza risultati esecuzione test

La pagina Risultati esecuzione test elenca le esecuzioni di test eseguite di recente e i relativi risultati. I casi di prova compilati nell'esecuzione della prova passano o falliscono in base a un confronto tra l'output previsto registrato nella definizione del caso di prova e l'output effettivo. Se le due corrispondenze corrispondono, il caso di test viene superato. Se non lo fanno, il caso di test fallisce. Quando i casi di test non riescono, è possibile scoprire perché facendo clic su Visualizza differenze.
Pulsante Visualizza differenze

Nota

I risultati dell'esecuzione del test per ogni skill vengono memorizzati per un periodo di 14 giorni, trascorsi i quali vengono rimossi dal sistema.

Rivedi casi di test non riusciti

Il report elenca i punti di errore a livello di messaggio, con la colonna Elemento messaggio che indica la posizione del messaggio di skill nella conversazione del caso di test. Per ogni messaggio, il report fornisce un confronto di alto livello dei payload previsti ed effettivi. Per eseguire il drill-down per visualizzare questo confronto in dettaglio e riconciliare le differenze per consentire il superamento di questo caso di test nelle esecuzioni di test future, fare clic sul menu Azioni.
Di seguito è riportata la descrizione del livello superiore menu.png
Descrizione dell'immagine di livello superiore: menu.png

Correggi casi di test non riusciti

Se necessario, è possibile utilizzare le azioni Applica valore effettivo, Ignora differenza e Aggiungi per correggere un caso di test (o parti di un caso di test) per evitare che si verifichi un errore alla successiva esecuzione. Le opzioni del menu Azioni sono specifiche del nodo, pertanto le azioni a livello di messaggio differiscono da quelle nei punti inferiori dell'attraversamento.
  • Espandi tutto: espande i nodi dell'oggetto messaggio.
  • Visualizza differenza: fornisce un confronto diretto tra l'output effettivo e quello previsto. La vista varia a seconda del nodo. Ad esempio, è possibile visualizzare una singola azione o l'intero array di azioni. È possibile utilizzare questa azione prima di riconciliare l'output effettivo e quello previsto.

  • Ignora differenza: scegliere questa azione quando i valori in conflitto non influiscono sulla funzionalità. Se hai più differenze e non vuoi passarle una per una, puoi scegliere questa opzione. A livello di postback, ad esempio, è possibile applicare i valori effettivi singolarmente oppure ignorare le differenze per l'intero oggetto postback.
  • Applica valore effettivo: alcune modifiche, anche se di piccole dimensioni, possono causare l'errore di molti casi di test all'interno della stessa esecuzione. Questo si verifica spesso con le modifiche alle stringhe di testo, ad esempio prompt o etichette. Ad esempio, la modifica di un prompt di testo da "Quanto grande di una pizza vuoi?" a "Quale dimensione della pizza?" causerà il fallimento di qualsiasi caso di test che includa questo prompt, anche se la funzionalità dell'abilità rimane inalterata. Sebbene sia possibile accogliere questa modifica registrando completamente il caso di test, è possibile aggiornare rapidamente la definizione del caso di test con il prompt rivisto facendo clic su Applica valore effettivo. Poiché il caso di test è ora al passo con la nuova definizione di skill, il caso di test passerà (o almeno non fallirà a causa della modifica della formulazione) nelle prossime esecuzioni di test.
    Nota

    Sebbene sia possibile applicare valori stringa, ad esempio prompt e URL, non è possibile utilizzare la funzione Applica valore effettivo per correggere un caso di test quando una modifica ai valori di un'entità o al relativo funzionamento (la disabilitazione della funzione Estrazione fuori ordine, ad esempio) rende non validi i valori forniti dal caso di test. L'aggiornamento di un'entità causerà l'errore del caso perché l'abilità richiederà continuamente un valore che non riceverà mai e le relative risposte non saranno al passo con la sequenza definita dal caso di test.
  • Aggiungi espressione regolare: è possibile sostituire un'espressione Regex per risolvere i valori di testo in conflitto. Ad esempio, si aggiunge user* per risolvere le stringhe user e user1 in conflitto.
  • Aggiungi: al livello di postback dello spostamento, le azioni Aggiungi vengono visualizzate quando uno skill rivisto include azioni di postback non presenti nel caso di test. Per evitare che il caso di test non riesca a causa della nuova azione di postback, è possibile fare clic su Aggiungi per includerlo nel caso di test. (Aggiungi è simile a Applica valore effettivo, ma a livello di postback).
Nota

Il set di risultati del test generato per i parametri di input si riferisce tutti allo stesso caso di test originale, pertanto la riconciliazione di un valore di parametro di input in un unico risultato del test riconcilia contemporaneamente i valori di tale parametro di input nel resto dei risultati del test.

Importa ed esporta casi di test

È possibile importare le suite di test da una versione dello skill a un'altra quando si sviluppano versioni parallele dello stesso skill o si utilizzano cloni.
  1. Per esportare una suite di test, selezionare prima la suite di test (o suite di test). Quindi fare clic su Altro > Esporta suite selezionata o su Esporta tutto. È inoltre possibile esportare tutte le suite di test selezionando Esporta test dal menu a schede.
    Questo è il menu kebab.

    nella casella abilità.) Il file ZIP esportato contiene una cartella denominata testSuites con un file JSON che descrive la suite di test esportata. Ecco un esempio del formato 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"
    }
  2. Aprire la pagina Suite di test dello skill di destinazione, quindi fare clic su Altro > Importa.
  3. Cercare, quindi selezionare, il file ZIP contenente la definizione JSON delle suite di test. quindi fare clic su Carica.
  4. Al termine dell'importazione, fare clic su Scarica report nella notifica di conferma per ulteriori dettagli sull'importazione nel file JSON incluso nel file ZIP scaricato.
    Collegamento Scarica report nel messaggio di notifica.

    Ad esempio:
    {
      "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" : [ ]
        } ]
      } ]
    }
È possibile importare solo casi di test validi.
Finestra di dialogo di avvertenza per le importazioni di casi di test non validi

Per trovare la causa del risultato non riuscito, esaminare l'array invalidReasons nel file importJSON scaricato.
    "testCasesValidationDetails" : [ {
      "name" : "Test",
      "invalidReasons" : [ "INVALID_INPUT_PARAMETERS" ],
   ...