Didacticiel : Développer une suite de tests IDT simple - AWS IoT Greengrass

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.

Didacticiel : Développer une suite de tests IDT simple

Une suite de tests combine les éléments suivants :

  • Exécutables de test contenant la logique de test

  • Fichiers de configuration JSON qui décrivent la suite de tests

Ce didacticiel vous montre comment utiliser IDT pourAWS IoT Greengrasspour développer une suite de tests Python contenant un seul cas de test. Dans ce didacticiel, vous allez réaliser les étapes suivantes :

Prérequis

Pour suivre ce didacticiel, vous aurez besoin des éléments suivants :

  • Configuration requise de l'ordinateur hôte
    • Dernière version deAWS IoTDevice Tester

    • Python3.7 ou version ultérieure

      Pour vérifier la version de Python installée sur votre ordinateur, exécutez la commande suivante :

      python3 --version

      Sous Windows, si l'utilisation de cette commande renvoie une erreur, utilisezpython --versionà la place. Si le numéro de version renvoyé est 3.7 ou supérieur, exécutez la commande suivante dans un terminal Powershell pour définirpython3comme alias pourpythoncommande.

      Set-Alias -Name "python3" -Value "python"

      Si aucune information de version n'est renvoyée ou si le numéro de version est inférieur à 3,7, suivez les instructions deTéléchargement de PythonPour installer Python 3.7+. Pour plus d'informations, consultez le .Documentation Python.

    • urllib3

      Pour vérifier queurllib3est installé correctement, exécutez la commande suivante :

      python3 -c 'import urllib3'

      Siurllib3n'a pas encore été installé, exécutez la commande suivante pour l'installer :

      python3 -m pip install urllib3
  • Exigences relatives aux dispositifs
    • Un appareil doté d'un système d'exploitation Linux et d'une connexion réseau au même réseau que votre ordinateur hôte.

      Nous vous recommandons d'utiliser unRaspberry Piavec Raspberry Pi OS. Veillez à configurerSSHsur votre Raspberry Pi pour pouvoir se connecter à distance.

Création d'un répertoire de suite de tests

IDT sépare logiquement les cas de test en groupes de tests au sein de chaque suite de tests. Chaque scénario de test doit se trouver à l'intérieur d'un groupe de tests. Pour ce didacticiel, créez un dossier appeléMyTestSuite_1.0.0et créez l'arborescence de répertoires suivante dans ce dossier :

MyTestSuite_1.0.0 └── suite └── myTestGroup └── myTestCase

Créez des fichiers de configuration JSON

Votre suite de tests doit contenir ce qui suit :Fichiers de configuration JSON :

Fichiers JSON requis
suite.json

Contient des informations à propos de la suite de tests. Consultez Configurer suite.json.

group.json

Contient des informations à propos d'un groupe de tests. Vous devez créer ungroup.jsonpour chaque groupe de tests de votre suite de tests. Consultez Configurer group.json.

test.json

Contient des informations à propos d'un scénario de test. Vous devez créer untest.jsonpour chaque cas de test de votre suite de tests. Consultez Configurer test.json.

  1. DansMyTestSuite_1.0.0/suite, créez unsuite.jsonFile avec la structure suivante :

    { "id": "MyTestSuite_1.0.0", "title": "My Test Suite", "details": "This is my test suite.", "userDataRequired": false }
  2. DansMyTestSuite_1.0.0/myTestGroup, créez ungroup.jsonFile avec la structure suivante :

    { "id": "MyTestGroup", "title": "My Test Group", "details": "This is my test group.", "optional": false }
  3. DansMyTestSuite_1.0.0/myTestGroup/myTestCase, créez untest.jsonFile avec la structure suivante :

    { "id": "MyTestCase", "title": "My Test Case", "details": "This is my test case.", "execution": { "timeout": 300000, "linux": { "cmd": "python3", "args": [ "myTestCase.py" ] }, "mac": { "cmd": "python3", "args": [ "myTestCase.py" ] }, "win": { "cmd": "python3", "args": [ "myTestCase.py" ] } } }

L'arborescence du répertoire de votreMyTestSuite_1.0.0folder devrait ressembler à ce qui suit :

MyTestSuite_1.0.0 └── suite ├── suite.json └── myTestGroup ├── group.json └── myTestCase └── test.json

Obtenez le SDK client IDT

Vous utilisez leKit SDK client IDTpour permettre à IDT d'interagir avec l'appareil testé et de signaler les résultats des tests. Pour ce didacticiel, vous allez utiliser la version Python du SDK.

De la<device-tester-extract-location>/sdks/python/, copiez le dossieridt_clientdans votre dossierMyTestSuite_1.0.0/suite/myTestGroup/myTestCasefolder.

Pour vérifier que le kit SDK a bien été copié, exécutez la commande suivante.

cd MyTestSuite_1.0.0/suite/myTestGroup/myTestCase python3 -c 'import idt_client'

Créer l'exécutable du cas de test

Les exécutables de scénario de test contiennent la logique de test que vous voulez exécuter. Une suite de tests peut contenir plusieurs exécutables de cas de test. Pour ce didacticiel, vous allez créer un seul exécutable de cas de test.

  1. Créez le fichier de la suite de tests.

    DansMyTestSuite_1.0.0/suite/myTestGroup/myTestCase, créez unmyTestCase.pyFichier comportant le contenu suivant :

    from idt_client import * def main(): # Use the client SDK to communicate with IDT client = Client() if __name__ == "__main__": main()
  2. Utilisez les fonctions SDK client pour ajouter la logique de test suivante à votremyTestCase.pydans le fichier:

    1. Exécutez une commande SSH sur l'appareil testé.

      from idt_client import * def main(): # Use the client SDK to communicate with IDT client = Client() # Create an execute on device request exec_req = ExecuteOnDeviceRequest(ExecuteOnDeviceCommand("echo 'hello world'")) # Run the command exec_resp = client.execute_on_device(exec_req) # Print the standard output print(exec_resp.stdout) if __name__ == "__main__": main()
    2. Envoyez le résultat du test à IDT.

      from idt_client import * def main(): # Use the client SDK to communicate with IDT client = Client() # Create an execute on device request exec_req = ExecuteOnDeviceRequest(ExecuteOnDeviceCommand("echo 'hello world'")) # Run the command exec_resp = client.execute_on_device(exec_req) # Print the standard output print(exec_resp.stdout) # Create a send result request sr_req = SendResultRequest(TestResult(passed=True)) # Send the result client.send_result(sr_req) if __name__ == "__main__": main()

Configuration des informations sur les appareils pour IDT

Configurez les informations de votre appareil pour qu'IDT puisse exécuter le test. Vous devez mettre à jour ladevice.jsonmodèle situé dans le<device-tester-extract-location>/configsdossier contenant les informations suivantes.

[ { "id": "pool", "sku": "N/A", "devices": [ { "id": "<device-id>", "connectivity": { "protocol": "ssh", "ip": "<ip-address>", "port": "<port>", "auth": { "method": "pki | password", "credentials": { "user": "<user-name>", "privKeyPath": "/path/to/private/key", "password": "<password>" } } } } ] } ]

Dansdevices, fournissez les informations suivantes :

id

Un identificateur unique défini par l'utilisateur pour votre appareil.

connectivity.ip

Adresse IP de votre appareil.

connectivity.port

Facultatif. Numéro de port à utiliser pour les connexions SSH à votre appareil.

connectivity.auth

Informations d'authentification pour la connexion.

Cette propriété s'applique uniquement si connectivity.protocol est défini sur ssh.

connectivity.auth.method

Méthode d'authentification utilisée pour accéder à un appareil sur le protocole de connectivité donné.

Les valeurs prises en charge sont :

  • pki

  • password

connectivity.auth.credentials

Informations d'identification utilisées pour l'authentification.

connectivity.auth.credentials.user

Le nom d'utilisateur utilisé pour se connecter à votre appareil.

connectivity.auth.credentials.privKeyPath

Chemin complet à la clé privée utilisée pour se connecter à votre appareil.

Cette valeur s'applique uniquement si connectivity.auth.method est défini sur pki.

devices.connectivity.auth.credentials.password

Mot de passe utilisé pour se connecter à votre appareil.

Cette valeur s'applique uniquement si connectivity.auth.method est défini sur password.

Note

Spécifiez privKeyPath uniquement si method est défini sur pki.

Spécifiez password uniquement si method est défini sur password.

Exécutez la suite de tests

Une fois que vous avez créé votre suite de tests, vous devez vous assurer qu'elle fonctionne comme prévu. Effectuez les étapes suivantes pour exécuter la suite de tests avec votre pool de périphériques existant.

  1. Copiez votreMyTestSuite_1.0.0folder in<device-tester-extract-location>/tests.

  2. Exécutez les commandes suivantes :

    cd <device-tester-extract-location>/bin ./devicetester_[linux | mac | win_x86-64] run-suite --suite-id MyTestSuite

IDT exécute votre suite de tests et diffuse les résultats vers la console. Lorsque le test est terminé, les informations suivantes s'affichent :

time="2020-10-19T09:24:47-07:00" level=info msg=Using pool: pool time="2020-10-19T09:24:47-07:00" level=info msg=Using test suite "MyTestSuite_1.0.0" for execution time="2020-10-19T09:24:47-07:00" level=info msg=b'hello world\n' suiteId=MyTestSuite groupId=myTestGroup testCaseId=myTestCase deviceId=my-device executionId=9a52f362-1227-11eb-86c9-8c8590419f30 time="2020-10-19T09:24:47-07:00" level=info msg=All tests finished. executionId=9a52f362-1227-11eb-86c9-8c8590419f30 time="2020-10-19T09:24:48-07:00" level=info msg= ========== Test Summary ========== Execution Time: 1s Tests Completed: 1 Tests Passed: 1 Tests Failed: 0 Tests Skipped: 0 ---------------------------------- Test Groups: myTestGroup: PASSED ---------------------------------- Path to IoT Device Tester Report: /path/to/devicetester/results/9a52f362-1227-11eb-86c9-8c8590419f30/awsiotdevicetester_report.xml Path to Test Execution Logs: /path/to/devicetester/results/9a52f362-1227-11eb-86c9-8c8590419f30/logs Path to Aggregated JUnit Report: /path/to/devicetester/results/9a52f362-1227-11eb-86c9-8c8590419f30/MyTestSuite_Report.xml

Dépannage

Utilisez les informations suivantes pour résoudre les problèmes liés à la réalisation du didacticiel.

Le cas de test ne s'exécute pas correctement

Si le test ne s'exécute pas correctement, IDT diffuse les journaux d'erreurs vers la console, ce qui peut vous aider à résoudre le problème de l'exécution du test. Avant de vérifier les journaux d'erreurs, vérifiez les points suivants :

  • Le kit SDK client IDT se trouve dans le dossier approprié, comme décrit dansCette étape.

  • Vous rencontrez tous lesexigencespour ce didacticiel.

Impossible de se connecter à l'appareil testé

Vérifiez les paramètres suivants :

  • Votredevice.jsoncontient l'adresse IP, le port et les informations d'authentification correctes.

  • Vous pouvez vous connecter à votre appareil via SSH à partir de votre ordinateur hôte.