

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.

# Casos de prueba de Device Advisor
<a name="device-advisor-tests"></a>

Device Advisor ofrece pruebas prediseñadas en seis categorías.
+ [TLS](device-advisor-tests-tls.md)
+ [MQTT](device-advisor-tests-mqtt.md)
+ [Sombra](device-advisor-tests-shadow.md)
+ [Ejecución de trabajo](device-advisor-tests-job-execution.md)
+ [Permisos y políticas](device-advisor-tests-permissions-policies.md)
+ [Pruebas de larga duración](device-advisor-tests-long-duration.md)

## Casos de prueba de Device Advisor para poder optar al programa de calificación de AWS dispositivos.
<a name="qualifiying-test-cases"></a>

Su dispositivo debe superar las siguientes pruebas para cumplir los requisitos del [programa de cualificación de dispositivos AWS](https://aws.amazon.com/partners/programs/dqp/).

**nota**  
Esta es una lista revisada de las pruebas de cualificación.
+ [Conexión TLS](device-advisor-tests-tls.md#TLS_Connect) («Conexión TLS»)​
+ [Certificado de servidor TLS con nombre de asunto incorrecto](device-advisor-tests-tls.md#TLS_Incorrect_Subject_Name) («Nombre común del asunto (CN)/nombre alternativo del asunto (SAN) incorrecto»)
+ [Certificado de servidor TLS no seguro](device-advisor-tests-tls.md#TLS_Unsecure_Server_Cert) («No firmado por una entidad de certificación reconocida»)
+ [Soporte de dispositivos TLS para AWS IoT conjuntos de cifrado](device-advisor-tests-tls.md#TLS_DeviceSupport_For_IOT) («Soporte de dispositivos TLS para conjuntos de cifrado AWS IoT recomendados»)
+ [Fragmentos de tamaño máximo de recepción TLS](device-advisor-tests-tls.md#TLS_MaximumSize) («Fragmentos de tamaño máximo de recepción TLS»)
+ [Certificado de servidor TLS caducado](device-advisor-tests-tls.md#TLS_Expired_Server_Cert) («Certificado de servidor caducado»)
+ [Certificado de servidor TLS de gran tamaño](device-advisor-tests-tls.md#TLS_LargeServerCert) («Certificado de servidor TLS de gran tamaño»)
+ [MQTT Connect](device-advisor-tests-mqtt.md#MQTT_Connect) («El dispositivo envía CONNECT a AWS IoT Core (Happy case)»)
+ [Suscripción MQTT](device-advisor-tests-mqtt.md#MQTT_Subscribe) («Puede suscribirse (caso deseable)»)
+ [Publicación MQTT](device-advisor-tests-mqtt.md#MQTT_Publish) («QoS0 (caso deseable)»)
+ [Reintentos fluctuantes de conexión MQTT](device-advisor-tests-mqtt.md#MQTT_ConnectJitterBackoff) («Reintentos de conexión del dispositivo con retroceso fluctuante - Sin respuesta CONNACK»)

# TLS
<a name="device-advisor-tests-tls"></a>

Utilice estas pruebas para determinar si el protocolo de seguridad de la capa de transporte (TLS) entre sus dispositivos AWS IoT es seguro.

**nota**  
Device Advisor ahora admite TLS 1.3.

## Recorrido correcto
<a name="happy-path"></a>

**Conexión TLS**  <a name="TLS_Connect"></a>
Valida si el dispositivo que se está probando puede completar el protocolo de enlace TLS con. AWS IoT Esta prueba no valida la implementación de MQTT del dispositivo cliente.  

**Example Definición de caso de prueba de API:**  
`EXECUTION_TIMEOUT` tiene un valor predeterminado de 5 minutos. Para obtener los mejores resultados, se recomienda un valor de tiempo de espera de 2 minutos. 

```
"tests":[
   {
      "name":"my_tls_connect_test",
      "configuration": {
         // optional:
         "EXECUTION_TIMEOUT":"300",  //in seconds
      },
      "test":{
         "id":"TLS_Connect",
         "version":"0.0.0"
      }
   }
]
```

**Example Resultados de los casos de prueba:**  
+ **Aprobar**: el dispositivo sometido a prueba completó el apretón de manos TLS con. AWS IoT
+ **Aprobar con advertencias**: el dispositivo objeto de la prueba completó el protocolo de enlace TLS AWS IoT, pero el dispositivo emitió mensajes de advertencia de TLS. AWS IoT
+ Fallo: el dispositivo sometido a prueba no pudo completar el protocolo de enlace TLS debido a un **error** de protocolo de enlace. AWS IoT 

**Fragmentos de tamaño máximo de recepción TLS**  <a name="TLS_MaximumSize"></a>
Este caso de prueba valida que su dispositivo puede recibir y procesar fragmentos de tamaño máximo de TLS. El dispositivo de prueba debe suscribirse a un tema preconfigurado con QoS 1 para recibir una gran carga. Puede personalizar la carga con la `${payload}` de configuración.  

**Example Definición de caso de prueba de API:**  
`EXECUTION_TIMEOUT` tiene un valor predeterminado de 5 minutos. Para obtener los mejores resultados, se recomienda un valor de tiempo de espera de 2 minutos. 

```
"tests":[
   {
      "name":"TLS Receive Maximum Size Fragments",
      "configuration": {
         // optional:
         "EXECUTION_TIMEOUT":"300",  //in seconds
         "PAYLOAD_FORMAT":"{"message":"${payload}"}", // A string with a placeholder ${payload}, or leave it empty to receive a plain string.
         "TRIGGER_TOPIC": "test_1" // A topic to which a device will subscribe, and to which a test case will publish a large payload.
      },
      "test":{
         "id":"TLS_Receive_Maximum_Size_Fragments",
         "version":"0.0.0"
      }
   }
]
```

## Conjuntos de cifrado
<a name="cipher-suites"></a>

**Soporte de dispositivos TLS para los conjuntos de cifrado AWS IoT recomendados**  <a name="TLS_DeviceSupport_For_IOT"></a>
Valida que las suites de cifrado en el mensaje de saludo del cliente de TLS del dispositivo bajo prueba contenga los [conjuntos de cifrado de AWS IoT](transport-security.md) recomendados. Proporciona información adicional sobre los conjuntos de cifrado compatibles con el dispositivo.  

**Example Definición de caso de prueba de API:**  
`EXECUTION_TIMEOUT` tiene un valor predeterminado de 5 minutos. Se recomienda un valor de tiempo de espera de 2 minutos.

```
"tests":[
   {
      "name":"my_tls_support_aws_iot_cipher_suites_test",
      "configuration": {
         // optional:
         "EXECUTION_TIMEOUT":"300",  // in seconds
      },
      "test":{
         "id":"TLS_Support_AWS_IoT_Cipher_Suites",
         "version":"0.0.0"
      }
   }
]
```

**Example Resultados de los casos de prueba:**  
+ **Aprobación**: los conjuntos de cifrado del dispositivo que se están probando contienen al menos uno de los conjuntos de AWS IoT cifrado recomendados y no contienen ningún conjunto de cifrado no compatible.
+ **Superada con advertencias**: los conjuntos de cifrado del dispositivo contienen al menos un conjunto de cifrado de AWS IoT , pero:

  1. No contiene ninguno de los conjuntos de cifrado recomendados

  1. Contiene conjuntos de cifrado que no son compatibles con. AWS IoT

  Le sugerimos que compruebe que todos los conjuntos de cifrado no compatibles son seguros. 
+ **Error**: el dispositivo que se está probando con los conjuntos de cifrado no contiene ninguno de los conjuntos de cifrado AWS IoT compatibles.

## Certificado de servidor de mayor tamaño
<a name="larger-size"></a>

**Certificado de servidor de mayor tamaño de TLS**  <a name="TLS_LargeServerCert"></a>
Valida en su dispositivo que se pueda completar el protocolo de enlace TLS con AWS IoT cuando recibe y procesa un certificado de servidor de mayor tamaño. El tamaño del certificado de servidor (en bytes) utilizado en esta prueba es 20 veces mayor que el que se utiliza actualmente en el caso de prueba de **TLS Connect** e IoT Core. Durante este caso de prueba, AWS IoT comprueba el espacio de búfer del dispositivo para TLS. Si el espacio de búfer es lo suficientemente grande, el protocolo de enlace TLS se completa sin errores. Esta prueba no valida la implementación de MQTT del dispositivo. El caso de prueba se produce una vez finalizado el proceso de protocolo de enlace TLS.  

**Example Definición de caso de prueba de API:**  
`EXECUTION_TIMEOUT` tiene un valor predeterminado de 5 minutos. Para obtener los mejores resultados, se recomienda un valor de tiempo de espera de 2 minutos. Si este caso de prueba falla pero el caso de prueba de **TLS Connect** pasa, le recomendamos que aumente el límite de espacio de búfer del dispositivo para TLS. Si aumenta el límite de espacio de búfer, su dispositivo podrá procesar un certificado de servidor de mayor tamaño en caso de que el tamaño aumente.

```
"tests":[
   {
      "name":"my_tls_large_size_server_cert_test",
      "configuration": {
         // optional:
         "EXECUTION_TIMEOUT":"300",  // in seconds
      },
      "test":{
         "id":"TLS_Large_Size_Server_Cert",
         "version":"0.0.0"
      }
   }
]
```

**Example Resultados de los casos de prueba:**  
+ **Superada**: el dispositivo sometido a prueba completó el protocolo de enlace TLS con AWS IoT.
+ **Aprobar con advertencias**: el dispositivo que se está probando completó el protocolo de enlace TLS AWS IoT, pero hay mensajes de advertencia de TLS provenientes del dispositivo o AWS IoT.
+ **Fallo: el dispositivo sometido a prueba no pudo completar el protocolo de enlace TLS AWS IoT debido a un error durante el proceso de protocolo de enlace.**

## Certificado de servidor no seguro de TLS
<a name="unsecure-server"></a>

**No firmado por entidad de certificación reconocida**  <a name="TLS_Unsecure_Server_Cert"></a>
Valida que el dispositivo que se está probando cierra la conexión si se le presenta un certificado de servidor sin una firma válida de la entidad de certificación de ATS. Un dispositivo solo debe conectarse a un punto de conexión que presente un certificado válido.  

**Example Definición de caso de prueba de API:**  
`EXECUTION_TIMEOUT` tiene un valor predeterminado de 5 minutos. Se recomienda un valor de tiempo de espera de 2 minutos. 

```
"tests":[
   {
      "name":"my_tls_unsecure_server_cert_test",
      "configuration": {
         // optional:
         "EXECUTION_TIMEOUT":"300",  //in seconds
      },
      "test":{
         "id":"TLS_Unsecure_Server_Cert",
         "version":"0.0.0"
      }
   }
]
```

**Example Resultados de los casos de prueba:**  
+ **Superada**: el dispositivo sometido a prueba cerró la conexión.
+ **Fallo**: el dispositivo objeto de la prueba completó el protocolo de enlace TLS con. AWS IoT

**Certificado de servidor TLS con nombre de asunto incorrecto/Nombre común del asunto (CN)/Nombre alternativo del asunto (SAN) incorrecto**  <a name="TLS_Incorrect_Subject_Name"></a>
Valida que el dispositivo que se está probando cierra la conexión si se le presenta un certificado de servidor para un nombre de dominio diferente al solicitado.  

**Example Definición de caso de prueba de API:**  
`EXECUTION_TIMEOUT` tiene un valor predeterminado de 5 minutos. Se recomienda un valor de tiempo de espera de 2 minutos. 

```
"tests":[
   {
      "name":"my_tls_incorrect_subject_name_cert_test",
      "configuration": {
         // optional:
         "EXECUTION_TIMEOUT":"300",   // in seconds
      },
      "test":{
         "id":"TLS_Incorrect_Subject_Name_Server_Cert",
         "version":"0.0.0"
      }
   }
]
```

**Example Resultados de los casos de prueba:**  
+ **Superada**: el dispositivo sometido a prueba cerró la conexión.
+ **Fallo**: el dispositivo objeto de la prueba completó el protocolo de enlace TLS con. AWS IoT

## Certificado de servidor TLS caducado
<a name="expired-server"></a>

**Certificado de servidor caducado**  <a name="TLS_Expired_Server_Cert"></a>
Valida que el dispositivo sometido a prueba cierre la conexión si se le presenta un certificado de servidor caducado.  

**Example Definición de caso de prueba de API:**  
`EXECUTION_TIMEOUT` tiene un valor predeterminado de 5 minutos. Se recomienda un valor de tiempo de espera de 2 minutos. 

```
"tests":[
   {
      "name":"my_tls_expired_cert_test",
      "configuration": {
         // optional:
         "EXECUTION_TIMEOUT":"300",  //in seconds
      },
      "test":{
         "id":"TLS_Expired_Server_Cert",
         "version":"0.0.0"
      }
   }
]
```

**Example Resultados de los casos de prueba:**  
+ **Aprobar**: el dispositivo que se está probando se niega a completar el protocolo de enlace TLS con él. AWS IoT El dispositivo envía un mensaje de alerta de TLS antes de cerrar la conexión.
+ **Superada con advertencias**: el dispositivo sometido a prueba rechaza completar el protocolo de enlace TLS con AWS IoT. Sin embargo, no envía un mensaje de alerta de TLS antes de cerrar la conexión.
+ **Fallo**: el dispositivo que se está probando completa el protocolo de enlace TLS con. AWS IoT

# MQTT
<a name="device-advisor-tests-mqtt"></a>

## CONNECT, DISCONNECT y RECONNECT
<a name="connect"></a>

**«El dispositivo envía CONNECT a AWS IoT Core (Happy case)»**  <a name="MQTT_Connect"></a>
Valida que el dispositivo sometido a prueba envía una solicitud CONNECT.  
*Definición de caso de prueba de API:*  
`EXECUTION_TIMEOUT` tiene un valor predeterminado de 5 minutos. Se recomienda un valor de tiempo de espera de 2 minutos. 

```
"tests":[
   {
      "name":"my_mqtt_connect_test",
      "configuration": {
         // optional:
         "EXECUTION_TIMEOUT":"300",   // in seconds
      },
      "test":{
         "id":"MQTT_Connect",
         "version":"0.0.0"
      }
   }
]
```

**«El dispositivo puede devolver PUBACK a un tema arbitrario para QoS1»**  
Este caso de prueba comprobará si el dispositivo (cliente) puede devolver un mensaje de PUBACK si ha recibido un mensaje de publicación del agente tras suscribirse a un tema con QoS1.  
El contenido y el tamaño de la carga son configurables para este caso de prueba. Si el tamaño de la carga está configurado, Device Advisor sobrescribirá el valor del contenido de la carga útil y enviará una carga útil predefinida al dispositivo con el tamaño deseado. El tamaño de la carga útil es un valor entre 0 y 128 y no puede superar los 128 KB. AWS IoT Core rechaza las solicitudes de publicación y conexión de más de 128 KB, tal y como se muestra en la página del [agente de mensajes de AWS IoT Core y los límites y cuotas del protocolo](https://docs.aws.amazon.com/general/latest/gr/iot-core.html#message-broker-limits).   
*Definición de caso de prueba de API:*  
`EXECUTION_TIMEOUT` tiene un valor predeterminado de 5 minutos. Se recomienda un valor de tiempo de espera de 2 minutos. `PAYLOAD_SIZE` se puede configurar con un valor entre 0 y 128 kilobytes. Al definir un tamaño de carga, se anula el contenido de la carga, ya que Device Advisor enviará una carga predefinida con el tamaño indicado al dispositivo.

```
"tests":[                            
{
        "name":"my_mqtt_client_puback_qos1",
        "configuration": {
            // optional:"TRIGGER_TOPIC": "myTopic",
            "EXECUTION_TIMEOUT":"300", // in seconds
            "PAYLOAD_FOR_PUBLISH_VALIDATION":"custom payload",
            "PAYLOAD_SIZE":"100" // in kilobytes
        },
        "test": {
            "id": "MQTT_Client_Puback_QoS1",
            "version": "0.0.0"
        }
    }
]
```

**«Reintentos de conexión del dispositivo con retroceso fluctuante - Sin respuesta CONNACK»**  <a name="MQTT_ConnectJitterBackoff"></a>
Valida que el dispositivo que se está probando utiliza el retroceso fluctuante adecuado al volver a conectarse con el agente al menos cinco veces. El agente registra la marca de tiempo de la solicitud CONNECT del dispositivo sometido a prueba, valida los paquetes, hace una pausa sin enviar CONNACK al dispositivo sometido a prueba y espera a que el dispositivo vuelva a enviar la solicitud. Se deja pasar el sexto intento de conexión y se permite que CONNACK regrese al dispositivo objeto de la prueba.  
Se vuelve a realizar el proceso anterior. En total, este caso de prueba requiere que el dispositivo se conecte al menos 12 veces. Las marcas de tiempo recopiladas se utilizan para validar que el dispositivo que se está probando utiliza retroceso fluctuante. Si el dispositivo que se está probando tiene un retroceso fluctuante estrictamente exponencial, este caso de prueba superará con advertencias.   
Recomendamos implementar el mecanismo de [retroceso fluctuante y exponencial](https://aws.amazon.com/blogs//architecture/exponential-backoff-and-jitter/) en el dispositivo sometido a prueba para superar este caso de prueba.  
*Definición de caso de prueba de API:*  
`EXECUTION_TIMEOUT` tiene un valor predeterminado de 5 minutos. Se recomienda un valor de tiempo de espera de 4 minutos. 

```
"tests":[
   {
      "name":"my_mqtt_jitter_backoff_retries_test",
      "configuration": {
         // optional:
         "EXECUTION_TIMEOUT":"300",    // in seconds
      },
      "test":{
         "id":"MQTT_Connect_Jitter_Backoff_Retries",
         "version":"0.0.0"
      }
   }
]
```

**«Reintentos de conexión del dispositivo con retroceso exponencial - Sin respuesta CONNACK»**  
Valida que el dispositivo que se está probando utiliza el retroceso exponencial adecuado al volver a conectarse con el agente al menos cinco veces. El agente registra la marca de tiempo de la solicitud CONNECT del dispositivo sometido a prueba, valida los paquetes, hace una pausa sin enviar un CONNACK al dispositivo cliente y espera a que el dispositivo vuelva a enviar la solicitud. Las marcas de tiempo recopiladas se utilizan para validar que el dispositivo que se está probando utiliza retroceso exponencial.   
Recomendamos implementar el mecanismo de [retroceso fluctuante y exponencial](https://aws.amazon.com/blogs//architecture/exponential-backoff-and-jitter/) en el dispositivo sometido a prueba para superar este caso de prueba.  
*Definición de caso de prueba de API:*  
`EXECUTION_TIMEOUT` tiene un valor predeterminado de 5 minutos. Se recomienda un valor de tiempo de espera de 4 minutos. 

```
"tests":[
   {
      "name":"my_mqtt_exponential_backoff_retries_test",
      "configuration": {
         // optional:
         "EXECUTION_TIMEOUT":"600",  // in seconds
      },
      "test":{
         "id":"MQTT_Connect_Exponential_Backoff_Retries",
         "version":"0.0.0"
      }
   }
]
```

**«Reconexión del dispositivo con retroceso fluctuante - Tras la desconexión del servidor»**  
Valida si un dispositivo sometido a prueba utiliza la fluctuación y el retroceso necesarios al volver a conectarse después de haber sido desconectado del servidor. Device Advisor desconecta el dispositivo del servidor al menos cinco veces y observa el comportamiento del dispositivo al volver a conectarse mediante MQTT. Device Advisor registra la marca de tiempo de la solicitud CONNECT para el dispositivo sometido a prueba, realiza la validación del paquete, hace una pausa sin enviar un CONNACK al dispositivo cliente y espera a que el dispositivo objeto de prueba vuelva a enviar la solicitud. Las marcas de tiempo recopiladas se utilizan para validar que el dispositivo sometido a prueba utiliza fluctuación y retroceso durante la reconexión. Si el dispositivo sometido a prueba tiene un retroceso estrictamente exponencial o no implementa un mecanismo de retroceso fluctuante adecuado, este caso de prueba superará con advertencias. Si el dispositivo que se está probando ha implementado un mecanismo de retroceso lineal o un mecanismo de retroceso constante, la prueba fallará.  
Para superar este caso de prueba, le recomendamos que implemente el mecanismo de [retroceso y fluctuación exponencial](https://aws.amazon.com/blogs//architecture/exponential-backoff-and-jitter/) en el dispositivo sometido a prueba.  
*Definición de caso de prueba de API:*  
`EXECUTION_TIMEOUT` tiene un valor predeterminado de 5 minutos. Se recomienda un valor de tiempo de espera de 4 minutos.  
El número de intentos de reconexión para validar el retroceso se puede cambiar especificando el parámetro `RECONNECTION_ATTEMPTS`. El número debe estar comprendido entre 5 y 10. El valor predeterminado es 5.

```
"tests":[
   {
      "name":"my_mqtt_reconnect_backoff_retries_on_server_disconnect",
      "configuration":{
         // optional:
         "EXECUTION_TIMEOUT":"300",  // in seconds
         "RECONNECTION_ATTEMPTS": 5
      },
      "test":{
         "id":"MQTT_Reconnect_Backoff_Retries_On_Server_Disconnect",
         "version":"0.0.0"
      }
   }
]
```

**«Reconexión del dispositivo con un retroceso fluctuante - En caso de una conexión inestable»**  
Valida si un dispositivo sometido a prueba utiliza la fluctuación y el retroceso necesarios al volver a conectarse en una conexión inestable. Device Advisor desconecta el dispositivo del servidor después de cinco conexiones correctas y observa el comportamiento del dispositivo para la reconexión MQTT. Device Advisor registra la marca de tiempo de la solicitud CONNECT para el dispositivo sometido a prueba, realiza la validación del paquete, envía de vuelta CONNACK, se desconecta, registra la marca de tiempo de la desconexión y espera a que el dispositivo objeto de prueba vuelva a enviar la solicitud. Las marcas de tiempo recopiladas se utilizan para validar que el dispositivo sometido a prueba utiliza fluctuación y retroceso durante la reconexión tras conexiones correctas pero inestables. Si el dispositivo sometido a prueba tiene un retroceso estrictamente exponencial o no implementa un mecanismo de retroceso fluctuante adecuado, este caso de prueba superará con advertencias. Si el dispositivo que se está probando ha implementado un mecanismo de retroceso lineal o un mecanismo de retroceso constante, la prueba fallará.  
Para superar este caso de prueba, le recomendamos que implemente el mecanismo de [retroceso y fluctuación exponencial](https://aws.amazon.com/blogs//architecture/exponential-backoff-and-jitter/) en el dispositivo sometido a prueba.  
*Definición de caso de prueba de API:*  
`EXECUTION_TIMEOUT` tiene un valor predeterminado de 5 minutos. Se recomienda un valor de tiempo de espera de 4 minutos.  
El número de intentos de reconexión para validar el retroceso se puede cambiar especificando el parámetro `RECONNECTION_ATTEMPTS`. El número debe estar comprendido entre 5 y 10. El valor predeterminado es 5.

```
"tests":[
   {
      "name":"my_mqtt_reconnect_backoff_retries_on_unstable_connection",
      "configuration":{
         // optional:
         "EXECUTION_TIMEOUT":"300",  // in seconds
         "RECONNECTION_ATTEMPTS": 5
      },
      "test":{
         "id":"MQTT_Reconnect_Backoff_Retries_On_Unstable_Connection",
         "version":"0.0.0"
      }
   }
]
```

## Publish
<a name="publish"></a>

**«QoS0 (caso deseable)»**  <a name="MQTT_Publish"></a>
Valida que el dispositivo que se está probando publique un mensaje con QoS0 o QoS1. También puede validar el tema del mensaje y la carga especificando el valor del tema y la carga en la configuración de la prueba.  
`EXECUTION_TIMEOUT` tiene un valor predeterminado de 5 minutos. Se recomienda un valor de tiempo de espera de 2 minutos.

```
"tests":[
   {
      "name":"my_mqtt_publish_test",
      "configuration":{
         // optional:
         "EXECUTION_TIMEOUT":"300",  // in seconds
         "TOPIC_FOR_PUBLISH_VALIDATION": "my_TOPIC_FOR_PUBLISH_VALIDATION",
         "PAYLOAD_FOR_PUBLISH_VALIDATION": "my_PAYLOAD_FOR_PUBLISH_VALIDATION",
      },
      "test":{
         "id":"MQTT_Publish",
         "version":"0.0.0"
      }
   }
]
```

**«Reintento de publicación de QoS1 - Sin PUBACK»**  
Valida que el dispositivo sometido a prueba vuelva a publicar un mensaje enviado con QoS1, si el agente no envía PUBACK. También puede validar el tema del mensaje especificando este tema en la configuración de la prueba. El dispositivo cliente no debe desconectarse antes de volver a publicar el mensaje. Esta prueba también valida que el mensaje republicado tenga el mismo identificador de paquete que el original. Durante la ejecución de la prueba, si el dispositivo pierde la conexión y se vuelve a conectar, el caso de prueba se restablecerá sin fallar y el dispositivo tendrá que volver a realizar los pasos del caso de prueba.  
*Definición de caso de prueba de API:*  
`EXECUTION_TIMEOUT` tiene un valor predeterminado de 5 minutos. Se recomienda que dure al menos 4 minutos.

```
"tests":[
   {
      "name":"my_mqtt_publish_retry_test",
      "configuration":{
         // optional:
         "EXECUTION_TIMEOUT":"300",  // in seconds
         "TOPIC_FOR_PUBLISH_VALIDATION": "my_TOPIC_FOR_PUBLISH_VALIDATION",
         "PAYLOAD_FOR_PUBLISH_VALIDATION": "my_PAYLOAD_FOR_PUBLISH_VALIDATION",
      },
      "test":{
         "id":"MQTT_Publish_Retry_No_Puback",
         "version":"0.0.0"
      }
   }
]
```

**«Publicación de mensajes retenidos»**  
Valida que el dispositivo sometido a prueba publique un mensaje con `retainFlag` establecido en verdadero. Puede validar el tema y la carga del mensaje estableciendo el valor del tema y la carga en la configuración de la prueba. Si el valor `retainFlag` enviado en el paquete PUBLISH no está establecido en verdadero, el caso de prueba fallará.  
*Definición de caso de prueba de API:*  
`EXECUTION_TIMEOUT` tiene un valor predeterminado de 5 minutos. Se recomienda un valor de tiempo de espera de 2 minutos. Para ejecutar este caso de prueba, agregue la acción `iot:RetainPublish` a su [rol de dispositivo](https://docs.aws.amazon.com/iot/latest/developerguide/device-advisor-setting-up.html#da-iam-role).

```
"tests":[
   {
      "name":"my_mqtt_publish_retained_messages_test",
      "configuration":{
         // optional:
         "EXECUTION_TIMEOUT":"300",  // in seconds
         "TOPIC_FOR_PUBLISH_RETAINED_VALIDATION": "my_TOPIC_FOR_PUBLISH_RETAINED_VALIDATION",
         "PAYLOAD_FOR_PUBLISH_RETAINED_VALIDATION": "my_PAYLOAD_FOR_PUBLISH_RETAINED_VALIDATION",
      },
      "test":{
         "id":"MQTT_Publish_Retained_Messages",
         "version":"0.0.0"
      }
   }
]
```

**«Publicación con propiedad de usuario»**  
Valida que el dispositivo sometido a prueba publique un mensaje con la propiedad de usuario correcta. Puede validar la propiedad del usuario configurando el par nombre-valor en la configuración de la prueba. Si la propiedad del usuario no se proporciona o no coincide, el caso de prueba falla.  
*Definición de caso de prueba de API:*  
Este es MQTT5 solo un caso de prueba.  
`EXECUTION_TIMEOUT` tiene un valor predeterminado de 5 minutos. Se recomienda un valor de tiempo de espera de 2 minutos. 

```
"tests":[
   {
      "name":"my_mqtt_user_property_test",
      "test":{
        "USER_PROPERTIES": [
            {"name": "name1", "value":"value1"},
            {"name": "name2", "value":"value2"}
        ],
        "EXECUTION_TIMEOUT":"300",  // in seconds
      },
      "test":{
         "id":"MQTT_Publish_User_Property",
         "version":"0.0.0"
      }
   }
]
```

## Suscribirse
<a name="subscribe"></a>

**«Puede suscribirse (caso deseable)»**  <a name="MQTT_Subscribe"></a>
Valida que el dispositivo sometido a prueba esté suscrito a los temas de MQTT. También puede validar el tema al que está suscrito el dispositivo sometido a prueba especificando este tema en la configuración de la prueba.   
*Definición de caso de prueba de API:*  
`EXECUTION_TIMEOUT` tiene un valor predeterminado de 5 minutos. Se recomienda un valor de tiempo de espera de 2 minutos. 

```
"tests":[
   {
      "name":"my_mqtt_subscribe_test",
      "configuration":{
         // optional:
         "EXECUTION_TIMEOUT":"300",  // in seconds
         "TOPIC_LIST_FOR_SUBSCRIPTION_VALIDATION":["my_TOPIC_FOR_PUBLISH_VALIDATION_a","my_TOPIC_FOR_PUBLISH_VALIDATION_b"]
      },
      "test":{
         "id":"MQTT_Subscribe",
         "version":"0.0.0"
      }
   }
]
```

**«Reintento de suscripción - Sin SUBACK»**  
Valida que el dispositivo sometido a prueba reintenta una suscripción fallida a temas de MQTT. A continuación, el servidor espera y no envía un SUBACK. Si el dispositivo cliente no vuelve a intentar la suscripción, la prueba no se realizará correctamente. El dispositivo cliente debe volver a intentar la suscripción fallida con el mismo identificador de paquete. También puede validar el tema al que está suscrito el dispositivo sometido a prueba especificando este tema en la configuración de la prueba. Durante la ejecución de la prueba, si el dispositivo pierde la conexión y se vuelve a conectar, el caso de prueba se restablecerá sin fallar y el dispositivo tendrá que volver a realizar los pasos del caso de prueba.  
*Definición de caso de prueba de API:*  
`EXECUTION_TIMEOUT` tiene un valor predeterminado de 5 minutos. Se recomienda un valor de tiempo de espera de 4 minutos. 

```
"tests":[
   {
      "name":"my_mqtt_subscribe_retry_test",
      "configuration":{
         "EXECUTION_TIMEOUT":"300",  // in seconds
         // optional:
         "TOPIC_LIST_FOR_SUBSCRIPTION_VALIDATION":["myTOPIC_FOR_PUBLISH_VALIDATION_a","my_TOPIC_FOR_PUBLISH_VALIDATION_b"]
      },
      "test":{
         "id":"MQTT_Subscribe_Retry_No_Suback",
         "version":"0.0.0"
      }
   }
]
```

## Keep-Alive
<a name="keep-alive"></a>

**«Matt No Ack PingResp»**  
Este caso de prueba valida si el dispositivo sometido a prueba se desconecta cuando no recibe una respuesta de ping. Como parte de este caso de prueba, Device Advisor bloquea las respuestas enviadas desde AWS IoT Core las solicitudes de publicación, suscripción y ping. También valida si el dispositivo sometido a prueba desconecta la conexión MQTT.  
*Definición de caso de prueba de API:*  
`EXECUTION_TIMEOUT` tiene un valor predeterminado de 5 minutos. Recomendamos un tiempo de espera superior a 1,5 veces el valor `keepAliveTime`.  
 El `keepAliveTime` máximo no debe ser superior a 230 segundos para esta prueba. 

```
"tests":[
    {
       "name":"Mqtt No Ack PingResp",
       "configuration": 
          //optional:
          "EXECUTION_TIMEOUT":"306",   // in seconds
       },
       "test":{
          "id":"MQTT_No_Ack_PingResp",
          "version":"0.0.0"
       }
    }
]
```

## Sesión persistente
<a name="persistent-session"></a>

**«Sesión persistente (caso deseable)»**  
Este caso de prueba valida el comportamiento del dispositivo cuando se desconecta de una sesión persistente. El caso de prueba comprueba si el dispositivo puede volver a conectarse, reanudar las suscripciones a los temas que lo activaron sin tener que volver a suscribirse de forma explícita, recibir los mensajes almacenados en los temas y funcionar según lo previsto durante una sesión persistente. Cuando se supera este caso de prueba, indica que el dispositivo cliente es capaz de mantener una sesión persistente con el AWS IoT Core intermediario de la manera esperada. Para obtener más información sobre las sesiones AWS IoT persistentes, consulte [Uso de sesiones persistentes de MQTT](https://docs.aws.amazon.com/iot/latest/developerguide/mqtt.html#mqtt-persistent-sessions).   
En este caso de prueba, se espera que el dispositivo cliente envíe un paquete CONNECT con el AWS IoT Core y un indicador de sesión limpia establecido en falso y, a continuación, se suscriba a un tema activador. Tras una suscripción correcta, Device Advisor desconectará el AWS IoT Core dispositivo. Mientras el dispositivo esté desconectado, se almacenará una carga de mensajes de QoS 1 en ese tema. Luego, Device Advisor permitirá que el dispositivo cliente se vuelva a conectar con el punto de conexión de prueba. En este punto, dado que hay una sesión persistente, se espera que el dispositivo cliente reanude sus suscripciones de temas sin enviar ningún paquete SUBSCRIBE adicional y reciba el mensaje de QoS 1 del agente. Tras volver a conectarse, si el dispositivo cliente vuelve a suscribirse al tema de activación mediante el envío de un paquete and/or SUBSCRIBE adicional y el cliente no recibe el mensaje almacenado del tema de activación, el caso de prueba fallará.  
*Definición de caso de prueba de API:*  
`EXECUTION_TIMEOUT` tiene un valor predeterminado de 5 minutos. Se recomienda un valor de tiempo de espera de 4 minutos como mínimo. En la primera conexión, el dispositivo cliente debe suscribirse explícitamente a un `TRIGGER_TOPIC` al que no se haya suscrito anteriormente. Para superar el caso de prueba, el dispositivo cliente debe suscribirse correctamente a `TRIGGER_TOPIC` con un QoS 1. Tras volver a conectarse, se espera que el dispositivo cliente comprenda que hay una sesión persistente activa, por lo que debe aceptar el mensaje almacenado enviado por el tema activador y devolver PUBACK para ese mensaje específico. 

```
"tests":[
   {
      "name":"my_mqtt_persistent_session_happy_case",
      "configuration":{
         //required:
         "TRIGGER_TOPIC": "myTrigger/topic",
         // optional:
         // if Payload not provided, a string will be stored in the trigger topic to be sent back to the client device
         "PAYLOAD": "The message which should be received from AWS IoT Broker after re-connecting to a persistent session from the specified trigger topic.",            
         "EXECUTION_TIMEOUT":"300" // in seconds
      },
      "test":{
         "id":"MQTT_Persistent_Session_Happy_Case",
         "version":"0.0.0"
      }
   }
]
```

**«Sesión persistente - Caducidad de la sesión»**  
Este caso de prueba ayuda a validar el comportamiento del dispositivo cuando un dispositivo desconectado se vuelve a conectar a una sesión persistente caducada. Cuando finalice la sesión, esperamos que el dispositivo vuelva a suscribirse a los temas a los que estaba suscrito anteriormente mediante el envío explícito de un nuevo paquete SUBSCRIBE.  
Durante la primera conexión, esperamos que el dispositivo de prueba se CONECTE con el intermediario de AWS IoT, ya que su `CleanSession` indicador está establecido en falso para iniciar una sesión persistente. A continuación, el dispositivo debería suscribirse a un tema activador. A continuación, AWS IoT Core Device Advisor desconecta el dispositivo tras suscribirse correctamente e iniciar una sesión persistente. Tras la desconexión, AWS IoT Core Device Advisor permite que el dispositivo de prueba se vuelva a conectar con el terminal de prueba. En este punto, cuando el dispositivo de prueba envía otro paquete CONNECT, AWS IoT Core Device Advisor devuelve un paquete CONNACK que indica que la sesión persistente ha caducado. El dispositivo de prueba debe interpretar este paquete correctamente y se espera que vuelva a suscribirse al mismo tema activador cuando finalice la sesión persistente. Si el dispositivo de prueba no vuelve a suscribirse al tema activador, el caso de prueba falla. Para superar la prueba, el dispositivo debe comprender que la sesión persistente ha finalizado y enviar un nuevo paquete SUBSCRIBE para el mismo tema activador en la segunda conexión.  
Si este caso de prueba es válido para un dispositivo de prueba, indica que el dispositivo es capaz de gestionar la reconexión al caducar la sesión persistente de la forma esperada.  
*Definición de caso de prueba de API:*  
`EXECUTION_TIMEOUT` tiene un valor predeterminado de 5 minutos. Se recomienda un valor de tiempo de espera de 4 minutos como mínimo. El dispositivo de prueba necesita suscribirse explícitamente a un `TRIGGER_TOPIC`, al que no estaba suscrito anteriormente. Para superar el caso de prueba, el dispositivo de prueba debe enviar un paquete CONNECT con el indicador `CleanSession` establecido en false y suscribirse correctamente a un tema activador con un QoS 1. Tras una conexión correcta, AWS IoT Core Device Advisor desconecta el dispositivo. Tras la desconexión, AWS IoT Core Device Advisor permite que el dispositivo se vuelva a conectar y se espera que el dispositivo vuelva a suscribirse a la misma conexión, `TRIGGER_TOPIC` ya que AWS IoT Core Device Advisor habría terminado la sesión persistente.

```
"tests":[
   {
      "name":"my_expired_persistent_session_test",
      "configuration":{
         //required:
         "TRIGGER_TOPIC": "myTrigger/topic",
         // optional:       
         "EXECUTION_TIMEOUT":"300" // in seconds
      },
      "test":{
         "id":"MQTT_Expired_Persistent_Session",
         "version":"0.0.0"
      }
   }
]
```

# Sombra
<a name="device-advisor-tests-shadow"></a>

Utilice estas pruebas para comprobar que los dispositivos que se están probando utilizan correctamente el servicio AWS IoT Device Shadow. Para obtener más información, consulte [AWS IoT Servicio Device Shadow](iot-device-shadows.md). Si estos casos de prueba están configurados en su conjunto de pruebas, es necesario proporcionar un objeto al iniciar la ejecución del conjunto.

Por el momento, no WebSocket se admite **MQTT over**.

## Publish
<a name="publish"></a>

***«El dispositivo publica su estado después de conectarse (caso deseable)»***  
Valida si un dispositivo puede publicar su estado después de conectarse a AWS IoT Core  
*Definición de caso de prueba de API:*  
`EXECUTION_TIMEOUT` tiene un valor predeterminado de 5 minutos. Se recomienda un valor de tiempo de espera de 2 minutos. 

```
"tests":[
   {
      "name":"my_shadow_publish_reported_state",
      "configuration": {
         // optional:
         "EXECUTION_TIMEOUT":"300", // in seconds
         "SHADOW_NAME": "SHADOW_NAME",
         "REPORTED_STATE": {
            "STATE_ATTRIBUTE": "STATE_VALUE"
         }
      },
      "test":{
         "id":"Shadow_Publish_Reported_State",
         "version":"0.0.0"
      }
   }
]
```
`REPORTED_STATE` puede proporcionar para una validación adicional del estado de sombra exacto del dispositivo, una vez que se haya conectado. De forma predeterminada, este caso de prueba valida el estado de publicación del dispositivo.  
Si no se proporciona `SHADOW_NAME`, el caso de prueba busca los mensajes publicados con prefijos de tema del tipo de sombra sin nombre (clásico) de forma predeterminada. Proporcione un nombre de sombra si su dispositivo utiliza el tipo de sombra con nombre. Consulte [Uso de sombras en dispositivos](https://docs.aws.amazon.com/iot/latest/developerguide/device-shadow-comms-device.html) para obtener más información.

## Actualización
<a name="update"></a>

***«El dispositivo actualiza el estado notificado al estado deseado (caso deseable)»***  
Valida si el dispositivo lee todos los mensajes de actualización recibidos y sincroniza el estado del dispositivo para que coincida con las propiedades de estado deseadas. El dispositivo debería publicar el último estado registrado tras la sincronización. Si su dispositivo ya tiene una sombra existente antes de ejecutar la prueba, asegúrese de que el estado deseado configurado para el caso de prueba y el estado registrado existente no coincidan aún. Para identificar los mensajes de actualización de Shadow enviados por Device Advisor, consulte el **ClientToken**campo del documento oculto tal y como aparece. `DeviceAdvisorShadowTestCaseSetup`   
*Definición de caso de prueba de API:*  
`EXECUTION_TIMEOUT` tiene un valor predeterminado de 5 minutos. Se recomienda un valor de tiempo de espera de 2 minutos. 

```
"tests":[
   {
      "name":"my_shadow_update_reported_state",
      "configuration": {
         "DESIRED_STATE": {
            "STATE_ATTRIBUTE": "STATE_VALUE"
         },
         // optional:
         "EXECUTION_TIMEOUT":"300", // in seconds
         "SHADOW_NAME": "SHADOW_NAME"
      },
      "test":{
         "id":"Shadow_Update_Reported_State",
         "version":"0.0.0"
      }
   }
]
```
`DESIRED_STATE` debe tener al menos un atributo y un valor asociado.  
Si no se proporciona `SHADOW_NAME`, el caso de prueba busca los mensajes publicados con prefijos de tema del tipo de sombra sin nombre (clásico) de forma predeterminada. Proporcione un nombre de sombra si su dispositivo utiliza el tipo de sombra con nombre. Consulte [Uso de sombras en dispositivos](https://docs.aws.amazon.com/iot/latest/developerguide/device-shadow-comms-device.html) para obtener más información.

# Ejecución de trabajo
<a name="device-advisor-tests-job-execution"></a>

**«El dispositivo puede completar la ejecución de un trabajo»**  
 Este caso de prueba le ayuda a validar si su dispositivo puede recibir actualizaciones mediante AWS IoT Jobs y a publicar el estado de las actualizaciones correctas. Para obtener más información sobre los AWS IoT trabajos, consulte [Trabajos](https://docs.aws.amazon.com//iot/latest/developerguide/iot-jobs.html).   
 Para ejecutar correctamente este caso de prueba, hay dos temas de AWS reservados a los que debe asignar el [rol de dispositivo](https://docs.aws.amazon.com/iot/latest/developerguide/device-advisor-setting-up.html#da-iam-role). Para suscribirse a los mensajes relacionados con la actividad de trabajos, utilice los temas **notify** y **notify-next**. Su función de dispositivo debe permitir la acción PUBLISH en los siguientes temas:   
+ \$1aws/things/**thingName**/jobs/**jobId**/get
+ \$1aws/things/**thingName**/jobs/**jobId**/update
Se recomienda conceder las acciones SUBSCRIBE y RECEIVE para los siguientes temas:  
+ **\$1aws/things/ ThingName/**jobs/get/accepted
+ \$1aws/things/**thingName**/jobs/**jobId**/get/rejected
+ \$1aws/things/**thingName**/jobs/**jobId**/update/accepted
+ \$1aws/things/**thingName**/jobs/**jobId**/update/rejected
Se recomienda conceder la acción SUBSCRIBE para el siguiente tema:  
+ \$1aws/things/**thingName**/jobs/notify-next
Para obtener más información sobre estos temas reservados, consulte los temas reservados de [AWS IoT Jobs](https://docs.aws.amazon.com/iot/latest/developerguide/reserved-topics.html#reserved-topics-job).  
Por el momento, no se **admite MQTT over. WebSocket**  
*Definición de caso de prueba de API:*  
`EXECUTION_TIMEOUT` tiene un valor predeterminado de 5 minutos. Se recomienda un valor de tiempo de espera de 3 minutos. Según el documento de AWS IoT trabajo o la fuente proporcionados, ajuste el valor de tiempo de espera (por ejemplo, si un trabajo tardará mucho en ejecutarse, defina un valor de tiempo de espera más largo para el caso de prueba). Para ejecutar la prueba, se necesita un documento de AWS IoT trabajo válido o un identificador de trabajo ya existente. Un documento de AWS IoT trabajo se puede proporcionar como un documento JSON o un enlace S3. Si se proporciona un documento de trabajo, proporcionar un identificador de trabajo es opcional. Si se proporciona un ID de trabajo, Device Advisor utilizará ese ID al crear el AWS IoT trabajo en su nombre. Si no se proporciona el documento de trabajo, puede proporcionar un ID existente que se encuentre en la misma región en la que está ejecutando el caso de prueba. En este caso, Device Advisor utilizará ese AWS IoT Job mientras ejecuta el caso de prueba.

```
"tests": [
   {
      "name":"my_job_execution",
      "configuration": {
         // optional:
         // Test case will create a job task by using either JOB_DOCUMENT or JOB_DOCUMENT_SOURCE.
         // If you manage the job task on your own, leave it empty and provide the JOB_JOBID (self-managed job task).
         // JOB_DOCUMENT is a JSON formatted string
         "JOB_DOCUMENT": "{
            \"operation\":\"reboot\",
            \"files\" : {
               \"fileName\" : \"install.py\",
               \"url\" : \"${aws:iot:s3-presigned-url:https://s3.amazonaws.com/bucket-name/key}\"
            }
         }",
         // JOB_DOCUMENT_SOURCE is an S3 link to the job document. It will be used only if JOB_DOCUMENT is not provided.
         "JOB_DOCUMENT_SOURCE": "https://s3.amazonaws.com/bucket-name/key",
         // JOB_JOBID is mandatory, only if neither document nor document source is provided. (Test case needs to know the self-managed job task id).
         "JOB_JOBID": "String",
         // JOB_PRESIGN_ROLE_ARN is used for the presign Url, which will replace the placeholder in the JOB_DOCUMENT field
         "JOB_PRESIGN_ROLE_ARN": "String",
         // Presigned Url expiration time. It must be between 60 and 3600 seconds, with the default value being 3600.
         "JOB_PRESIGN_EXPIRES_IN_SEC": "Long"   
         "EXECUTION_TIMEOUT": "300", // in seconds         
      },
      "test": {
         "id": "Job_Execution",
         "version": "0.0.0"
      }
   }
]
```
Para obtener más información sobre la creación y el uso de documentos de trabajo, consulte [Documento de trabajo](https://docs.aws.amazon.com//iot/latest/developerguide/iot-jobs.html). 

# Permisos y políticas
<a name="device-advisor-tests-permissions-policies"></a>

Puede utilizar las siguientes pruebas con el fin de determinar si las políticas asociadas a los certificados de sus dispositivos siguen las prácticas estándar recomendadas.

Por el momento, no WebSocket se admite **MQTT over**.

**«Las políticas asociadas a los certificados de dispositivo no contienen caracteres comodín»**  
 Valida si las políticas de permisos asociadas a un dispositivo siguen las prácticas recomendadas y no conceden al dispositivo más permisos de los necesarios.  
*Definición de caso de prueba de API:*  
`EXECUTION_TIMEOUT` tiene un valor predeterminado de 1 minuto. Recomendamos establecer un tiempo de espera de al menos 30 segundos.

```
"tests":[
   {
        "name":"my_security_device_policies",
        "configuration": {
            // optional:
            "EXECUTION_TIMEOUT":"60"    // in seconds
        },
        "test": {
            "id": "Security_Device_Policies",
            "version": "0.0.0"
        }
    }
]
```

# Pruebas de larga duración
<a name="device-advisor-tests-long-duration"></a>

Las pruebas de larga duración son un nuevo conjunto de pruebas que monitoriza el comportamiento de un dispositivo cuando funciona durante períodos de tiempo más prolongados. En comparación con la ejecución de pruebas individuales que se centran en comportamientos específicos de un dispositivo, la prueba de larga duración examina el comportamiento del dispositivo en una variedad de escenarios del mundo real a lo largo de su vida útil. Device Advisor organiza las pruebas en el orden más eficiente posible. La prueba genera resultados y registros, incluido un registro resumido con métricas útiles sobre el rendimiento del dispositivo durante la prueba. 

## Caso de prueba MQTT de larga duración
<a name="long-duration-test-case"></a>

En el caso de la prueba de larga duración de MQTT, el comportamiento del dispositivo se observa inicialmente en situaciones de casos deseables, como MQTT Connect, Subscribe, Publish y Reconnect. A continuación, se observa el dispositivo en varias situaciones de fallo complejas, como la interrupción de la reconexión MQTT, la desconexión prolongada del servidor y la conectividad intermitente.

## Flujo de ejecución de casos de prueba de larga duración en MQTT
<a name="long-duration-test-case-execution-flow"></a>

La ejecución de un caso de prueba de larga duración en MQTT consta de tres fases:

![\[Ejecución de pruebas de larga duración en MQTT que muestra Ejecución de pruebas básicas, Ejecución de pruebas avanzadas y Tiempo de ejecución adicional.\]](http://docs.aws.amazon.com/es_es/iot/latest/developerguide/images/mqtt-execution-flow.png)


### Ejecución de pruebas básicas
<a name="basic-tests-execution"></a>

En esta fase, el caso de prueba ejecuta pruebas sencillas en paralelo. La prueba valida si el dispositivo tiene las operaciones seleccionadas en la configuración.

El conjunto de pruebas básicas puede incluir lo siguiente, en función de las operaciones seleccionadas:

#### CONNECT
<a name="basic-tests-execution-connect"></a>

Este escenario valida si el dispositivo puede establecer una conexión correcta con el agente.

![\[El flujo de conexión básico que incluye un dispositivo que envía un mensaje CONNECT y el agente responde con un mensaje CONNACK con un código de retorno correcto.\]](http://docs.aws.amazon.com/es_es/iot/latest/developerguide/images/basic-connect.png)


#### PUBLISH
<a name="basic-tests-execution-publish"></a>

Este escenario valida si el dispositivo publica correctamente con el agente.

##### QoS 0
<a name="publish-qos0"></a>

Este caso de prueba valida si el dispositivo envía correctamente un mensaje `PUBLISH` al agente durante una publicación con QoS 0. La prueba no espera a que el dispositivo reciba el mensaje `PUBACK`.

![\[El flujo de PUBLISH QoS 0 que incluye un dispositivo que envía un mensaje PUBLISH con un nivel de QoS 0.\]](http://docs.aws.amazon.com/es_es/iot/latest/developerguide/images/Qos0.png)


##### QoS 1
<a name="publish-qos1"></a>

En este caso de prueba, se espera que el dispositivo envíe dos mensajes `PUBLISH` al agente con QoS 1. Tras el primer mensaje `PUBLISH`, el agente espera hasta 15 segundos antes de responder. El dispositivo debe volver a intentar enviar el mensaje `PUBLISH` original con el mismo identificador de paquete dentro del intervalo de 15 segundos. Si lo hace, el agente responde con un mensaje `PUBACK` y la prueba se valida. Si el dispositivo no vuelve a intentar el `PUBLISH`, se envía el `PUBACK` original al dispositivo y la prueba se marca como **superada con advertencias**, junto con un mensaje del sistema. Durante la ejecución de la prueba, si el dispositivo pierde la conexión y se vuelve a conectar, el escenario de prueba se restablecerá sin fallar y el dispositivo tendrá que volver a realizar los pasos del escenario de prueba. 

![\[El flujo de PUBLISH QoS 1 que incluye un dispositivo que envía un mensaje PUBLISH con un nivel de QoS 1 y múltiples interacciones con el agente.\]](http://docs.aws.amazon.com/es_es/iot/latest/developerguide/images/Qos1.png)


#### SUBSCRIBE
<a name="basic-tests-execution-subscribe"></a>

Este escenario valida si el dispositivo se suscribe correctamente con el agente.

##### QoS 0
<a name="subscribe-qos0"></a>

Este caso de prueba valida si el dispositivo envía correctamente un mensaje `SUBSCRIBE` al agente durante una suscripción con QoS 0. La prueba no espera a que el dispositivo reciba un mensaje SUBACK.

![\[El flujo SUBSCRIBE QoS 0 que incluye un dispositivo que envía un mensaje SUBSCRIBE con un nivel de QoS 0 y un agente que responde con un mensaje SUBACK y un código de QoS 0 de Success Maximum.\]](http://docs.aws.amazon.com/es_es/iot/latest/developerguide/images/subscribe-Qos0.png)


##### QoS 1
<a name="subscribe-qos1"></a>

En este caso de prueba, se espera que el dispositivo envíe dos mensajes `SUBSCRIBE` al agente con QoS 1. Tras el primer mensaje `SUBSCRIBE`, el agente espera hasta 15 segundos antes de responder. El dispositivo debe volver a intentar enviar el mensaje `SUBSCRIBE` original con el mismo identificador de paquete dentro del intervalo de 15 segundos. Si lo hace, el agente responde con un mensaje `SUBACK` y la prueba se valida. Si el dispositivo no vuelve a intentar el `SUBSCRIBE`, se envía el `SUBACK` original al dispositivo y la prueba se marca como **superada con advertencias**, junto con un mensaje del sistema. Durante la ejecución de la prueba, si el dispositivo pierde la conexión y se vuelve a conectar, el escenario de prueba se restablecerá sin fallar y el dispositivo tendrá que volver a realizar los pasos del escenario de prueba. 

![\[El flujo de SUBSCRIBE QoS 1 que incluye un dispositivo que envía un mensaje SUBSCRIBE con un nivel de QoS 1 y múltiples interacciones con el agente.\]](http://docs.aws.amazon.com/es_es/iot/latest/developerguide/images/subscribe-Qos1.png)


#### RECONNECT
<a name="basic-tests-execution-reconnect"></a>

Este escenario valida si el dispositivo se vuelve a conectar correctamente con el agente después de desconectarse de una conexión correcta. Device Advisor no desconectará el dispositivo si se conectó más de una vez anteriormente durante el conjunto de pruebas. En su lugar, marcará la prueba como **superada**.

![\[El flujo de RECONNECT entre DUT y el agente.\]](http://docs.aws.amazon.com/es_es/iot/latest/developerguide/images/reconnect.png)


### Ejecución de pruebas avanzadas
<a name="advanced-tests-execution"></a>

En esta fase, el caso de prueba ejecuta pruebas más complejas en serie para validar si el dispositivo sigue las prácticas recomendadas. Estas pruebas avanzadas están disponibles para su selección y pueden excluirse si no son necesarias. Cada prueba avanzada tiene su propio valor de tiempo de espera en función de lo que exija la situación. 

#### RETURN PUBACK ON QoS 1 SUBSCRIPTION
<a name="advanced-tests-execution-return-puback"></a>

**nota**  
Seleccione este escenario únicamente si su dispositivo es capaz de realizar suscripciones de QoS 1.

Este escenario se valida si, cuando el dispositivo se suscribe a un tema y recibe un mensaje `PUBLISH` del agente, devuelve un mensaje `PUBACK`.

![\[El flujo de RETURN PUBACK ON QoS 1 SUBSCTIPTION entre DUT y el agente.\]](http://docs.aws.amazon.com/es_es/iot/latest/developerguide/images/return-puback.png)


#### RECEIVE LARGE PAYLOAD
<a name="advanced-tests-execution-receive-large-payload"></a>

**nota**  
Seleccione este escenario únicamente si su dispositivo es capaz de realizar suscripciones de QoS 1.

Este escenario valida si el dispositivo responde con un mensaje `PUBACK` después de recibir un mensaje `PUBLISH` del agente sobre un tema de QoS 1 con una gran carga. El formato de la carga esperada se puede configurar mediante la opción `LONG_PAYLOAD_FORMAT`.

![\[El flujo de RECEIVE LARGE PAYLOAD entre DUT y el agente.\]](http://docs.aws.amazon.com/es_es/iot/latest/developerguide/images/large-payload.png)


#### PERSISTENT SESSION
<a name="advanced-tests-execution-persistent-session"></a>

**nota**  
Solo seleccione este escenario únicamente si su dispositivo es capaz de realizar suscripciones de QoS 1 y puede mantener una sesión persistente.

Este escenario valida el comportamiento del dispositivo a la hora de mantener sesiones persistentes. La prueba valida cuándo se cumplen las siguientes condiciones:
+ El dispositivo se conecta al agente con una suscripción de QoS 1 activa y sesiones persistentes habilitadas.
+ El dispositivo se desconecta correctamente del agente durante la sesión.
+ El dispositivo se vuelve a conectar al agente y reanuda las suscripciones a los temas que lo activaron sin volver a suscribirse explícitamente a esos temas.
+ El dispositivo recibe correctamente los mensajes almacenados por el agente sobre los temas a los que se ha suscrito y funciona según lo previsto.

 Para obtener más información sobre las sesiones AWS IoT persistentes, consulte [Uso de sesiones persistentes de MQTT](https://docs.aws.amazon.com//iot/latest/developerguide/mqtt.html#mqtt-persistent-sessions).

![\[El flujo de PERSISTENT SESSION entre DUT y el agente.\]](http://docs.aws.amazon.com/es_es/iot/latest/developerguide/images/persistent-session.png)


#### KEEP-ALIVE
<a name="advanced-tests-execution-keep-alive"></a>

Este escenario valida si el dispositivo se desconecta correctamente después de no recibir una respuesta de ping del agente. La conexión debe tener configurado un temporizador Keep-Alive válido. Como parte de esta prueba, el agente bloquea todas las respuestas enviadas para los mensajes `PUBLISH`, `SUBSCRIBE` y `PINGREQ`. También valida si el dispositivo sometido a prueba desconecta la conexión MQTT.

![\[El flujo de KEEP ALIVE entre DUT y el agente.\]](http://docs.aws.amazon.com/es_es/iot/latest/developerguide/images/keep-alive.png)


#### INTERMITTENT CONNECTIVITY
<a name="advanced-tests-execution-intermittent-connectivity"></a>

Este escenario valida si el dispositivo puede volver a conectarse al agente después de que el corredor desconecte el dispositivo a intervalos aleatorios durante un período de tiempo aleatorio.

![\[El flujo de INTERMITTENT CONNECTIVITY entre DUT y el agente.\]](http://docs.aws.amazon.com/es_es/iot/latest/developerguide/images/intermittent.png)


#### RECONNECT BACKOFF
<a name="advanced-tests-execution-reconnect-backoff"></a>

Este escenario valida si el dispositivo tiene implementado un mecanismo de inactividad cuando el agente se desconecta de él varias veces. Device Advisor indica que el tipo de retroceso es exponencial, fluctuante, lineal o constante. El número de intentos de retroceso se puede configurar mediante la opción `BACKOFF_CONNECTION_ATTEMPTS`. El valor predeterminado es 5. El valor se puede configurar entre 5 y 10.

Para superar esta prueba, le recomendamos que implemente el mecanismo de [retroceso y fluctuación exponencial](https://aws.amazon.com/blogs/architecture/exponential-backoff-and-jitter/) en el dispositivo sometido a prueba.

![\[El flujo de RECONNECT BACKOFF entre DUT y el agente.\]](http://docs.aws.amazon.com/es_es/iot/latest/developerguide/images/reconnect-backoff.png)


#### LONG SERVER DISCONNECT
<a name="advanced-tests-execution-longserver-disconnect"></a>

Este escenario valida si el dispositivo puede volver a conectarse correctamente después de que el agente lo desconecte durante un período prolongado (hasta 120 minutos). El tiempo de desconexión del servidor se puede configurar mediante la opción `LONG_SERVER_DISCONNECT_TIME`. El valor predeterminado es 120 minutos. Este valor se puede configurar de 30 a 120 minutos.

![\[El flujo de LONG SERVER DISCONNECT entre DUT y el agente.\]](http://docs.aws.amazon.com/es_es/iot/latest/developerguide/images/longserver-disconnect.png)


### Tiempo de ejecución adicional
<a name="additional-execution-time"></a>

El tiempo de ejecución adicional es el tiempo que espera la prueba después de completar todas las pruebas anteriores y antes de finalizar el caso de prueba. Los clientes utilizan este período de tiempo adicional para monitorizar y registrar todas las comunicaciones entre el dispositivo y el agente. El tiempo de ejecución adicional se puede configurar mediante la opción `ADDITIONAL_EXECUTION_TIME`. De forma predeterminada, esta opción está establecida en 0 minutos y puede ser de 0 a 120 minutos. 

## Opciones de configuración de las pruebas de larga duración de MQTT
<a name="long-duration-test-case-config-options"></a>

Todas las opciones de configuración proporcionadas para la prueba de larga duración de MQTT son opcionales. Están disponibles las siguientes opciones:

**OPERACIONES**  
La lista de operaciones que realiza el dispositivo, como `CONNECT`, `PUBLISH` y `SUBSCRIBE`. El caso de prueba ejecuta escenarios basados en las operaciones especificadas. Se supone que las operaciones que no se especifican son válidas.  

```
{                                
"OPERATIONS": ["PUBLISH", "SUBSCRIBE"]
//by default the test assumes device can CONNECT   
}
```

**ESCENARIOS**  
En función de las operaciones seleccionadas, el caso de prueba ejecuta escenarios para validar el comportamiento del dispositivo. Existen dos tipos de escenarios:  
+ Los **escenarios básicos** son pruebas sencillas que validan si el dispositivo puede realizar las operaciones seleccionadas anteriormente como parte de la configuración. Se preseleccionan en función de las operaciones especificadas en la configuración. No se requiere ninguna entrada adicional en la configuración.
+ Los **escenarios avanzados** son escenarios más complejos que se utilizan en el dispositivo para validar si el dispositivo sigue las prácticas recomendadas en condiciones reales. Son opcionales y se pueden transferir como una serie de escenarios a la entrada de configuración del conjunto de pruebas.

```
{                                
    "SCENARIOS": [      // list of advanced scenarios
                "PUBACK_QOS_1",
                "RECEIVE_LARGE_PAYLOAD",
                "PERSISTENT_SESSION",
                "KEEP_ALIVE",
                "INTERMITTENT_CONNECTIVITY",
                "RECONNECT_BACK_OFF",
                "LONG_SERVER_DISCONNECT"
    ]  
}
```

**BASIC\$1TESTS\$1EXECUTION\$1TIME\$1OUT:**  
El tiempo máximo que esperará el caso de prueba hasta que se completen todas las pruebas básicas. El valor predeterminado es 60 minutos. Este valor se puede configurar de 30 a 120 minutos.

**LONG\$1SERVER\$1DISCONNECT\$1TIME:**  
El tiempo que tardó el caso de prueba en desconectar y volver a conectar el dispositivo durante la prueba de desconexión prolongada del servidor. El valor predeterminado es 60 minutos. Este valor se puede configurar de 30 a 120 minutos.

**ADDITIONAL\$1EXECUTION\$1TIME:**  
La configuración de esta opción proporciona un período de tiempo después de que se hayan completado todas las pruebas para monitorizar los eventos entre el dispositivo y el agente. El valor predeterminado es 0 minutos. Este valor se puede configurar de 0 a 120 minutos.

**BACKOFF\$1CONNECTION\$1ATTEMPTS:**  
Esta opción configura el número de veces que el caso de prueba desconecta el dispositivo. Esto se utiliza en la prueba de retroceso de reconexión. El valor predeterminado es 5 intentos. Este valor se puede configurar de 5 a 10.

**LONG\$1PAYLOAD\$1FORMAT:**  
El formato de la carga del mensaje que el dispositivo espera cuando el caso de prueba se publique en un tema de QoS 1 suscrito por el dispositivo.

**Definición de caso de prueba de API:**

```
{                                
"tests":[
   {
      "name":"my_mqtt_long_duration_test",
      "configuration": {
         // optional
         "OPERATIONS": ["PUBLISH", "SUBSCRIBE"], 
         "SCENARIOS": [      
            "LONG_SERVER_DISCONNECT", 
            "RECONNECT_BACK_OFF",
            "KEEP_ALIVE",
            "RECEIVE_LARGE_PAYLOAD",
            "INTERMITTENT_CONNECTIVITY",
            "PERSISTENT_SESSION",   
         ],
         "BASIC_TESTS_EXECUTION_TIMEOUT": 60, // in minutes (60 minutes by default)
         "LONG_SERVER_DISCONNECT_TIME": 60,   // in minutes (120 minutes by default)
         "ADDITIONAL_EXECUTION_TIME": 60,     // in minutes (0 minutes by default)
         "BACKOFF_CONNECTION_ATTEMPTS": "5",
         "LONG_PAYLOAD_FORMAT":"{"message":"${payload}"}"
      },
      "test":{
         "id":"MQTT_Long_Duration",
         "version":"0.0.0"
      }
   }
 ]      
}
```

## Registro resumido de caso de prueba MQTT de larga duración
<a name="long-duration-test-case-summary-log"></a>

El caso de prueba de larga duración de MQTT dura más que los casos de prueba normales. Se proporciona un registro resumido independiente, en el que se enumeran los eventos importantes, como las conexiones de los dispositivos, la publicación y la suscripción durante la ejecución. Los detalles incluyen lo que se ha probado, lo que no se ha probado y lo que ha fallado. Al final del registro, la prueba incluye un resumen de todos los eventos ocurridos durante la ejecución del caso de prueba. Esto incluye:
+ *El temporizador Keep-Alive configurado en el dispositivo.*
+ *Indicador de sesión persistente configurado en el dispositivo.*
+ *El número de conexiones del dispositivo durante la ejecución de la prueba.*
+ *El tipo de retroceso de reconexión del dispositivo, si está validado para la prueba de retroceso de reconexión.*
+ *Los temas en los que el dispositivo publicó durante el caso de prueba.*
+ *Los temas a los que el dispositivo se suscribió durante el caso de prueba.*