Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.
Crea un test case IDT eseguibile
È possibile creare e inserire un test case eseguibile in una cartella della suite di test nei seguenti modi:
-
Per le suite di test che utilizzano argomenti o variabili di ambiente dai
test.jsonfile per determinare quali test eseguire, puoi creare un singolo eseguibile di test case per l'intera suite di test o un eseguibile di test per ogni gruppo di test nella suite di test. -
Per una suite di test in cui desideri eseguire test specifici in base a comandi specificati, crei un test case eseguibile per ogni test case nella suite di test.
In qualità di autore di test, puoi determinare quale approccio è appropriato per il tuo caso d'uso e strutturare l'eseguibile del tuo test case di conseguenza. Assicuratevi di fornire il percorso eseguibile del test case corretto in ogni test.json file e che l'eseguibile specificato venga eseguito correttamente.
Quando tutti i dispositivi sono pronti per l'esecuzione di un test case, IDT legge i seguenti file:
-
Il caso
test.jsondi test selezionato determina i processi da avviare e le variabili di ambiente da impostare. -
suite.jsonPer la suite di test determina le variabili di ambiente da impostare.
IDT avvia il processo eseguibile di test richiesto in base ai comandi e agli argomenti specificati nel test.json file e passa le variabili di ambiente richieste al processo.
Usa l'IDT Client SDK
Gli IDT Client SDK consentono di semplificare il modo in cui si scrive la logica di test nell'eseguibile di test con comandi API che è possibile utilizzare per interagire con IDT e i dispositivi in fase di test. IDT attualmente fornisce i seguenti SDK:
-
IDT Client SDK per Python
-
IDT Client SDK per Go
-
IDT Client SDK per Java
Questi SDK si trovano nella cartella. Quando crei un nuovo eseguibile del test case, devi copiare l'SDK che desideri utilizzare nella cartella che contiene l'eseguibile del test case e fare riferimento all'SDK nel codice. Questa sezione fornisce una breve descrizione dei comandi API disponibili che è possibile utilizzare negli eseguibili del test case. <device-tester-extract-location>/sdks
In questa sezione
Interazione con il dispositivo
I seguenti comandi consentono di comunicare con il dispositivo in fase di test senza dover implementare ulteriori funzioni di gestione dell'interazione e della connettività del dispositivo.
ExecuteOnDevice-
Consente alle suite di test di eseguire comandi di shell su un dispositivo che supporta connessioni shell SSH o Docker.
CopyToDevice-
Consente alle suite di test di copiare un file locale dalla macchina host che esegue IDT in una posizione specificata su un dispositivo che supporta connessioni SSH o Docker shell.
ReadFromDevice-
Consente alle suite di test di leggere dalla porta seriale dei dispositivi che supportano le connessioni UART.
Nota
Poiché IDT non gestisce le connessioni dirette ai dispositivi create utilizzando le informazioni di accesso ai dispositivi provenienti dal contesto, consigliamo di utilizzare questi comandi API di interazione del dispositivo negli eseguibili del test case. Tuttavia, se questi comandi non soddisfano i requisiti del test case, puoi recuperare le informazioni di accesso al dispositivo dal contesto IDT e utilizzarle per stabilire una connessione diretta al dispositivo dalla suite di test.
Per stabilire una connessione diretta, recupera le informazioni nei resource.devices.connectivity campi rispettivamente device.connectivity per il dispositivo in fase di test e per i dispositivi di risorse. Per ulteriori informazioni sull'uso del contesto IDT, consulta. Usa il contesto IDT
Interazione IDT
I seguenti comandi consentono alle suite di test di comunicare con IDT.
PollForNotifications-
Consente alle suite di test di verificare la presenza di notifiche da IDT.
GetContextValueeGetContextString-
Consente alle suite di test di recuperare valori dal contesto IDT. Per ulteriori informazioni, consulta Usa il contesto IDT.
SendResult-
Consente alle suite di test di riportare i risultati dei test case a IDT. Questo comando deve essere chiamato alla fine di ogni test case in una suite di test.
Interazione con l'host
Il comando seguente consente alle suite di test di comunicare con il computer host.
PollForNotifications-
Consente alle suite di test di verificare la presenza di notifiche da IDT.
GetContextValueeGetContextString-
Consente alle suite di test di recuperare valori dal contesto IDT. Per ulteriori informazioni, consulta Usa il contesto IDT.
ExecuteOnHost-
Consente alle suite di test di eseguire comandi sul computer locale e consente a IDT di gestire il ciclo di vita degli eseguibili del test case.
Abilita i comandi IDT CLI
Il run-suite comando IDT CLI fornisce diverse opzioni che consentono al test runner di personalizzare l'esecuzione del test. Per consentire ai test runner di utilizzare queste opzioni per eseguire la suite di test personalizzata, è necessario implementare il supporto per l'IDT CLI. Se non implementate il supporto, i test runner saranno comunque in grado di eseguire i test, ma alcune opzioni della CLI non funzioneranno correttamente. Per fornire un'esperienza cliente ideale, ti consigliamo di implementare il supporto per i seguenti argomenti per il run-suite comando nella CLI IDT:
timeout-multiplier-
Specifica un valore maggiore di 1.0 che verrà applicato a tutti i timeout durante l'esecuzione dei test.
I test runner possono utilizzare questo argomento per aumentare il timeout per i test case che desiderano eseguire. Quando un test runner specifica questo argomento nel proprio
run-suitecomando, IDT lo utilizza per calcolare il valore della variabile di ambiente IDT_TEST_TIMEOUT e imposta il campo nel contesto IDT.config.timeoutMultiplierPer supportare questo argomento, devi fare quanto segue:-
Invece di utilizzare direttamente il valore di timeout dal
test.jsonfile, leggete la variabile di ambiente IDT_TEST_TIMEOUT per ottenere il valore di timeout calcolato correttamente. -
Recupera il
config.timeoutMultipliervalore dal contesto IDT e applicalo a timeout di lunga durata.
Per ulteriori informazioni sull'uscita anticipata a causa di eventi di timeout, vedere. Specifica il comportamento di uscita
-
stop-on-first-failure-
Specifica che IDT deve interrompere l'esecuzione di tutti i test in caso di errore.
Quando un test runner specifica questo argomento nel
run-suitecomando, IDT interromperà l'esecuzione dei test non appena riscontra un errore. Tuttavia, se i test case vengono eseguiti in parallelo, ciò può portare a risultati imprevisti. Per implementare il supporto, assicuratevi che se IDT rileva questo evento, la logica di test indichi a tutti i test case in esecuzione di fermarsi, ripulire le risorse temporanee e segnalare il risultato del test a IDT. Per ulteriori informazioni su come uscire precocemente in caso di errori, consulta. Specifica il comportamento di uscita group-idetest-id-
Specifica che IDT deve eseguire solo i gruppi di test o i casi di test selezionati.
I test runner possono utilizzare questi argomenti con il loro
run-suitecomando per specificare il seguente comportamento di esecuzione del test:-
Esegui tutti i test all'interno dei gruppi di test specificati.
-
Esegui una selezione di test all'interno di un gruppo di test specificato.
Per supportare questi argomenti, la macchina a stati della suite di test deve includere un set specifico di
ChoicestatiRunTaske stati nella macchina a stati. Se non si utilizza una macchina a stati personalizzata, la macchina a stati IDT predefinita include gli stati richiesti e non è necessario intraprendere ulteriori azioni. Tuttavia, se stai utilizzando una macchina a stati personalizzata, usala Esempio di macchina a stati: esegue gruppi di test selezionati dall'utente come esempio per aggiungere gli stati richiesti nella tua macchina a stati. -
Per ulteriori informazioni sui comandi IDT CLI, vedere. Esegui il debug ed esegui suite di test personalizzate
Scrivere registri degli eventi
Mentre il test è in esecuzione, si inviano dati stdout e si scrivono stderr i registri degli eventi e i messaggi di errore sulla console. Per informazioni sul formato dei messaggi della console, vedereFormato dei messaggi della console.
Quando l'IDT termina l'esecuzione della suite di test, queste informazioni sono disponibili anche nel test_manager.log file che si trova nella cartella.<devicetester-extract-location>/results/<execution-id>/logs
È possibile configurare ogni test case per scrivere i log relativi all'esecuzione del test, inclusi i log del dispositivo sottoposto a test, nel file che si trova nella <group-id>_<test-id> cartella. A tale scopo, recuperate il percorso del file di registro dal contesto IDT con la <device-tester-extract-location>/results/execution-id/logstestData.logFilePath query, create un file in tale percorso e scrivete il contenuto desiderato. IDT aggiorna automaticamente il percorso in base al test case in esecuzione. Se scegli di non creare il file di log per un test case, non viene generato alcun file per quel test case.
Puoi anche configurare il tuo file di testo eseguibile per creare file di registro aggiuntivi, se necessario, nella cartella. È consigliabile specificare prefissi univoci per i nomi dei file di registro in modo che i file non vengano sovrascritti.<device-tester-extract-location>/logs
Segnala i risultati a IDT
IDT scrive i risultati dei test nei file awsiotdevicetester_report.xml e nei file. Questi file di report si trovano insuite-name_report.xml. Entrambi i report raccolgono i risultati dell'esecuzione della suite di test. Per ulteriori informazioni sugli schemi utilizzati da IDT per questi report, vedere Rivedi i risultati e i registri dei test IDT<device-tester-extract-location>/results/<execution-id>/
Per popolare il contenuto del file, è necessario utilizzare il suite-name_report.xmlSendResult comando per riportare i risultati del test a IDT prima che l'esecuzione del test termini. Se IDT non è in grado di individuare i risultati di un test, genera un errore per il test case. Il seguente estratto in Python mostra i comandi per inviare un risultato del test a IDT:
request-variable= SendResultRequest(TestResult(result)) client.send_result(request-variable)
Se non si segnalano i risultati tramite l'API, IDT cerca i risultati dei test nella cartella test artifacts. Il percorso di questa cartella è memorizzato nel testData.testArtifactsPath file nel contesto IDT. In questa cartella, IDT utilizza il primo file XML in ordine alfabetico che individua come risultato del test.
Se la logica di test produce risultati XML JUnit, puoi scrivere i risultati del test in un file XML nella cartella artifacts per fornire direttamente i risultati a IDT invece di analizzarli e quindi utilizzare l'API per inviarli a IDT.
Se utilizzi questo metodo, assicurati che la logica di test riassuma accuratamente i risultati del test e formatti il file dei risultati nello stesso formato del file. IDT non esegue alcuna convalida dei dati forniti, con le seguenti eccezioni:suite-name_report.xml
-
IDT ignora tutte le proprietà del tag.
testsuitesInvece, calcola le proprietà del tag in base ai risultati di altri gruppi di test riportati. -
Al suo interno
testsuitesdeve essere presente almeno untestsuitetag.
Poiché IDT utilizza la stessa cartella degli artifacts per tutti i test case e non elimina i file dei risultati tra le esecuzioni dei test, questo metodo potrebbe anche portare a segnalazioni errate se IDT legge il file errato. Ti consigliamo di utilizzare lo stesso nome per il file dei risultati XML generato in tutti i test case per sovrascrivere i risultati di ogni test case e assicurarti che i risultati corretti siano disponibili per l'uso da parte di IDT. Sebbene nella suite di test sia possibile utilizzare un approccio misto al reporting, ovvero utilizzare un file di risultati XML per alcuni test case e inviare i risultati tramite l'API per altri, non consigliamo questo approccio.
Specifica il comportamento di uscita
Configura il tuo file eseguibile di testo in modo che esca sempre con un codice di uscita pari a 0, anche se un test case riporta un errore o un risultato di errore. Usa codici di uscita diversi da zero solo per indicare che un test case non è stato eseguito o se l'eseguibile del test case non è stato in grado di comunicare alcun risultato a IDT. Quando IDT riceve un codice di uscita diverso da zero, indica che il test case ha riscontrato un errore che ne ha impedito l'esecuzione.
IDT potrebbe richiedere o aspettarsi che un test case smetta di funzionare prima che sia terminato nei seguenti eventi. Usa queste informazioni per configurare l'eseguibile del test case in modo da rilevare ciascuno di questi eventi dal test case:
- Timeout
-
Si verifica quando un test case viene eseguito per un periodo superiore al valore di timeout specificato nel
test.jsonfile. Se il test runner ha utilizzato l'timeout-multiplierargomento per specificare un moltiplicatore di timeout, IDT calcola il valore di timeout con il moltiplicatore.Per rilevare questo evento, utilizzate la variabile di ambiente IDT_TEST_TIMEOUT. Quando un test runner avvia un test, IDT imposta il valore della variabile di ambiente IDT_TEST_TIMEOUT sul valore di timeout calcolato (in secondi) e passa la variabile all'eseguibile del test case. È possibile leggere il valore della variabile per impostare un timer appropriato.
- Interrompere
-
Si verifica quando il test runner interrompe l'IDT. Ad esempio, premendo. Ctrl+C
Poiché i terminali propagano i segnali a tutti i processi secondari, potete semplicemente configurare un gestore di segnali nei vostri casi di test per rilevare i segnali di interruzione.
In alternativa, puoi interrogare periodicamente l'API per verificare il valore del valore
CancellationRequestedbooleano nella risposta dell'API.PollForNotificationsQuando IDT riceve un segnale di interruzione, imposta il valore del booleano su.CancellationRequestedtrue - Interrompi al primo errore
-
Si verifica quando un test case in esecuzione in parallelo al test case corrente ha esito negativo e il test runner utilizza l'
stop-on-first-failureargomento per specificare che IDT deve interrompersi in caso di errore.Per rilevare questo evento, puoi interrogare periodicamente l'API per verificare il valore del valore
CancellationRequestedbooleano nella risposta dell'API.PollForNotificationsQuando IDT rileva un errore ed è configurato per arrestarsi al primo errore, imposta il valore del valore booleano su.CancellationRequestedtrue
Quando si verifica uno di questi eventi, IDT attende 5 minuti affinché tutti i test case attualmente in esecuzione finiscano di funzionare. Se tutti i test case in esecuzione non si concludono entro 5 minuti, IDT forza l'arresto di ciascuno dei processi. Se IDT non riceve i risultati dei test prima della fine dei processi, contrassegnerà i test case come scaduti. Come best practice, dovreste assicurarvi che i test case eseguano le seguenti azioni quando si verifica uno degli eventi:
-
Smetti di eseguire la normale logica di test.
-
Pulisci tutte le risorse temporanee, ad esempio gli artefatti del test sul dispositivo in esame.
-
Segnala un risultato del test a IDT, ad esempio un errore o un fallimento del test.
-
Esci.