使用 IDT 上下文 - AWS IoT Greengrass

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

使用 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.jsonfile.

resource.devices

此信息相當於devices陣列中定義resource.jsonfile. EACHdevices元素包括下列附加欄位:

resource.device.name

資源裝置的名稱。此值設定為requiredResource.name中的值test.jsonfile.

testData.awsCredentials

所以此AWS憑據用於連接到AWS雲端。這些信息是從config.jsonfile.

testData.logFilePath

測試用例向其寫入日誌消息的日誌文件的路徑。如果此檔案不存在,則測試套件會創建此檔案。

userData

測試運行者在userdata.json文件

訪問上下文中的數據

您可以使用 JSON 文件中的 JSONPath 符號來查詢上下文,也可以從文本可執行文件中使用GetContextValueGetContextStringAPI。用於訪問 IDT 上下文的 JSONPath 字符串的語法變化如下:

  • Insuite.jsontest.json,您使用{{query}}。也就是説,不要使用根元素$.開始表達式。

  • Intest_orchestrator.yaml,您使用{{query}}

    如果您使用已棄用的狀態機,則在state_machine.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 語法

您可以使用 {{詢問}} 作為佔位符字符串在argsenvironmentVariables欄位test.json文件和environmentVariables欄位suite.json檔案。IDT 執行上下文查找並使用查詢的評估值填充字段。例如,在suite.json文件中,您可以使用佔位符字符串指定隨每個測試用例發生變化的環境變量值,IDT 將使用每個測試用例的正確值填充環境變量。但是,當您使用佔位符字符串test.jsonsuite.json檔案,下列考量適用於您的查詢:

  • 您必須每次出現devicePool鍵在您的查詢中全部小寫。也就是説,使用devicepool要改。

  • 對於數組,您只能使用字符串數組。此外,數組使用非標準item1, item2,...,itemN格式。如果數組只包含一個元素,那麼它被序列化為item,使其與字符串字段無法區分。

  • 不能使用佔位符從上下文檢索對象。

由於這些考慮因素,我們建議儘可能使用 API 訪問測試邏輯中的上下文,而不是test.jsonsuite.json檔案。但是,在某些情況下,使用 JSONPath 佔位符來檢索要設置為環境變量的單個字符串可能會更方便。