

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.

# Tutoriel : Développement d'une suite de tests IDT simple
<a name="create-custom-tests"></a>

Une suite de tests combine les éléments suivants :
+ Exécutables de test contenant la logique de test
+ Fichiers de configuration décrivant la suite de tests

Ce didacticiel vous montre comment utiliser IDT AWS IoT Greengrass pour développer une suite de tests Python contenant un seul cas de test. Dans ce didacticiel, vous allez effectuer les étapes suivantes : 

1. [Création d'un répertoire de suites de tests](#test-suite-dir)

1. [Création de fichiers de configuration](#test-suite-json)

1. [Création de l'exécutable du scénario de test](#test-suite-exe)

1. [Exécutez la suite de tests](#run-test-suite)

## Conditions préalables
<a name="prereqs-tutorial-custom"></a><a name="prereqs-list"></a>

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

**Exigences relatives à l'ordinateur hôte**
  + Dernière version de AWS IoT Device Tester
  + [Python](https://www.python.org/downloads/) 3.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, utilisez-la à la `python --version` place. Si le numéro de version renvoyé est 3.7 ou supérieur, exécutez la commande suivante dans un terminal Powershell pour la définir `python3` comme alias pour votre `python` commande. 

    ```
    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 de la section [Télécharger Python](https://wiki.python.org/moin/BeginnersGuide/Download) pour installer Python 3.7\$1. Pour plus d'informations, consultez la [documentation Python](https://docs.python.org).
  + [urllib3](https://urllib3.readthedocs.io/en/latest/)

    Pour vérifier qu'`urllib3`il est correctement installé, exécutez la commande suivante :

    ```
    python3 -c 'import urllib3'
    ```

    S'il n'`urllib3`est pas installé, exécutez la commande suivante pour l'installer :

    ```
    python3 -m pip install urllib3
    ```
+ 

**Exigences relatives aux dispositifs**
  + 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 un [Raspberry Pi](https://www.raspberrypi.org/) avec le système d'exploitation Raspberry Pi. Assurez-vous de configurer [SSH](https://www.raspberrypi.org/documentation/remote-access/ssh/) sur votre Raspberry Pi pour vous y connecter à distance.

## Création d'un répertoire de suites de tests
<a name="test-suite-dir"></a>

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

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

## Création de fichiers de configuration
<a name="test-suite-json"></a>

Votre suite de tests doit contenir les [fichiers de configuration](idt-json-config.md) requis suivants :<a name="required-json"></a>Fichiers de configuration requis

`suite.json`  
Contient des informations sur la suite de tests. Consultez [Configurer suite.json](idt-json-config.md#suite-json).

`group.json`  
Contient des informations sur un groupe de test. Vous devez créer un `group.json` fichier pour chaque groupe de test de votre suite de tests. Consultez [Configurer group.json](idt-json-config.md#group-json).

`test.json`  
Contient des informations sur un scénario de test. Vous devez créer un `test.json` fichier pour chaque scénario de test de votre suite de tests. Consultez [Configurer test.json](idt-json-config.md#test-json).

1. Dans le `MyTestSuite_1.0.0/suite` dossier, créez un `suite.json` fichier avec la structure suivante :

   ```
   {
       "id": "MyTestSuite_1.0.0",
       "title": "My Test Suite",
       "details": "This is my test suite.",
       "userDataRequired": false
   }
   ```

1. Dans le `MyTestSuite_1.0.0/myTestGroup` dossier, créez un `group.json` fichier avec la structure suivante :

   ```
   {
       "id": "MyTestGroup",
       "title": "My Test Group",
       "details": "This is my test group.",
       "optional": false
   }
   ```

1. Dans le `MyTestSuite_1.0.0/myTestGroup/myTestCase` dossier, créez un `test.json` fichier 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 de votre `MyTestSuite_1.0.0` dossier doit désormais ressembler à ce qui suit :

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

## Obtenez le SDK du client IDT
<a name="add-idt-sdk"></a>

Vous utilisez le [SDK du client IDT](create-test-executables.md#idt-client-sdk) pour permettre à IDT d'interagir avec l'appareil testé et de communiquer les résultats des tests. Pour ce didacticiel, vous allez utiliser la version Python du SDK. 

Depuis le `<device-tester-extract-location>/sdks/python/` dossier, `idt_client` copiez-le dans votre `MyTestSuite_1.0.0/suite/myTestGroup/myTestCase` dossier. 

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

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

## Création de l'exécutable du scénario de test
<a name="test-suite-exe"></a>

Les exécutables du scénario de test contiennent la logique de test que vous souhaitez exécuter. Une suite de tests peut contenir plusieurs exécutables de scénarios de test. Pour ce didacticiel, vous ne créerez qu'un seul exécutable de scénario de test.

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

   Dans le `MyTestSuite_1.0.0/suite/myTestGroup/myTestCase` dossier, créez un `myTestCase.py` fichier avec le contenu suivant :

   ```
   from idt_client import *
   
   def main():
       # Use the client SDK to communicate with IDT
       client = Client()
   
   if __name__ == "__main__":
       main()
   ```

1. Utilisez les fonctions du SDK client pour ajouter la logique de test suivante à votre `myTestCase.py` fichier :

   1. Exécutez une commande SSH sur le périphérique 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()
      ```

   1. 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()
      ```

## Configurer les informations de l'appareil pour IDT
<a name="configure-idt-sample"></a>

Configurez les informations de votre appareil pour qu'IDT exécute le test. Vous devez mettre à jour le `device.json` modèle situé dans le `<device-tester-extract-location>/configs` dossier avec 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>"
            }
          }
        }
      }
    ]
  }
]
```

Dans l'`devices`objet, fournissez les informations suivantes :

`id`  
Identifiant unique défini par l'utilisateur pour votre appareil.

`connectivity.ip`  
L'adresse IP de votre appareil.

`connectivity.port`  
Facultatif. Le 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 vous connecter à votre appareil.  
`connectivity.auth.credentials.privKeyPath`  
Le chemin complet vers la clé privée utilisée pour vous connecter à votre appareil.  
Cette valeur s'applique uniquement si `connectivity.auth.method` est défini sur `pki`.  
`devices.connectivity.auth.credentials.password`  
Le mot de passe utilisé pour vous 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
<a name="run-test-suite"></a>

Après avoir créé votre suite de tests, vous devez vous assurer qu'elle fonctionne comme prévu. Pour ce faire, procédez comme suit pour exécuter la suite de tests avec votre pool d'appareils existant.

1. Copiez votre `MyTestSuite_1.0.0` dossier dans`<device-tester-extract-location>/tests`.

1. 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 sur 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
```

## Résolution des problèmes
<a name="tutorial-troubleshooting"></a>

Utilisez les informations suivantes pour résoudre tout problème lié à l'exécution du didacticiel.

**Le scénario de test ne s'exécute pas correctement**

Si le test échoue, IDT diffuse les journaux d'erreurs sur la console afin de vous aider à résoudre les problèmes liés à l'exécution du test. Avant de consulter les journaux d'erreurs, vérifiez les points suivants :
+ Le SDK du client IDT se trouve dans le bon dossier, comme décrit dans [cette](#add-idt-sdk) étape.
+ Vous répondez à tous les [prérequis](#prereqs-tutorial-custom) pour ce didacticiel.

**Impossible de se connecter à l'appareil testé**

Vérifiez les paramètres suivants :
+ Votre `device.json` fichier contient l'adresse IP, le port et les informations d'authentification corrects.
+ Vous pouvez vous connecter à votre appareil via SSH depuis votre ordinateur hôte.