长时间测试 - Amazon IoT Core
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

长时间测试

长时间测试是一种新的测试套件,可以在设备长时间运行时监控设备的行为。与运行专注于设备特定行为的单独测试相比,长时间测试可在设备的使用寿命内检查设备在各种真实场景中的行为。Device Advisor 会以尽可能最有效的顺序编排测试。测试生成结果和日志,包括摘要日志,其中包含有关设备在测试期间的性能的有用指标。

MQTT 长时间测试用例

在 MQTT 长时间测试用例中,设备的行为最初是在诸如 MQTT 连接、订阅、发布和重新连接之类的快乐用例场景中观察的。然后,在多种复杂的故障场景中观察该设备,例如 MQTT 重新连接回退、长时间服务器断开连接和间歇性连接。

MQTT 长时间测试用例执行流程

MQTT 长时间测试用例的执行分为三个阶段:

显示基本测试执行、高级测试执行和额外执行时间的 “MQTT 长持续时间测试执行”。

执行基本测试

在此阶段,测试用例并行运行多项简单测试。该测试验证设备是否在配置中选择了这些操作。

根据所选操作,基本测试集可以包括以下内容:

连接

此场景验证设备是否能够成功与代理建立连接。

基本连接流程,包括设备发送 CONNECT 消息,Broker 使用成功返回代码的 CONNACK 消息进行响应。

发布

此场景验证设备是否能够成功向代理发布。

QoS 0

此测试用例验证设备在使用 QoS 0 发布期间是否能够成功向代理发送 PUBLISH 消息。测试不会等待设备收到 PUBACK 消息。

发布 QoS 0 流程,包括设备发送 QoS 0 级别的 PUBLISH 消息。
QoS 1

在此测试用例中,设备应使用 QoS 1 向代理发送两条 PUBLISH 消息。在收到第一条 PUBLISH 消息后,代理最多等待 15 秒钟就会做出响应。设备必须在 15 秒的期限内使用相同的数据包标识符重试原始 PUBLISH 消息。如果是这样,代理会回复一条 PUBACK 消息,测试将进行验证。如果设备不重试 PUBLISH,会将原始 PUBACK 发送到设备,测试将被标记为 Pass with warnings(通过但带有警告),并会显示系统消息。在测试执行期间,如果设备丢失连接并重新连接,则测试场景将顺利重置,并且设备必须重新执行测试场景步骤。

发布 QoS 1 流程,包括设备发送 QoS 1 级别的 PUBLISH 消息以及与代理的多次交互。

订阅

此场景验证设备是否能够成功向代理订阅。

QoS 0

此测试用例验证设备在使用 QoS 0 订阅期间是否能够成功向代理发送 SUBSCRIBE 消息。测试不会等待设备收到 SUBACK 消息。

订阅 QoS 0 流程,包括设备发送 QoS 0 级别的 SUBSCRIBE 消息,以及使用 SUBACK 消息和成功最大 QoS 0 代码进行响应的代理。
QoS 1

在此测试用例中,设备应使用 QoS 1 向代理发送两条 SUBSCRIBE 消息。在收到第一条 SUBSCRIBE 消息后,代理最多等待 15 秒钟就会做出响应。设备必须在 15 秒的期限内使用相同的数据包标识符重试原始 SUBSCRIBE 消息。如果是这样,代理会回复一条 SUBACK 消息,测试将进行验证。如果设备不重试 SUBSCRIBE,会将原始 SUBACK 发送到设备,测试将被标记为 Pass with warnings(通过但带有警告),并会显示系统消息。在测试执行期间,如果设备丢失连接并重新连接,则测试场景将顺利重置,并且设备必须重新执行测试场景步骤。

订阅 QoS 1 流程,包括设备发送 QoS 1 级别的 SUBSCRIBE 消息以及与代理的多次交互。

重新连接

此场景验证在设备从成功连接断开连接后,是否能够成功与代理重新连接。如果在之前的测试套件期间多次连接设备,Device Advisor 不会断开设备此连接。相反,它会将测试标记为 Pass(通过)。

DUT 和代理之间的重新连接流程。

执行高级测试

在此阶段,测试用例连续运行更复杂的测试,以验证设备是否遵循最佳实践。这些高级测试可供选择,如果不需要,可以选择退出。根据场景的要求,每个高级测试都有自己的超时值。

订阅 QoS 1 时返回 PUBACK

注意

仅当您的设备能够执行 QoS 1 订阅时才选择此场景。

此场景验证设备订阅主题并收到来自代理的 PUBLISH 消息后是否返回 PUBACK 消息。

QoS 1 订阅的 RETURN PUBACK 在 DUT 和代理之间流动。

接收较大有效负载

注意

仅当您的设备能够执行 QoS 1 订阅时才选择此场景。

此场景验证设备在从代理接收到 QoS 1 主题的具有较大有效负载的 PUBLISH 消息后,是否以 PUBACK 消息进行响应。可以使用 LONG_PAYLOAD_FORMAT 选项配置预期有效负载的格式。

DUT 和代理之间的接收大有效载荷流。

持久性会话

注意

仅当您的设备能够执行 QoS 1 订阅,并且能够保留持久性会话时才选择此场景。

此场景验证设备在保留持续性会话方面的行为。当满足以下条件时,此测试将进行验证:

  • 设备在具有有效 QoS 1 订阅并启用持久性会话的情况下连接到代理。

  • 设备在会话期间成功断开与代理的连接。

  • 设备重新连接到代理并恢复对其触发器主题的订阅,而没有明确重新订阅这些主题。

  • 设备成功接收代理存储的有关其订阅主题的消息,并按预期运行。

有关 Amazon IoT 持久会话的更多信息,请参阅使用 MQTT 持久会话

DUT 和代理之间的持续会话流。

保持活动

此场景验证设备在未收到来自代理的 ping 响应后是否成功断开连接。连接必须配置有效的保持活动计时器。作为此测试的一部分,代理会阻止针对 PUBLISHSUBSCRIBEPINGREQ 消息发送的所有响应。它还验证正在测试的设备是否断开了 MQTT 连接。

DUT 和经纪人之间的 KEEP ALIVE 流程。

间歇性连接

此场景验证在代理以随机间隔断开设备连接一段随机时间后,设备是否可以连接回代理。

DUT 和代理之间的间歇性连接流。

重新连接回退

此场景验证代理多次与设备断开连接时,设备是否实现了回退机制。Device Advisor 将回退类型报告为指数回退、抖动回退、线性回退或恒定回退。回退尝试次数可使用 BACKOFF_CONNECTION_ATTEMPTS 选项进行配置。默认值是 5。此值可配置为 5 到 10。

要通过此测试,我们建议在所测试设备上实施指数回退和抖动机制。

DUT 和代理之间的 RECONNECT 回退流程。

服务器长时间断开连接

此场景验证代理在较长一段时间(最多 120 分钟)断开设备连接后,设备是否可以成功重新连接。可以使用 LONG_SERVER_DISCONNECT_TIME 选项配置服务器断开连接的时间。默认值为 120 分钟。此值可配置为 30 到 120 分钟。

DUT 和代理之间存在长时间的服务器断开连接。

额外执行时间

额外执行时间是测试在完成所有上述测试之后,以及结束测试用例之前等待的时间。客户利用这段额外时间来监控和记录设备与代理之间的所有通信。可以使用 ADDITIONAL_EXECUTION_TIME 选项配置额外执行时间。默认情况下,此选项设置为 0 分钟,也可以设置为 0 到 120 分钟。

MQTT 长时间测试配置选项

为 MQTT 长时间测试提供的所有配置选项都是可选的。以下选项可用:

OPERATIONS(操作)

设备执行的操作列表,例如 CONNECTPUBLISHSUBSCRIBE。测试用例根据指定的操作运行场景。未指定的操作假定为有效。

{ "OPERATIONS": ["PUBLISH", "SUBSCRIBE"] //by default the test assumes device can CONNECT }
SCENARIOS(场景)

测试用例根据所选操作运行场景来验证设备的行为。有两种类型的场景:

  • 基本场景是一些简单的测试,用于验证设备是否可以执行上面作为配置的一部分选择的操作。这些场景是根据配置中指定的操作预先选择的。配置中不需要更多输入。

  • 高级场景是对设备执行的更为复杂的场景,用于验证设备在满足现实条件时是否遵循了最佳实践。这些场景是可选的,可以作为场景数组传递给测试套件的配置输入。

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

测试用例等待所有基本测试完成的最长时间。默认值为 60 分钟。此值可配置为 30 到 120 分钟。

LONG_SERVER_DISCONNECT_TIME:

在“服务器长时间断开连接”测试期间,测试用例断开连接和重新连接设备所用的时间。默认值为 60 分钟。此值可配置为 30 到 120 分钟。

ADDITIONAL_EXECUTION_TIME:

配置此选项可在所有测试完成后提供一个时间范围,用于监控设备和代理之间的事件。默认值为 5 分钟。此值可配置为 0 到 120 分钟。

BACKOFF_CONNECTION_ATTEMPTS:

此选项可配置测试用例断开连接设备的次数。此选项由重新连接回退测试使用。默认值为 5 次。此值可配置为 5 到 10。

LONG_PAYLOAD_FORMAT:

当测试用例发布到设备订阅的 QoS 1 主题时,设备期望的消息有效负载格式。

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

MQTT 长时间测试用例摘要日志

MQTT 长时间测试用例的运行时间比常规测试用例长。提供了单独的摘要日志,其中列出了运行期间的重要事件,例如设备连接、发布和订阅。详细信息包括测试的内容、未测试的内容和失败的内容。测试会在日志的末尾包含测试用例运行期间发生的所有事件的摘要。摘要包括:

  • 设备上配置的“保持活动”计时器。

  • 设备上配置的持久性会话标志。

  • 测试运行期间的设备连接数。

  • 设备重新连接回退类型(如果已通过重新连接回退测试验证)。

  • 在测试用例运行期间,设备发布到的主题。

  • 在测试用例运行期间,设备订阅的主题。