AWS IoT Greengrass Version 1 est entré dans la phase de durée de vie prolongée le 30 juin 2023. Pour plus d'informations, consultez la politique de AWS IoT Greengrass V1 maintenance. Après cette date, AWS IoT Greengrass V1 ne publiera pas de mises à jour fournissant des fonctionnalités, des améliorations, des corrections de bogues ou des correctifs de sécurité. Les appareils qui fonctionnent AWS IoT Greengrass V1 sous tension ne seront pas perturbés et continueront à fonctionner et à se connecter au cloud. Nous vous recommandons vivement de migrer vers AWS IoT Greengrass Version 2, qui ajoute de nouvelles fonctionnalités importantes et prend en charge des plateformes supplémentaires.
Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.
Créer des exécutables de cas de test IDT
Vous pouvez créer et placer des exécutables de cas de test dans un dossier de suite de tests de la manière suivante :
-
Pour les suites de tests qui utilisent des arguments ou des variables d'environnement de la
test.json
pour déterminer les tests à exécuter, vous pouvez créer un exécutable de cas de test unique pour l'ensemble de la suite de tests ou un exécutable de test pour chaque groupe de tests de la suite de tests. -
Pour une suite de tests dans laquelle vous souhaitez exécuter des tests spécifiques basés sur des commandes spécifiées, vous créez un exécutable de cas de test pour chaque cas de test de la suite de tests.
En tant que rédacteur de tests, vous pouvez déterminer quelle approche convient à votre cas d'utilisation et structurer l'exécutable de votre cas de test en conséquence. Assurez-vous que vous fournissez le chemin exécutable de cas de test correct dans chaque castest.json
et que l'exécutable spécifié s'exécute correctement.
Lorsque tous les appareils sont prêts pour l'exécution d'un scénario de test, IDT lit les fichiers suivants :
-
Le
test.json
pour le cas de test sélectionné, détermine les processus à démarrer et les variables d'environnement à définir. -
Le
suite.json
pour la suite de tests détermine les variables d'environnement à définir.
IDT lance le processus exexutable de test requis en fonction des commandes et des arguments spécifiés dans letest.json
et transmet les variables d'environnement requises au processus.
Utiliser le SDK Client IDT
Les kits SDK Client IDT vous permettent de simplifier la façon dont vous écrivez une logique de test dans votre exécutable de test avec des commandes API que vous pouvez utiliser Interact avec IDT et vos appareils testés. IDT fournit actuellement les kits de développement logiciel suivants :
-
Kit SDK client IDT pour Python
-
Kit SDK client IDT pour Go
Ces kits SDK sont situés dans le
folder. Lorsque vous créez un nouvel exécutable de cas de test, vous devez copier le kit SDK que vous souhaitez utiliser dans le dossier contenant l'exécutable de votre cas de test et référencer le SDK dans votre code. Cette section fournit une brève description des commandes d'API disponibles que vous pouvez utiliser dans vos exécutables de scénario de test. <device-tester-extract-location>
/sdks
Dans cette section
Interaction entre appareils
Les commandes suivantes vous permettent de communiquer avec l'appareil testé sans avoir à implémenter d'autres fonctions d'interaction et de gestion de la connectivité des appareils.
ExecuteOnDevice
-
Permet aux suites de tests d'exécuter des commandes shell sur un périphérique prenant en charge les connexions SSH ou Docker Shell.
CopyToDevice
-
Permet aux suites de tests de copier un fichier local depuis la machine hôte qui exécute IDT vers un emplacement spécifié sur un périphérique prenant en charge les connexions SSH ou Docker Shell.
ReadFromDevice
-
Permet aux suites de tests de lire à partir du port série des appareils prenant en charge les connexions UART.
Note
Étant donné que IDT ne gère pas les connexions directes aux appareils créés à l'aide des informations d'accès aux appareils à partir du contexte, nous vous recommandons d'utiliser ces commandes API d'interaction avec les appareils dans vos exécutables de cas de test. Toutefois, si ces commandes ne répondent pas aux exigences de votre scénario de test, vous pouvez récupérer les informations d'accès à l'appareil à partir du contexte IDT et les utiliser pour établir une connexion directe à l'appareil à partir de la suite de tests.
Pour établir une connexion directe, récupérez les informations dans ledevice.connectivity
et l'resource.devices.connectivity
pour votre appareil en cours de test et pour les périphériques de ressources, respectivement. Pour plus d'informations sur l'utilisation du contexte IDT, consultezUtiliser le contexte IDT.
Interaction IDT
Les commandes suivantes permettent à vos suites de tests de communiquer avec IDT.
PollForNotifications
-
Permet aux suites de tests de vérifier la présence de notifications provenant d'IDT.
GetContextValue
etGetContextString
-
Permet aux suites de tests de récupérer des valeurs à partir du contexte IDT. Pour plus d'informations, consultez Utiliser le contexte IDT.
SendResult
-
Permet aux suites de tests de signaler les résultats des scénarios de test à IDT. Cette commande doit être appelée à la fin de chaque cas de test dans une suite de tests.
Interaction avec l'
La commande suivante permet à vos suites de tests de communiquer avec la machine hôte.
PollForNotifications
-
Permet aux suites de tests de vérifier la présence de notifications provenant d'IDT.
GetContextValue
etGetContextString
-
Permet aux suites de tests de récupérer des valeurs à partir du contexte IDT. Pour plus d'informations, consultez Utiliser le contexte IDT.
ExecuteOnHost
-
Permet aux suites de tests d'exécuter des commandes sur la machine locale et permet à IDT de gérer le cycle de vie de l'exécutable du cas de test.
Activer les commandes IDT CLI
Lerun-suite
commande IDT CLI propose plusieurs options qui permettent au lanceur de test de personnaliser l'exécution des tests. Pour permettre aux exécuteurs de tests d'utiliser ces options pour exécuter votre suite de tests personnalisée, vous implémentez la prise en charge de l'interface de ligne de commande IDT. Si vous n'implémentez pas la prise en charge, les exécuteurs de tests pourront toujours exécuter des tests, mais certaines options CLI ne fonctionneront pas correctement. Pour offrir une expérience client idéale, nous vous recommandons de mettre en œuvre la prise en charge des arguments suivants pour lerun-suite
dans l'IDT CLI :
timeout-multiplier
-
Spécifie une valeur supérieure à 1,0 qui sera appliquée à tous les délais d'attente lors de l'exécution des tests.
Les exécuteurs de test peuvent utiliser cet argument pour augmenter le délai d'attente des cas de test qu'ils souhaitent exécuter. Lorsqu'un lanceur de test spécifie cet argument dans son
run-suite
, IDT l'utilise pour calculer la valeur de la variable d'environnement IDT_TEST_TIMEOUT et définit la valeurconfig.timeoutMultiplier
dans le contexte IDT. Pour soutenir cet argument, vous devez procéder comme suit :-
Au lieu d'utiliser directement la valeur du délai d'attente de la
test.json
, lisez la variable d'environnement IDT_TEST_TIMEOUT pour obtenir la valeur de délai d'expiration correctement calculée. -
Récupérer le
config.timeoutMultiplier
à partir du contexte IDT et l'appliquer à des délais d'attente longs.
Pour plus d'informations sur la sortie anticipée en raison d'événements de délai d'attente, consultezSpécifier le comportement de sortie.
-
stop-on-first-failure
-
Spécifie qu'IDT doit cesser d'exécuter tous les tests s'il rencontre un échec.
Lorsqu'un lanceur de test spécifie cet argument dans son
run-suite
, IDT cessera d'exécuter les tests dès qu'il rencontre un échec. Toutefois, si les cas de test sont exécutés en parallel, cela peut entraîner des résultats inattendus. Pour implémenter le support, assurez-vous que si IDT rencontre cet événement, votre logique de test demande à tous les cas de test en cours d'arrêt, de nettoyage des ressources temporaires et de signaler un résultat de test à IDT. Pour plus d'informations sur la sortie anticipée des échecs, consultezSpécifier le comportement de sortie. group-id
ettest-id
-
Spécifie qu'IDT doit exécuter uniquement les groupes de test ou les cas de test sélectionnés.
Les coureurs de test peuvent utiliser ces arguments avec leur
run-suite
pour spécifier le comportement d'exécution de test suivant :-
Exécutez tous les tests au sein des groupes de tests spécifiés.
-
Exécutez une sélection de tests à partir d'un groupe de tests spécifié.
Pour prendre en charge ces arguments, la machine d'état de votre suite de tests doit inclure un ensemble spécifique de
RunTask
etChoice
dans votre machine d'état. Si vous n'utilisez pas de machine à états personnalisée, la machine d'état IDT par défaut inclut les états requis pour vous et vous n'avez pas besoin de prendre d'autres mesures. Toutefois, si vous utilisez une machine à états personnalisée, utilisezExemple de machine d'état : Exécuter des groupes de test sélectionnés par l'utilisateurcomme exemple pour ajouter les états requis dans votre machine d'état. -
Pour plus d'informations sur les commandes IDT CLI, consultezDéboguer et exécuter des suites de tests personnalisées.
rédigent des journaux d'événements
Pendant que le test est en cours, vous envoyez des données àstdout
etstderr
pour écrire des journaux d'événements et des messages d'erreur sur la console. Pour plus d'informations sur le format des messages de console, consultezFormat des messages de la console.
Lorsque l'IDT a terminé d'exécuter la suite de tests, ces informations sont également disponibles dans letest_manager.log
situé dans le fichier
folder.<devicetester-extract-location>
/results/<execution-id>
/logs
Vous pouvez configurer chaque cas de test pour écrire les journaux de son exécution de test, y compris les journaux de l'appareil testé, dans le
situé dans le fichier<group-id>
_<test-id>
folder. Pour ce faire, récupérez le chemin d'accès au fichier journal à partir du contexte IDT avec le<device-tester-extract-location>
/results/execution-id
/logstestData.logFilePath
, créez un fichier à ce chemin d'accès et écrivez le contenu que vous souhaitez y accéder. IDT met automatiquement à jour le chemin en fonction du scénario de test en cours d'exécution. Si vous choisissez de ne pas créer le fichier journal pour un cas de test, aucun fichier n'est généré pour ce cas de test.
Vous pouvez également configurer votre exécutable de texte pour créer des fichiers journaux supplémentaires au besoin dans le
folder. Nous vous recommandons de spécifier des préfixes uniques pour les noms de fichiers journaux afin que vos fichiers ne soient pas écrasés.<device-tester-extract-location>
/logs
Signaler les résultats à IDT
IDT écrit les résultats des tests sur leawsiotdevicetester_report.xml
et l'
fichiers suivants. Ces fichiers de rapport se trouvent danssuite-name
_report.xml
. Les deux rapports capturent les résultats de l'exécution de la suite de tests. Pour plus d'informations sur les schémas utilisés par IDT pour ces rapports, consultezExaminer les résultats des tests IDT et les journaux<device-tester-extract-location>
/results/<execution-id>
/
Pour renseigner le contenu de l'
, vous devez utiliser lesuite-name
_report.xmlSendResult
pour signaler les résultats des tests à IDT avant la fin de l'exécution du test. Si IDT ne peut pas localiser les résultats d'un test, il génère une erreur pour le cas de test. L'extrait Python suivant montre les commandes permettant d'envoyer un résultat de test à IDT :
request-variable
= SendResultRequest(TestResult(result
)) client.send_result(request-variable
)
Si vous ne signalez pas de résultats via l'API, IDT recherche les résultats des tests dans le dossier des artefacts de test. Le chemin d'accès à ce dossier est stocké dans letestData.testArtifactsPath
classé dans le contexte IDT. Dans ce dossier, IDT utilise le premier fichier XML trié par ordre alphabétique qu'il trouve comme résultat du test.
Si votre logique de test produit des résultats XML JUnit, vous pouvez écrire les résultats du test dans un fichier XML dans le dossier des artefacts pour fournir directement les résultats à IDT au lieu d'analyser les résultats, puis d'utiliser l'API pour les soumettre à IDT.
Si vous utilisez cette méthode, assurez-vous que votre logique de test résume avec précision les résultats du test et formate votre fichier de résultats dans le même format que le
dans le fichier. IDT n'effectue aucune validation des données que vous fournissez, à l'exception des exceptions suivantes :suite-name
_report.xml
-
IDT ignore toutes les propriétés du
testsuites
étiquette. Au lieu de cela, il calcule les propriétés des balises à partir d'autres résultats de groupes de tests signalés. -
Au moins une
testsuite
la balise doit exister danstestsuites
.
Étant donné que IDT utilise le même dossier d'artefacts pour tous les cas de test et ne supprime pas les fichiers de résultats entre les essais, cette méthode peut également entraîner des rapports erronés si IDT lit le fichier incorrect. Nous vous recommandons d'utiliser le même nom pour le fichier de résultats XML généré dans tous les cas de test afin d'écraser les résultats de chaque cas de test et de vous assurer que les résultats corrects sont disponibles pour IDT. Bien que vous puissiez utiliser une approche mixte pour générer des rapports dans votre suite de tests, c'est-à-dire utiliser un fichier de résultats XML pour certains cas de test et soumettre des résultats via l'API pour d'autres, nous ne recommandons pas cette approche.
Spécifier le comportement de sortie
Configurez votre exécutable de texte pour qu'il quitte toujours avec un code de sortie 0, même si un cas de test signale une défaillance ou un résultat d'erreur. Utilisez des codes de sortie non nuls uniquement pour indiquer qu'un cas de test n'a pas été exécuté ou si l'exécutable du cas de test n'a pas pu communiquer de résultats à IDT. Lorsque IDT reçoit un code de sortie différent de zéro, il marque que le cas de test a rencontré une erreur qui l'a empêché de s'exécuter.
IDT peut demander ou s'attendre à ce qu'un cas de test cesse de s'exécuter avant qu'il ne soit terminé dans les événements suivants. Utilisez ces informations pour configurer l'exécutable de votre cas de test afin de détecter chacun de ces événements à partir du scénario de test :
- Expiration
-
Se produit lorsqu'un scénario de test s'exécute plus longtemps que la valeur du délai d'attente spécifiée dans le champ
test.json
dans le fichier. Si le coureur de test a utilisé letimeout-multiplier
pour spécifier un multiplicateur de délai d'attente, puis IDT calcule la valeur du délai d'attente avec le multiplicateur.Pour détecter cet événement, utilisez la variable d'environnement IDT_TEST_TIMEOUT. Lorsqu'un lanceur de tests lance un test, IDT définit la valeur de la variable d'environnement IDT_TEST_TIMEOUT sur la valeur de délai d'expiration calculée (en secondes) et transmet la variable à l'exécutable du scénario de test. Vous pouvez lire la valeur de la variable pour définir un minuteur approprié.
- Interrupte
-
Se produit lorsque le coureur de test interrompt IDT. Par exemple, en appuyant surCtrl+C.
Étant donné que les terminaux propagent des signaux à tous les processus enfants, vous pouvez simplement configurer un gestionnaire de signaux dans vos cas de test pour détecter les signaux d'interruption.
Vous pouvez également interroger périodiquement l'API pour vérifier la valeur de l'API
CancellationRequested
booléen dans lePollForNotifications
Réponse de l'API. Lorsque IDT reçoit un signal d'interruption, il définit la valeur du paramètreCancellationRequested
booléentrue
. - Arrêtez lors du premier échec
-
Se produit lorsqu'un cas de test exécuté en parallel avec le cas de test actuel échoue et que le lanceur de test a utilisé le paramètre
stop-on-first-failure
pour spécifier qu'IDT doit s'arrêter lorsqu'il rencontre une défaillance.Pour détecter cet événement, vous pouvez interroger périodiquement l'API afin de vérifier la valeur de l'API
CancellationRequested
booléen dans lePollForNotifications
Réponse de l'API. Lorsque IDT rencontre une défaillance et est configuré pour s'arrêter lors de la première défaillance, il définit la valeur de laCancellationRequested
booléentrue
.
Lorsque l'un de ces événements se produit, IDT attend pendant 5 minutes que tous les cas de test en cours d'exécution soient terminés. Si tous les cas de test en cours ne se terminent pas dans les 5 minutes, IDT force chacun de ses processus à s'arrêter. Si IDT n'a pas reçu de résultats de test avant la fin des processus, il marquera les cas de test comme ayant expiré. En tant que meilleure pratique, vous devez vous assurer que vos cas de test effectuent les actions suivantes lorsqu'ils rencontrent l'un des événements :
-
Arrêtez d'exécuter une logique de test normale.
-
Nettoyez toutes les ressources temporaires, telles que les artefacts de test sur l'appareil testé.
-
Signalez un résultat de test à IDT, tel qu'un échec du test ou une erreur.
-
Quitter.