MQTT - AWS IoT Core

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.

MQTT

CONNECT, DISCONNECT y RECONNECT

«El dispositivo envía CONNECT a AWS IoT Core (Happy case)»

Valida que el dispositivo sometido a prueba envía una solicitud CONNECT.

Definición de caso de prueba de API:

nota

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.

Definición de caso de prueba de API:

nota

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»

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 en el dispositivo sometido a prueba para superar este caso de prueba.

Definición de caso de prueba de API:

nota

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 en el dispositivo sometido a prueba para superar este caso de prueba.

Definición de caso de prueba de API:

nota

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 en el dispositivo sometido a prueba.

Definición de caso de prueba de API:

nota

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 en el dispositivo sometido a prueba.

Definición de caso de prueba de API:

nota

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

Publicación

«QoS0 (caso deseable)»

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.

nota

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:

nota

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:

nota

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.

"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:

nota

Este es un caso de prueba exclusivo de MQTT5.

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

«Puede suscribirse (caso deseable)»

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:

nota

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:

nota

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

«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:

nota

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

«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.

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 activador mediante el envío de un paquete SUBSCRIBE adicional o si el cliente no recibe el mensaje almacenado del tema activador, el caso de prueba fallará.

Definición de caso de prueba de API:

nota

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. Luego, Device Advisor desconecta AWS IoT Core el dispositivo después de suscribirse correctamente y de 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 punto final 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:

nota

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