AWS IoT Greengrass Version 1 於 2023 年 6 月 30 日進入延長壽命階段。如需詳細資訊,請參閱 AWS IoT Greengrass V1 維護政策 。在此日期之後, AWS IoT Greengrass V1 不會發佈提供功能、增強功能、錯誤修正或安全修補程式的更新。在 上執行的裝置 AWS IoT Greengrass V1 不會中斷,並會繼續運作和連線至雲端。我們強烈建議您遷移至 AWS IoT Greengrass Version 2,這會新增重要的新功能,並支援其他平台 。
本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
使用 IDT 上下文
當 IDT 運行測試套件時,測試套件可以訪問一組數據,這些數據可用於確定每個測試的運行方式。此數據稱為 IDT 上下文。例如,測試運行者在userdata.json
文件可用於在 IDT 上下文中測試套件。
IDT 上下文可以被視為只讀 JSON 文檔。測試套件可以使用標準 JSON 數據類型(如對象、數組、數字等)從上下文中檢索數據並將數據寫入上下文。
上下文架構
IDT 上下文使用下列格式:
{ "config": { <config-json-content> "timeoutMultiplier": timeout-multiplier }, "device": { <device-json-device-element> }, "devicePool": { <device-json-pool-element> }, "resource": { "devices": [ { <resource-json-device-element> "name": "<resource-name>" } ] }, "testData": { "awsCredentials": { "awsAccessKeyId": "<access-key-id>", "awsSecretAccessKey": "<secret-access-key>", "awsSessionToken": "<session-token>" }, "logFilePath": "/path/to/log/file" }, "userData": { <userdata-json-content> } }
config
-
來自config.json文件。所以此
config
字段還包含以下附加字段:config.timeoutMultiplier
-
測試套件使用的任何超時值的乘數。此值由 IDT CLI 中的測試運行者指定。預設值為
1
。
device
-
有關為測試運行選擇的設備的信息。此信息相當於
devices
數組元素device.json文件為選定的設備。 devicePool
-
有關為測試運行選擇的設備池的信息。此信息等效於頂級設備池陣列元素,在
device.json
文件中的所選設備池。 resource
-
有關資源設備的信息
resource.json
file.resource.devices
-
此信息相當於
devices
陣列中定義resource.json
file. EACHdevices
元素包括下列附加欄位:resource.device.name
-
資源設備的名稱。此值設定為
requiredResource.name
中的值test.json
file.
testData.awsCredentials
-
所以此AWS憑據用於連接到AWS雲端。這些信息是從
config.json
file. testData.logFilePath
-
測試用例向其寫入日誌消息的日誌文件的路徑。如果不存在,則測試套件會建立此檔案。
userData
-
測試運行者在userdata.json文件。
訪問上下文中的數據
您可以使用 JSON 文件中的 JSONPath 符號來查詢上下文,也可以從文本可執行文件中使用GetContextValue
和GetContextString
API。用於訪問 IDT 上下文的 JSONPath 字符串的語法變化如下:
-
In
suite.json
和test.json
,您使用{{
。也就是説,不要使用根元素query
}}$.
開始表達式。 -
In
statemachine.json
,您使用{{$.
。query
}} -
在 API 命令中,您可以使用
或者query
{{$.
,具體取決於命令。如需詳細資訊,請參閲軟體開發套件套件中的內聯文件。query
}}
下表描述典型 JSONPath 表達式中的運算符:
Operator | Description |
---|---|
$ |
The root element. Because the top-level context
value for IDT is an object, you will typically use $. to
start your queries. |
.子名 |
Accesses the child element with name
子女姓名 from an object. If applied to an array,
yields a new array with this operator applied to each element. The
element name is case sensitive. For example, the query to access the
awsRegion value in the config object is
$.Config.AW 區域 . |
[開始:結束] |
Filters elements from an array, retrieving items
beginning from the start index and going up to the
結束 index, both inclusive. |
[索引 1、索引 2、...、索引 N] |
Filters elements from an array, retrieving items from only the specified indices. |
[? (分期)] |
Filters elements from an array using the
expr expression. This expression must evaluate to a
boolean value. |
要創建篩選器表達式,請使用以下語法:
<jsonpath>
|<value>
operator
<jsonpath>
|<value>
在此語法中:
-
jsonpath
是一個使用標準 JSON 語法的 JSON 路徑。 -
value
是任何使用標準 JSON 語法的自定義值。 -
operator
是下列其中一個運算符:-
<
(小於) -
<=
(小於或等於) -
==
(等於)如果表達式中的 JSONPath 或值是數組、布爾值或對象值,則這是您可以使用的唯一受支持的二進制運算符。
-
>=
(大於或等於) -
>
(大於) -
=~
(正則表達式匹配)。要在過濾器表達式中使用此運算符,表達式左側的 JSONPath 或值必須計算為字符串,右側必須是一個模式值,該模式值必須遵循RE2 語法。
-
您可以使用 {{詢問
}} 作為佔位符字符串在args
和environmentVariables
欄位之間的test.json
文件和environmentVariables
欄位之間的suite.json
檔案。IDT 執行上下文查找並使用查詢的評估值填充字段。例如,在suite.json
文件中,您可以使用佔位符字符串指定隨每個測試用例發生變化的環境變量值,IDT 將使用每個測試用例的正確值填充環境變量。但是,當您在test.json
和suite.json
檔案時,下列考量適用於您的查詢:
-
您必須每次出現
devicePool
鍵在您的查詢中全部小寫。也就是説,使用devicepool
要改用。 -
對於數組,您只能使用字符串數組。此外,數組使用非標準
item1, item2,...,itemN
格式。如果數組只包含一個元素,那麼它被序列化為item
,使其與字符串字段無法區分。 -
不能使用佔位符從上下文檢索對象。
由於這些考慮因素,我們建議儘可能使用 API 訪問測試邏輯中的上下文,而不是test.json
和suite.json
檔案。但是,在某些情況下,使用 JSONPath 佔位符來檢索要設置為環境變量的單個字符串可能會更方便。