長時間測試 - AWS IoT Core

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

長時間測試

長時間測試是一款新型測試套件,可監測裝置在長時間運作期間的行為。相較於執行著重於裝置特定行為的個別測試,長時間測試會檢查裝置在其使用壽命內各種實際案例中的行為。Device Advisor 會以最有效率的順序來協調測試。該測試會產生結果和日誌,其中包括一份摘要日誌,詳載有關裝置效能的實用指標。

MQTT 長時間測試案例

在 MQTT 長時間測試案例中,起初會以 MQTT Connect、訂閱、發佈和重新連線等簡易案例的情境來觀察裝置行為。然後,在多種複雜的故障情境下觀察裝置,例如 MQTT 重新連線輪詢、長時間伺服器中斷連線以及間歇性連線。

MQTT 長時間測試案例執行流程

MQTT 長時間測試案例的執行分為三個階段:

「MQTT 長時間測試執行」,顯示基本測試執行,高級測試執行和額外的執行時間。

基本測試執行

此階段的測試案例會以並行方式執行簡易測試。測試將驗證裝置是否依據在組態中所做的選擇進行操作。

根據所選操作,一組基本測試可以包括以下內容:

CONNECT

此案例會驗證裝置是否能夠與代理程式成功建立連線。

基本連線流程,其中包括傳送 CONNECT 訊息的裝置,而 Broker 會以成功傳回碼的 CONNACK 訊息回應。

發佈

此案例會驗證裝置是否成功針對代理程式進行發佈。

QoS 0

此測試案例會驗證裝置在以 QoS 0 發佈期間是否成功將 PUBLISH 訊息傳送至代理程式。測試不會等待裝置接收關於 PUBACK 的訊息。

發佈 QoS 0 流程,其中包含傳送具有 QoS 0 層級之發佈訊息的裝置。
QoS 1

在此測試案例中,裝置預計將向具有 QoS 1 的代理程式傳送兩條 PUBLISH 訊息。在第一條 PUBLISH 訊息之後,代理程式會等待最多 15 秒,然後再回應。裝置必須在 15 秒的時段中重新嘗試具有相同封包識別碼的原始 PUBLISH 訊息。在此情況下,代理程式會以 PUBACK 訊息回應,且測試會進行驗證。如果裝置沒有重試 PUBLISH,則原始 PUBACK 會傳送到裝置,並將測試標記為附帶警告的通過,同時提供系統訊息。測試執行期間,如果裝置失去連線並重新連接,則測試案例將重置而不會故障,並且裝置必須再次執行測試案例步驟。

發佈 QoS 1 流程,其中包括傳送具有 QoS 1 層級的 PUBLISH 訊息以及與代理程式進行多次互動的裝置。

訂閱

此案例會驗證裝置是否成功針對代理程式進行訂閱。

QoS 0

此測試案例會驗證裝置在以 QoS 0 訂閱期間是否成功將 SUBSCRIBE 訊息傳送至代理程式。測試不會等待裝置收到 SUBACK 訊息。

訂閱 QoS 0 流程,包括傳送具有 QoS 0 層級的訂閱訊息的裝置,以及使用 SUBACK 訊息和成功最大 QoS 0 程式碼回應的代理程式。
QoS 1

在此測試案例中,裝置預計將向具有 QoS 1 的代理程式傳送兩條 SUBSCRIBE 訊息。在第一條 SUBSCRIBE 訊息之後,代理程式會等待最多 15 秒,然後再回應。裝置必須在 15 秒的時段中重新嘗試具有相同封包識別碼的原始 SUBSCRIBE 訊息。在此情況下,代理程式會以 SUBACK 訊息回應,且測試會進行驗證。如果裝置沒有重試 SUBSCRIBE,則原始 SUBACK 會傳送到裝置,並將測試標記為附帶警告的通過,同時提供系統訊息。測試執行期間,如果裝置失去連線並重新連接,則測試案例將重置而不會故障,並且裝置必須再次執行測試案例步驟。

訂閱 QoS 1 流程,其中包括傳送具有 QoS 1 層級的訂閱訊息以及與代理程式進行多次互動的裝置。

重新連線

此案例會驗證裝置在從成功的連線中斷之後,是否成功與代理程式重新連線。如果先前已在測試套件期間連線多次,則 Device Advisor 不會中斷裝置連線。相反,它會將測試標記為通過

DUT 和代理之間的重新連接流程。

進階測試執行

此階段的測試案例會以序列方式執行較複雜的測試,以驗證裝置是否遵循最佳實務。這些進階測試可供選擇,若無需要可以選擇不執行。根據案例需求,每項進階測試都各有專屬的逾期值。

RETURN PUBACK ON QoS 1 SUBSCRIPTION

注意

只有當您的裝置能夠執行 QoS 1 訂閱時,才可選取此案例。

此案例會驗證在裝置訂閱主題並收到來自代理人的 PUBLISH 訊息之後,是否會傳回 PUBACK 訊息。

DUT 和代理之間的 QoS 1 上的返回發布包。

RECEIVE LARGE PAYLOAD

注意

只有當您的裝置能夠執行 QoS 1 訂閱時,才可選取此案例。

此案例會驗證裝置在收到具有大型承載的 QoS 1 主題的代理程式發出的 PUBLISH 訊息後,是否會以 PUBACK 訊息進行回應。可以使用 LONG_PAYLOAD_FORMAT 選項設定預期承載的格式。

DUT 和代理之間的接收大有效載荷流量。

持久性工作階段

注意

只有當您的裝置能夠執行 QoS 1 訂閱且可以維持持久性工作階段時,才可選取此案例。

此案例會驗證維持持久性工作階段時的裝置行為。測試會驗證是否滿足下列條件:

  • 裝置連線至具有作用中 QoS 1 訂閱且已啟用持久性工作階段的代理程式。

  • 裝置在工作階段期間成功中斷與代理程式的連線。

  • 裝置會重新連線至代理程式,並繼續訂閱其觸發主題,而不會明確重新訂閱這些主題。

  • 裝置成功接收代理程式為其訂閱主題所儲存的訊息,並如預期執行。

如需 AWS IoT 持續工作階段的詳細資訊,請參閱使用 MQTT 持續性工作階段。

DUT 和代理之間的持久會話流。

Keep-Alive

此案例會驗證裝置在未收到代理程式的 Ping 回應後是否能成功中斷連線。必須為連線設定有效的保持連線計時器。在此測試中,代理程式會封鎖所有針對 PUBLISHSUBSCRIBEPINGREQ 訊息而傳送的回應。其也會驗證待測裝置是否中斷與 MQTT 的連線。

DUT 和經紀人之間的「保持活力」流程。

INTERMITTENT CONNECTIVITY

此案例會驗證代理程式在隨機間隔內與裝置中斷連線之後,裝置是否可以恢復與代理程式的連線。

DUT 與代理程式之間的間歇性連線流程。

RECONNECT BACKOFF

此案例會驗證代理程式多次中斷連線後,裝置是否會實作退避機制。Device Advisor 會將退避類型報告為指數、抖動、線性或常數。您可以使用 BACKOFF_CONNECTION_ATTEMPTS 選項來設定退避嘗試次數。預設值為 5。可以設定介於 5 到 10 之間的值。

若要通過此測試,建議對受測裝置實作指數退避和抖動機制。

DUT 與代理程式之間的重新連線輪詢流程。

長時間伺服器中斷連線

此案例會驗證在代理程式長時間 (最多 120 分鐘) 中斷與裝置的連線之後,裝置是否可以成功重新連線。可以使用 LONG_SERVER_DISCONNECT_TIME 選項來設定伺服器中斷連線的時間。預設值為 120 分鐘。此值可以設定的範圍介於 30 至 120 分鐘。

DUT 和代理之間的長服務器斷開流程。

額外執行時間

額外執行時間是指測試從完成上述所有測試之後到結束測試案例之前所等待的時間。客戶可使用此額外時段來監控裝置並記錄裝置與代理程式的所有通訊。可以使用 ADDITIONAL_EXECUTION_TIME 選項來設定額外執行時間。此選項依預設為 0 分鐘,可設定的範圍介於 0 到 120 分鐘。

MQTT 長時間測試組態選項

為 MQTT 長時間測試提供的所有組態選項均非強制性。以下是可用的選項:

操作

裝置執行的操作清單,例如 CONNECTPUBLISHSUBSCRIBE。測試案例會依據指定的操作來執行情境案例。系統會將未指定的操作假設為有效。

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

根據所選操作,測試案例會執行情境案例來驗證裝置行為。案例有兩種類型:

  • 基本案例屬於簡易測試,用於驗證裝置是否可以執行在組態中選擇的操作。這些條件會根據組態中指定的操作預先選取。在配置中不再需要輸入。

  • 進階案例是對裝置執行較複雜的情境案例,以驗證裝置在真實世界條件下是否遵循最佳實務。這些選項均非強制性質,可以作為案例陣列傳遞給測試套件的組態輸入項。

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

若設定此選項,系統會在完成所有測試後提供一個時段,用以監控裝置與代理程式之間的事件。預設值為 0 分鐘。此值可以設定的範圍介於 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 長時間測試案例的執行時間較常規測試案例更長。會提供個別摘要日誌,其中列出執行期間的裝置連線、發佈和訂閱等重要事件。詳細資訊包括已測試的項目、未測試的項目以及失敗的項目。測試功能會在日誌結尾列出測試案例執行期間所發生全部事件的摘要。其中包含:

  • 在裝置上設定的保持連線計時器。

  • 裝置上設定的持久性工作階段旗標。

  • 裝置在測試執行期間的連線次數。

  • 裝置重新連線退避類型 (若已通過重新連線退避測試的驗證)。

  • 在測試案例執行期間作為裝置發佈目標的主題。

  • 裝置在測試案例執行期間訂閱的主題。