

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

# Gunakan konteks IDT
<a name="idt-context"></a>

Ketika IDT menjalankan rangkaian tes, rangkaian tes tersebut dapat mengakses serangkaian data yang dapat digunakan untuk menentukan bagaimana setiap tes akan berjalan. Data ini disebut konteks IDT. Sebagai contoh, konfigurasi data pengguna yang disediakan oleh test runner di file `userdata.json` tersedia pada rangkaian tes dalam konteks IDT. 

Konteks IDT dapat dianggap sebagai dokumen JSON hanya-baca. Rangkaian uji dapat mengambil data dari dan menuliskan data ke konteks tersebut dengan menggunakan jenis data JSON standar seperti objek, rangkaian, angka, dan sebagainya.

## Skema konteks
<a name="idt-context-schema"></a>

Konteks state machine menggunakan format berikut:

```
{
    "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`  
Informasi dari [`config.json` file](set-custom-idt-config.md#config-json-custom). Kolom `config` juga berisi kolom tambahan berikut:    
`config.timeoutMultiplier`  
Pengganda untuk setiap nilai batas waktu yang digunakan oleh rangkaian tes. Nilai ini ditentukan oleh test runner dari IDT CLI. Nilai default-nya adalah `1`.

`device`  
Informasi tentang kolam perangkat yang dipilih untuk uji coba. Informasi ini setara dengan elemen rangkaian `devices` dalam [file `device.json`](set-custom-idt-config.md#device-config-custom) untuk perangkat yang dipilih.

`devicePool`  
Informasi tentang kolam perangkat yang dipilih untuk uji coba. Informasi ini setara dengan elemen rangkaian kolam perangkat tingkat ata yang ditentukan di file `device.json` untuk kolam perangkat yang dipilih.

`resource`  
Informasi tentang perangkat sumber daya dari file `resource.json`.    
`resource.devices`  
Informasi ini setara dengan rangkaian `devices` yang ditentukan dalam file `resource.json`. Setiap elemen `devices` mencakup kolom tambahan berikut:    
`resource.device.name`  
Nama sumber daya. Nilai ini diatur ke nilai `requiredResource.name` pada file `test.json`.

`testData.awsCredentials`  
 AWS Kredensi yang digunakan oleh tes untuk terhubung ke cloud. AWS Informasi ini diperoleh dari file `config.json`.

`testData.logFilePath`  
Path ke file log di mana uji kasus menuliskan pesan log. Rangkaian tes membuat file ini jika tidak ada. 

`userData`  
Informasi yang diberikan oleh test runner di [file `userdata.json`](set-custom-idt-config.md#userdata-config-custom).

## Akses data dalam konteks
<a name="accessing-context-data"></a>

Anda dapat menanyakan konteks menggunakan JSONPath notasi dari file JSON Anda dan dari teks Anda yang dapat dieksekusi dengan dan. `GetContextValue` `GetContextString` APIs Sintaks untuk JSONPath string untuk mengakses konteks IDT bervariasi sebagai berikut:
+ Pada `suite.json` dan `test.json`, Anda menggunakan `{{query}}`. Artinya, jangan gunakan elemen root `$.` untuk memulai ekspresi Anda.
+ Pada `test_orchestrator.yaml`, Anda menggunakan `{{query}}`.

  Jika Anda menggunakan mesin status usang, maka masuk`state_machine.json`, Anda menggunakan. `{{$.query}}`
+ Dalam perintah API, Anda menggunakan `query` atau `{{$.query}}`, tergantung pada perintahnya. Untuk informasi selengkapnya, lihat dokumentasi sebaris di. SDKs 

Tabel berikut menjelaskan operator dalam JSONPath ekspresi tipikal:


| Operator  | Deskripsi  | 
| --- |--- |
| \$1 | Elemen root. Karena nilai konteks tingkat atas untuk IDT adalah objek, Anda biasanya akan menggunakannya \$1. untuk memulai kueri Anda. | 
| .childName | Mengakses elemen anak dengan nama childName dari objek. Jika diterapkan ke array, menghasilkan array baru dengan operator ini diterapkan ke setiap elemen. Nama elemen peka huruf besar/kecil. Misalnya, kueri untuk mengakses awsRegion nilai dalam config objek adalah\$1.config.awsRegion. | 
| [start:end] | Memfilter elemen dari array, mengambil item yang dimulai dari start indeks dan naik ke end indeks, keduanya inklusif. | 
| [index1, index2, ... , indexN] | Memfilter elemen dari array, mengambil item dari hanya indeks yang ditentukan. | 
| [?(expr)] | Menyaring elemen dari array menggunakan expr ekspresi. Ekspresi ini harus mengevaluasi nilai boolean. | 

Untuk membuat ekspresi filter, gunakan sintaks berikut:

```
<jsonpath> | <value> operator <jsonpath> | <value> 
```

Dalam sintaks ini: 
+ `jsonpath`adalah JSONPath yang menggunakan sintaks JSON standar. 
+ `value` adalah setiap nilai kustom yang menggunakan sintaks JSON standar.
+ `operator` adalah salah satu dari operator berikut ini:
  + `<` (Kurang dari)
  + `<=` (Kurang dari atau sama dengan)
  + `==` (Sama dengan)

    Jika nilai JSONPath atau dalam ekspresi Anda adalah nilai array, boolean, atau objek, maka ini adalah satu-satunya operator biner yang didukung yang dapat Anda gunakan.
  + `>=` (Lebih besar dari atau sama dengan)
  + `>` (Lebih besar dari)
  + `=~` (Kecocokan ekspresi reguler). Untuk menggunakan operator ini dalam ekspresi filter, nilai JSONPath or di sisi kiri ekspresi Anda harus mengevaluasi ke string dan sisi kanan harus berupa nilai pola yang mengikuti [RE2sintaks](https://github.com/google/re2/wiki/Syntax).

Anda dapat menggunakan JSONPath kueri dalam formulir \$1\$1*query*\$1\$1 sebagai string placeholder di dalam dan bidang dalam file `args` dan dalam `environmentVariables` bidang dalam `test.json` file. `environmentVariables` `suite.json` IDT melakukan pencarian konteks dan mengisi kolom dengan nilai kueri yang dievaluasi. Misalnya, di file `suite.json`, Anda dapat menggunakan string placeholder untuk menentukan nilai variabel lingkungan yang berubah dengan setiap uji kasus dan IDT akan mengisi variabel lingkungan dengan nilai yang benar untuk setiap uji kasus. Namun, ketika Anda menggunakan string placeholder di file `test.json` dan `suite.json`, pertimbangan berikut berlaku untuk kueri Anda:
+ Anda harus menuliskan setiap kejadian kunci `devicePool` dalam kueri Anda semua dengan huruf kecil. Artinya, gunakan `devicepool` sebagai gantinya
+ Untuk rangkaian, Anda hanya dapat menggunakan rangkaian string. Selain itu, rangkaian menggunakan format `item1, item2,...,itemN` non-standar. Jika rangkaian tersebut hanya berisi satu elemen, maka rangkaian itu akan diserialkan sebagai `item`, sehingga menjadikannya tidak dapat dibedakan dari kolom string. 
+ Anda tidak dapat menggunakan placeholder untuk mengambil objek dari konteks.

Karena pertimbangan ini, kami merekomendasikan bahwa bila memungkinkan, Anda menggunakan API untuk mengakses konteks dalam logika pengujian Anda dan bukan string placeholder di file `test.json` dan `suite.json`. Namun, dalam beberapa kasus mungkin lebih mudah menggunakan JSONPath placeholder untuk mengambil string tunggal untuk ditetapkan sebagai variabel lingkungan. 