本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
長時間測試是一款新型測試套件,可監測裝置在長時間運作期間的行為。相較於執行著重於裝置特定行為的個別測試,長時間測試會檢查裝置在其使用壽命內各種實際案例中的行為。Device Advisor 會以最有效率的順序來協調測試。該測試會產生結果和日誌,其中包括一份摘要日誌,詳載有關裝置效能的實用指標。
MQTT 長時間測試案例
在MQTT長時間測試案例中,最初會在MQTT連線、訂閱、發佈和重新連線等滿意案例案例中觀察到裝置的行為。然後,在多個複雜的故障案例中觀察到裝置,例如MQTT重新連線退避、長伺服器中斷連線和間歇連線。
MQTT 長時間測試案例執行流程
執行MQTT長時間測試案例有三個階段:

基本測試執行
此階段的測試案例會以並行方式執行簡易測試。測試將驗證裝置是否依據在組態中所做的選擇進行操作。
根據所選操作,一組基本測試可以包括以下內容:
CONNECT
此案例會驗證裝置是否能夠與代理程式成功建立連線。

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

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

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

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

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

進階測試執行
此階段的測試案例會以序列方式執行較複雜的測試,以驗證裝置是否遵循最佳實務。這些進階測試可供選擇,若無需要可以選擇不執行。根據案例需求,每項進階測試都各有專屬的逾期值。
RETURN PUBACK ON QoS 1 SUBSCRIPTION
注意
只有當您的裝置能夠執行 QoS 1 訂閱時,才可選取此案例。
此案例會驗證在裝置訂閱主題並收到來自代理人的 PUBLISH
訊息之後,是否會傳回 PUBACK
訊息。

RECEIVE LARGE PAYLOAD
注意
只有當您的裝置能夠執行 QoS 1 訂閱時,才可選取此案例。
此案例會驗證裝置在收到具有大型承載的 QoS 1 主題的代理程式發出的 PUBLISH
訊息後,是否會以 PUBACK
訊息進行回應。可以使用 LONG_PAYLOAD_FORMAT
選項設定預期承載的格式。

PERSISTENT SESSION
注意
只有當您的裝置能夠執行 QoS 1 訂閱且可以維持持久性工作階段時,才可選取此案例。
此案例會驗證維持持久性工作階段時的裝置行為。測試會驗證是否滿足下列條件:
-
裝置連線至具有作用中 QoS 1 訂閱且已啟用持久性工作階段的代理程式。
-
裝置在工作階段期間成功中斷與代理程式的連線。
-
裝置會重新連線至代理程式,並繼續訂閱其觸發主題,而不會明確重新訂閱這些主題。
-
裝置成功接收代理程式為其訂閱主題所儲存的訊息,並如預期執行。
如需 AWS IoT 持久性工作階段的詳細資訊,請參閱使用MQTT持久性工作階段。

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

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

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

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

額外執行時間
額外執行時間是指測試從完成上述所有測試之後到結束測試案例之前所等待的時間。客戶可使用此額外時段來監控裝置並記錄裝置與代理程式的所有通訊。可以使用 ADDITIONAL_EXECUTION_TIME
選項來設定額外執行時間。此選項依預設為 0 分鐘,可設定的範圍介於 0 到 120 分鐘。
MQTT 長時間測試組態選項
MQTT 長時間測試提供的所有組態選項都是選用的。以下是可用的選項:
- OPERATIONS
裝置執行的操作清單,例如
CONNECT
、PUBLISH
和SUBSCRIBE
。測試案例會依據指定的操作來執行情境案例。系統會將未指定的操作假設為有效。{ "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:
若設定此選項,系統會在完成所有測試後提供一個時段,用以監控裝置與代理程式之間的事件。預設值為 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長時間測試案例的執行持續時間較長。會提供個別摘要日誌,其中列出執行期間的裝置連線、發佈和訂閱等重要事件。詳細資訊包括已測試的項目、未測試的項目以及失敗的項目。測試功能會在日誌結尾列出測試案例執行期間所發生全部事件的摘要。其中包含:
-
在裝置上設定的保持連線計時器。
-
裝置上設定的持久性工作階段旗標。
-
裝置在測試執行期間的連線次數。
-
裝置重新連線退避類型 (若已通過重新連線退避測試的驗證)。
-
在測試案例執行期間作為裝置發佈目標的主題。
-
裝置在測試案例執行期間訂閱的主題。