本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
使用 IDT 上下文
當 IDT 運行測試套件時,測試套件可以訪問一組數據,這些數據可用於確定每個測試的運行方式。此資料稱為 IDT 內容。例如,測試運行程序在userdata.json
文件中提供的用戶數據配置可用於 IDT 上下文中的測試套件。
IDT 上下文可以被視為只讀 JSON 文檔。測試套件可以使用標準 JSON 數據類型(如對象,數組,數字等)檢索數據並將數據寫入上下文。
上下文模式
IDT 前後關聯使用下列格式:
{ "config": { <config-json-content> "timeoutMultiplier": timeout-multiplier, "idtRootPath": <path/to/IDT/root> }, "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
。 config.idRootPath
-
此值是配置檔案時 IDT 絕對路徑值的預留位
userdata.json
置。這是由構建和閃存命令使用。
device
-
有關為測試運行選擇的設備的信息。此資訊相當於所選裝置的device.json檔案中的
devices
陣列元素。 devicePool
-
有關為測試運行選擇的設備池的信息。此資訊相當於在
device.json
檔案中為所選裝置集區定義的頂層裝置集區陣列元素。 resource
-
resource.json
檔案中資源裝置的相關資訊。resource.devices
-
這項資訊等同於
resource.json
檔案中定義的devices
陣列。每個devices
元素都包含下列其他欄位:resource.device.name
-
資源裝置的名稱。此值會設定為
test.json
檔案中的requiredResource.name
值。
testData.awsCredentials
-
測試用來連線至 AWS 雲端的 AWS 認證。此資訊是從
config.json
檔案中取得的。 testData.logFilePath
-
測試案例寫入記錄訊息的記錄檔路徑。如果測試套件不存在,則會創建此文件。
userData
-
由測試運行程序在userdata.json文件中提供的信息。
存取上下文中的資料
您可以使用配置文件中的 JSONPath 表示法以及使用和 API 的文本可執行文件查詢上下GetContextValue
文。GetContextString
用於訪問 IDT 上下文的 JSONPath 字符串的語法變化如下:
-
在
suite.json
和test.json
,您使用{{
. 也就是說,請勿使用根元素query
}}$.
來啟動運算式。 -
在中
statemachine.json
,您使用{{$.
.query
}} -
在 API 命令中,您可以根據命令使用
或query
{{$.
。如需詳細資訊,請參閱 SDK 中的內嵌文件。query
}}
下表描述了一個典型的包括 JSONPath 表達式的運算符:
運算子 | 描述 |
---|---|
$ |
根元素。由於 IDT 的頂層前後關聯值是物件,因此您通常會用$. 來啟動查詢。 |
.childName |
從物件存取具有名稱childName 的子元素。如果施加到一個數組,產生一個新的數組,並應用於每個元素這個運算符。元素名稱區分大小寫。例如,存取config 物件中awsRegion 值的查詢為$.config.awsRegion 。 |
[start:end] |
從數組過濾元素,檢索從索start 引開始和上到索end 引,都包括在內的項目。 |
[index1, index2, ... , indexN] |
從數組過濾元素,僅從指定的索引中檢索項目。 |
[?(expr)] |
使用expr 運算式篩選陣列中的元素。此運算式必須評估為布林值。 |
若要建立篩選運算式,請使用下列語法:
<jsonpath>
|<value>
operator
<jsonpath>
|<value>
在此語法中:
-
jsonpath
是使用標準 JSON 語法的 JSON 路徑。 -
value
是任何使用標準 JSON 語法的自訂值。 -
operator
是下列其中一個運算子:-
<
(小於) -
<=
(小於或等於) -
==
(等於)如果運算式中的 JSONPath 或值是陣列、布林值或物件值,則這是您可以使用的唯一受支援的二進位運算子。
-
>=
(大於或等於) -
>
(大於) -
=~
(正則表達式匹配)。若要在篩選運算式中使用這個運算子,運算式左側的 JSONPath 或值必須評估為字串,而右側必須是遵循 RE2 語法的模式值。
-
您可以在 {{query}} 格式使用 JSONPath 查詢
作為檔案args
和environmentVariables
欄位內的預留位置字串,以及test.json
檔案中的environmentVariables
欄位內。suite.json
IDT 會執行前後關聯查詢,並使用查詢的評估值填入欄位。例如,在suite.json
文件中,您可以使用佔位符字符串來指定隨每個測試用例而變化的環境變量值,IDT 將為每個測試用例填充正確的值的環境變量。但是,當您在test.json
和 suite.json
file 中使用預留位置字串時,下列考量適用於您的查詢:
-
您必須在查詢中每次出現
devicePool
索引鍵的全部小寫。也就是說,使用devicepool
代替。 -
對於數組,您只能使用字符串數組。此外,陣列使用非標準
item1, item2,...,itemN
格式。如果數組只包含一個元素,那麼它被序列化為item
,使其與字符串字段無法區分。 -
您無法使用預留位置從前後關聯擷取物件。
由於這些考量因素,我們建議您盡可能使用 API 來存取測試邏輯中的內容,而不是test.json
和suite.json
檔案中的預留位置字串。但是,在某些情況下,使用 JSONPath 佔位符來檢索要設置為環境變量的單個字符串可能會更方便。