Tutorial: Desarrollar un conjunto de pruebas de IDT sencillo - AWS IoT Greengrass

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Tutorial: Desarrollar un conjunto de pruebas de IDT sencillo

Un conjunto de pruebas combina lo siguiente:

  • Ejecutables de prueba que contienen la lógica de la prueba

  • Archivos de configuración que describen el conjunto de pruebas

Este tutorial le muestra cómo usar IDT para AWS IoT Greengrass para desarrollar un conjunto de pruebas de Python que contenga un único caso de prueba. En este tutorial, completará los siguientes pasos:

Requisitos previos

Necesitará lo siguiente para completar este tutorial:

  • Requisitos del equipo host
    • Última versión de AWS IoT Device Tester

    • Python 3.7 o posterior

      Para comprobar la versión de Python instalada en el equipo, ejecute el siguiente comando:

      python3 --version

      En Windows, si el uso de este comando devuelve un error, utilice python --version en su lugar. Si el número de versión devuelto es 3.7 o superior, ejecute el siguiente comando en un terminal de Powershell para establecer python3 como alias para el comando python.

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

      Si no se devuelve información sobre la versión o si la versión es inferior a 3.7, siga las instrucciones que se indican en Descarga de Python) para instalar Python 3.7 o superior. Para obtener más información, consulte la documentación de Python.

    • urllib3

      Para comprobar que urllib3 se ha instalado correctamente, ejecute el siguiente comando:

      python3 -c 'import urllib3'

      Si urllib3 no está instalado, ejecute el siguiente comando para instalarlo:

      python3 -m pip install urllib3
  • Requisitos de los dispositivos
    • Un dispositivo con un sistema operativo Linux y una conexión de red a la misma red que el equipo host.

      Le recomendamos que utilice un Raspberry Pi con el sistema operativo Raspberry Pi. Asegúrese de que tiene configurado SSH en el Raspberry Pi para conectarse de forma remota.

Creación de un directorio del conjunto de pruebas

IDT separa de forma lógica los casos de prueba en grupos de pruebas dentro de cada conjunto de pruebas. Cada caso de prueba debe estar dentro de un grupo de pruebas. Para este tutorial, cree una carpeta llamada MyTestSuite_1.0.0 y cree el siguiente árbol de directorios dentro de esta carpeta:

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

Creación de archivos de configuración

El conjunto de pruebas debe contener los siguientes archivos de configuración necesarios:

Archivos de configuración necesarios
suite.json

Contiene información sobre el conjunto de pruebas. Consulte Configuración de suite.json.

group.json

Contiene información sobre un grupo de pruebas. Debe crear un archivo group.json para cada grupo de pruebas del conjunto de pruebas. Consulte Configuración de group.json.

test.json

Contiene información sobre un caso de prueba. Debe crear un archivo test.json para cada caso de prueba de su conjunto de pruebas. Consulte Configuración de test.json.

  1. En la carpeta MyTestSuite_1.0.0/suite, cree un archivo suite.json con la estructura siguiente:

    { "id": "MyTestSuite_1.0.0", "title": "My Test Suite", "details": "This is my test suite.", "userDataRequired": false }
  2. En la carpeta MyTestSuite_1.0.0/myTestGroup, cree un archivo group.json con la estructura siguiente:

    { "id": "MyTestGroup", "title": "My Test Group", "details": "This is my test group.", "optional": false }
  3. En la carpeta MyTestSuite_1.0.0/myTestGroup/myTestCase, cree un archivo test.json con la estructura siguiente:

    { "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" ] } } }

El árbol de directorios de la carpeta MyTestSuite_1.0.0 debe ser similar al siguiente:

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

Obtención del SDK de cliente de IDT

Utilice el SDK de cliente de IDT para permitir que IDT interactúe con el dispositivo que se está probando e informe de los resultados de las pruebas. Para este tutorial, utilizará la versión de Python del SDK.

Desde la carpeta <device-tester-extract-location>/sdks/python/, copie la carpeta idt_client a su carpeta MyTestSuite_1.0.0/suite/myTestGroup/myTestCase.

Para comprobar que el SDK se ha copiado correctamente, ejecute el siguiente comando.

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

Creación del ejecutable del caso de prueba

Los ejecutables del caso de prueba contienen la lógica de prueba que desea ejecutar. Un conjunto de pruebas puede contener varios ejecutables de casos de prueba. Para este tutorial, creará solo un ejecutable de caso de prueba.

  1. Cree el archivo del conjunto de pruebas.

    En la carpeta MyTestSuite_1.0.0/suite/myTestGroup/myTestCase, cree un archivo myTestCase.py con el siguiente contenido:

    from idt_client import * def main(): # Use the client SDK to communicate with IDT client = Client() if __name__ == "__main__": main()
  2. Utilice las funciones del SDK del cliente para añadir la siguiente lógica de prueba al archivo myTestCase.py:

    1. Ejecute un comando SSH en el dispositivo que se está probando.

      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. Envíe el resultado de la prueba a 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()

Configuración de la información del dispositivo para IDT

Configure la información del dispositivo para que IDT ejecute la prueba. Debe actualizar la plantilla device.json ubicada en la carpeta <device-tester-extract-location>/configs con la siguiente información.

[ { "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>" } } } } ] } ]

En el objeto devices, indique la siguiente información:

id

Un identificador único definido por el usuario para el dispositivo.

connectivity.ip

La dirección IP del dispositivo.

connectivity.port

Opcional. El número de puerto que se va a utilizar para las conexiones SSH al dispositivo.

connectivity.auth

Información de autenticación para la conexión.

Esta propiedad solo se aplica si connectivity.protocol está establecido en ssh.

connectivity.auth.method

El método de autenticación que se utiliza para acceder a un dispositivo a través de un determinado protocolo de conectividad.

Los valores admitidos son:

  • pki

  • password

connectivity.auth.credentials

Las credenciales que se utilizan para la autenticación.

connectivity.auth.credentials.user

El nombre de usuario utilizado para iniciar sesión en el dispositivo.

connectivity.auth.credentials.privKeyPath

La ruta completa a la clave privada que se utiliza para iniciar sesión en el dispositivo.

Este valor solo se aplica si connectivity.auth.method está establecido en pki.

devices.connectivity.auth.credentials.password

La contraseña que se utiliza para iniciar sesión en el dispositivo.

Este valor solo se aplica si connectivity.auth.method está establecido en password.

nota

Especifique privKeyPath solo si method está establecido en pki

Especifique password solo si method está establecido en password

Ejecución del conjunto de pruebas

Después de crear el conjunto de pruebas, querrá asegurarse de que funciona como se espera. Siga los pasos que se indican a continuación para ejecutar el conjunto de pruebas con su grupo de dispositivos existente.

  1. Copie su carpeta MyTestSuite_1.0.0 en <device-tester-extract-location>/tests.

  2. Ejecute los comandos siguientes:

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

IDT ejecuta el conjunto de pruebas y transmite los resultados a la consola. Cuando la prueba termine de ejecutarse, verá la siguiente información:

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

Solución de problemas

Utilice la siguiente información para resolver cualquier problema al completar el tutorial.

El caso de prueba no se ejecuta correctamente

Si la prueba no se ejecuta correctamente, IDT transmite los registros de errores a la consola para ayudarle a solucionar los problemas con la ejecución de la prueba. Antes de consultar los registros de errores, compruebe lo siguiente:

  • El SDK del cliente IDT se encuentra en la carpeta correcta, tal y como se describe en este paso.

  • Cumple todos los requisitos previos de este tutorial.

No se puede conectar al dispositivo que se está probando

Compruebe lo siguiente:

  • El archivo device.json contiene la dirección IP, el puerto y la información de autenticación correctos.

  • Puede conectarse a su dispositivo a través de SSH desde su equipo host.