

Pemberitahuan akhir dukungan: Pada 7 Oktober 2026, AWS akan menghentikan dukungan untuk. AWS IoT Greengrass Version 1 Setelah 7 Oktober 2026, Anda tidak akan lagi dapat mengakses sumber daya. AWS IoT Greengrass V1 Untuk informasi lebih lanjut, silakan kunjungi [Migrasi dari AWS IoT Greengrass Version 1](https://docs.aws.amazon.com/greengrass/v2/developerguide/migrate-from-v1.html).

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

# Menggunakan AWS IoT Device Tester untuk V1 AWS IoT Greengrass
<a name="device-tester-for-greengrass-ug"></a>

AWS IoT Device Tester (IDT) adalah kerangka pengujian yang dapat diunduh yang memungkinkan Anda memvalidasi perangkat IoT. Karena AWS IoT Greengrass Version 1 telah dipindahkan ke [mode pemeliharaan](https://docs.aws.amazon.com/greengrass/v1/developerguide/maintenance-policy.html), IDT AWS IoT Greengrass V1 tidak lagi menghasilkan laporan kualifikasi yang ditandatangani. Anda tidak akan lagi dapat memenuhi syarat AWS IoT Greengrass V1 perangkat baru untuk dicantumkan dalam [Katalog AWS Partner Perangkat](https://devices.amazonaws.com/) melalui [Program Kualifikasi AWS Perangkat](https://aws.amazon.com/partners/dqp/). Namun, Anda dapat terus menggunakan IDT AWS IoT Greengrass V1 untuk menguji perangkat Greengrass V1 Anda. [Kami menyarankan Anda menggunakan [IDT AWS IoT Greengrass V2 untuk](https://docs.aws.amazon.com/greengrass/v2/developerguide/device-tester-for-greengrass-ug.html) memenuhi syarat dan daftar perangkat Greengrass di Katalog Perangkat.AWS Partner](https://devices.amazonaws.com/)

IDT untuk AWS IoT Greengrass berjalan di komputer host Anda (Windows, macOS, atau Linux) yang terhubung ke perangkat yang akan diuji. IDT menjalankan tes dan mengelompokkan hasil. IDT juga menyediakan antarmuka baris perintah untuk mengelola proses pengujian.

## AWS IoT Greengrass suite kualifikasi
<a name="gg-qual-suite"></a>

Gunakan IDT AWS IoT Greengrass untuk memverifikasi bahwa perangkat lunak AWS IoT Greengrass Core berjalan pada perangkat keras Anda dan dapat berkomunikasi dengan perangkat keras. AWS Cloud Ini juga melakukan end-to-end tes dengan AWS IoT Core. Sebagai contoh, perangkat ini memverifikasi bahwa perangkat Anda dapat mengirim dan menerima pesan MQTT dan memprosesnya dengan benar. 

![\[Gambaran umum tentang bagaimana AWS IoT Device Tester memverifikasi bahwa perangkat lunak AWS IoT Greengrass inti berjalan pada perangkat keras Anda dan dapat berkomunikasi dengan perangkat keras. AWS Cloud\]](http://docs.aws.amazon.com/id_id/greengrass/v1/developerguide/images/devicetester_gg.png)


AWS IoT Device Tester untuk AWS IoT Greengrass mengatur pengujian menggunakan konsep *rangkaian pengujian dan kelompok* *uji*.<a name="idt-test-suites-groups"></a>
+ Rangkaian percobaan adalah kumpulan grup tes yang digunakan untuk memverifikasi bahwa perangkat bekerja dengan versi tertentu AWS IoT Greengrass.
+ Sebuah grup pengujian adalah seperangkat pengujian individu yang terkait dengan fitur tertentu, seperti deployment grup Greengrass dan pesan MQTT.

 Untuk informasi selengkapnya, lihat [Gunakan IDT untuk menjalankan suite AWS IoT Greengrass kualifikasi](idt-gg-qualification.md).

## Rangkaian pengujian khusus
<a name="custom-test-suite"></a>

<a name="idt-byotc"></a>Mulai IDT v4.0.0, IDT untuk AWS IoT Greengrass menggabungkan pengaturan konfigurasi standar dan format hasil dengan lingkungan rangkaian pengujian yang memungkinkan Anda mengembangkan rangkaian pengujian khusus untuk perangkat dan perangkat lunak perangkat Anda. Anda dapat menambahkan tes khusus untuk validasi internal Anda sendiri atau memberikannya kepada pelanggan Anda untuk verifikasi perangkat.

Cara penyusun tes mengonfigurasi rangkiaian tes kustom akan menentukan pengaturan konfigurasi yang diperlukan untuk menjalankan rangkaian tes kustom. Untuk informasi selengkapnya, lihat [Gunakan IDT untuk mengembangkan dan menjalankan rangkain tes Anda sendiri](idt-custom-tests.md).

# Versi AWS IoT Device Tester yang didukung untuk V1 AWS IoT Greengrass
<a name="dev-test-versions"></a>

Karena AWS IoT Greengrass Version 1 telah dipindahkan ke [mode pemeliharaan](https://docs.aws.amazon.com/greengrass/v1/developerguide/maintenance-policy.html), IDT AWS IoT Greengrass V1 tidak lagi menghasilkan laporan kualifikasi yang ditandatangani. Kami menyarankan Anda menggunakan [IDT untuk AWS IoT Greengrass V2](https://docs.aws.amazon.com/greengrass/v2/developerguide/device-tester-for-greengrass-ug.html). 

Untuk informasi tentang IDT untuk AWS IoT Greengrass V2, lihat [Menggunakan Penguji AWS IoT Perangkat untuk AWS IoT Greengrass V2 di Panduan AWS IoT Greengrass V2](https://docs.aws.amazon.com/greengrass/v2/developerguide/device-tester-for-greengrass-ug.html) *Pengembang*. 

**catatan**  
Anda menerima pemberitahuan saat memulai uji coba jika IDT for tidak AWS IoT Greengrass kompatibel dengan versi yang AWS IoT Greengrass Anda gunakan.

Dengan mengunduh perangkat lunak, Anda menyetujui [AWS IoT Perjanjian Lisensi Penguji Perangkat](https://docs.aws.amazon.com/greengrass/latest/developerguide/idt-license.html).



## Versi IDT yang tidak didukung untuk for AWS IoT Greengrass
<a name="idt-unsupported-versions"></a>

Topik ini mencantumkan versi IDT yang tidak didukung untuk. AWS IoT Greengrass Versi yang tidak didukung tidak menerima perbaikan bug atau pembaruan. Untuk informasi selengkapnya, lihat [Kebijakan Support untuk AWS IoT Device Tester untuk AWS IoT Greengrass V1](idt-support-policy.md).

**IDT v4.4.1 untuk AWS IoT Greengrass versi v1.11.6, v1.10.5**     
Catatan rilis:  
+ Memungkinkan Anda memvalidasi dan memenuhi syarat perangkat yang menjalankan perangkat lunak AWS IoT Greengrass inti v1.11.6 dan v1.10.5.
+ Berisi perbaikan bug minor.  
Versi rangkaian tes:    
`GGQ_1.3.1`  
+ Dirilis 2021.12.20

**IDT v4.1.0 untuk AWS IoT Greengrass versi v1.11.4, v1.10.4**     
Catatan rilis:  
+ Memungkinkan Anda memvalidasi dan memenuhi syarat perangkat yang menjalankan perangkat lunak AWS IoT Greengrass inti v1.11.4 dan v1.10.4.
+ Memperbaiki masalah yang menyebabkan log yang ditampilkan selama uji coba menggunakan tag berlebihan.  
Versi suite pengujian:    
`GGQ_1.3.0`  
+ Dirilis 2021.06.23
+ Menambahkan percobaan ulang untuk panggilan API ke Lambda, IAM, AWS STS dan untuk meningkatkan penanganan masalah pelambatan atau server.
+ Menambahkan support untuk Python 3.8 untuk kasus uji ML dan Docker.

**IDT v4.0.2 untuk AWS IoT Greengrass versi v1.11.1, v1.11.0, v1.10.3**   
Catatan rilis:  
+ Memperbaiki masalah yang menyebabkan IDT untuk menutupi kesalahan Hardware Security Integration (HSI).
+ Memungkinkan Anda mengembangkan dan menjalankan rangkaian pengujian kustom Anda menggunakan AWS IoT Device Tester untuk AWS IoT Greengrass. Untuk informasi selengkapnya, lihat [Gunakan IDT untuk mengembangkan dan menjalankan rangkain tes Anda sendiri](idt-custom-tests.md).
+ Menyediakan kode aplikasi IDT yang ditandatangani untuk macOS dan Windows. Di macOS, jika pesan peringatan keamanan ditampilkan, Anda mungkin harus memberikan pengecualian keamanan untuk IDT. Untuk informasi selengkapnya, lihat [Pengecualian keamanan di macOS](idt-troubleshooting.md#macos-notarization-exception).
AWS IoT Greengrass tidak menyediakan Dockerfile atau gambar Docker untuk versi 1.11.1 dari perangkat lunak inti. AWS IoT Greengrass Untuk menguji kualifikasi Docker di perangkat, gunakan versi sebelumnya AWS IoT Greengrass perangkat lunak core.
 

**IDT v3.2.0 untuk AWS IoT Greengrass versi v1.11.0, v1.10.1, v1.10.0**  
Catatan rilis:  
+ Secara default, IDT hanya menjalankan pengujian yang diperlukan untuk kualifikasi. Untuk memenuhi syarat untuk fitur tambahan, Anda dapat memodifikasi [`device.json`](set-config.md#device-config) file.
+ Ditambahkan nomor port di `device.json` yang dapat Anda konfigurasikan untuk koneksi SSH.
+ Docker hanya mendukung [pengelola pengaliran](stream-manager.md) dan machine learning (ML) tanpa kontainerisasi. Kontainer, Docker, dan Hardware Security Integration (HSI) tidak tersedia untuk perangkat Docker.
+ Kami gabungkan `device-ml.json` dan `device-hsm.json` ke `device.json`.
 

**IDT v3.1.3 untuk AWS IoT Greengrass versi: v1.10.x, v1.9.x, v1.8.x**  
Catatan rilis:  
+ Ditambahkan dukungan untuk kualifikasi fitur HTML untuk AWS IoT Greengrass v1.10.x dan v1.9.x. Anda sekarang dapat menggunakan IDT untuk memvalidasi bahwa perangkat Anda dapat melakukan infrensi ML lokal dengan model yang disimpan dan dilatih di cloud.
+ Ditambahkan `--stop-on-first-failure` untuk `run-suite` perintah. Anda dapat menggunakan opsi ini untuk mengkonfigurasi IDT untuk berhenti berjalan pada kegagalan pertama. Kami merekomendasikan menggunakan opsi ini selama tahap debugging pada tingkat grup uji.
+ Ditambahkan cek drift clock untuk pengujian MQTT untuk memastikan bahwa perangkat yang diuji menggunakan waktu sistem yang benar. Waktu yang digunakan harus berada dalam rentang waktu yang dapat diterima.
+ Ditambahkan `--update-idt` untuk `run-suite` perintah. Anda dapat menggunakan opsi ini untuk mengatur respons untuk prompt untuk update IDT.
+ Ditambahkan `--update-managed-policy` untuk `run-suite` perintah. Anda dapat menggunakan opsi ini untuk mengatur respons untuk prompt untuk update kebijakan terkelola.
+ Ditambahkan perbaikan bug untuk pembaruan otomatis dari versi rangkaian pengujian IDT. Perbaikan memastikan bahwa IDT dapat menjalankan suite pengujian terbaru yang tersedia untuk versi AWS IoT Greengrass Anda.
 

**IDT v3.0.1 untuk AWS IoT Greengrass**  
Catatan rilis:  
+ Ditambahkan dukungan untuk AWS IoT Greengrass v1.10.1.
+ Pembaruan otomatis IDTuji suite versi. IDT dapat mengunduh suite pengujian terbaru yang tersedia untuk AWS IoT Greengrass versi Anda. Dengan fitur ini:
  + Suite pengujian diversi menggunakan `major.minor.patch` format. Versi suite pengujian awal adalah `GGQ_1.0.0`.
  + Anda dapat mengunduh suite pengujian baru interaktif di antarmuka baris perintah atau mengatur `upgrade-test-suite` bendera ketika Anda mulai IDT.

  Untuk informasi selengkapnya, lihat [Versi rangkaian pengujian](idt-gg-qualification.md#idt-test-suite-versions).
+ Ditambahkan `list-supported-products`. Anda dapat menggunakan perintah ini untuk daftar AWS IoT Greengrass dan pengujian suite versi yang didukung oleh versi diinstal IDT.
+ Ditambahkan `list-test-cases`. Anda dapat menggunakan perintah ini untuk daftar kasus pengujian yang tersedia dalam grup pengujian.
+ Ditambahkan `test-id` untuk `run-suite` perintah. Anda dapat menggunakan opsi ini untuk menjalankan kasus pengujian individu dalam grup pengujian.
 

**IDT v2.3.0 untuk AWS IoT Greengrass v1.10, v1.9.x, dan v1.8.x**  
Saat menguji pada perangkat fisik, AWS IoT Greengrass v1.10, v1.9.x, dan v1.8.x didukung.  
Saat menguji dalam wadah Docker, AWS IoT Greengrass v1.10 dan v1.9.x didukung.  
Catatan rilis:  
+ Ditambahkan support untuk [Berjalan AWS IoT Greengrass di wadah Docker](run-gg-in-docker-container.md). Sekarang Anda dapat menggunakan IDT untuk memenuhi syarat dan memvalidasi bahwa perangkat Anda dapat berjalan AWS IoT Greengrass di wadah Docker.
+ Menambahkan [kebijakan AWS terkelola](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_managed-vs-inline.html#aws-managed-policies) (`AWSIoTDeviceTesterForGreengrassFullAccess`) yang menentukan izin yang diperlukan untuk menjalankan AWS IoT Device Tester. Jika rilis baru memerlukan izin tambahan, AWS tambahkan ke kebijakan terkelola ini sehingga Anda tidak perlu memperbarui izin IAM Anda.
+ Pemeriksaan diperkenalkan untuk memvalidasi bahwa lingkungan Anda (misalnya, konektivitas perangkat dan konektivitas internet) diatur dengan benar sebelum Anda menjalankan kasus pengujian.
+ Peningkatan checker dependensi Greengrass di IDT untuk membuatnya lebih fleksibel saat memeriksa libc pada perangkat.
 

**IDT v2.2.0 untuk AWS IoT Greengrass v1.10, v1.9.x, dan v1.8.x**  
Catatan rilis:  
+ Ditambahkan dukungan untuk AWS IoT Greengrass v1.10.
+ Ditambahkan support untuk [konektor](docker-app-connector.md) deployment aplikasi Greengrass Docker.
+ Menambahkan dukungan untuk [manajer AWS IoT Greengrass aliran](stream-manager.md).
+ Menambahkan dukungan untuk AWS IoT Greengrass di Wilayah Tiongkok (Beijing).
 

**IDT v2.1.0 untuk AWS IoT Greengrass v1.9.x, v1.8.x, dan v1.7.x**  
Catatan rilis:  
+ Ditambahkan dukungan untuk AWS IoT Greengrass v1.9.4.
+ Ditambahkan dukungan untuk Linux- ARMv6l perangkat.
 

**IDT v2.0.0 untuk AWS IoT Greengrass v1.9.3, v1.9.2, v.1.9.1, v1.9.0, v1.8.4, v1.8.3, dan v1.8.2**  
Catatan rilis:  
+ Dihapus dependensi pada Python untuk perangkat yang diuji.
+ Waktu eksekusi pengujian suite dikurangi lebih dari 50 persen, yang membuat proses kualifikasi lebih cepat.
+ Ukuran yang dapat dieksekusi dikurangi lebih dari 50 persen, yang membuat pengunduhan dan pemasangan lebih cepat.
+ Peningkatan [support pengali waktu habis](idt-troubleshooting.md#test-timeout) untuk semua kasus pengujian.
+ Pesan pasca-diagnostik yang ditingkatkan untuk memecahkan masalah kesalahan dengan lebih cepat.
+ Update templat kebijakan izin yang diperlukan untuk menjalankan IDT.
+ Ditambahkan dukungan untuk AWS IoT Greengrass v1.9.3.
 

**IDT v1.3.3 untuk AWS IoT Greengrass v1.9.2, v1.9.1, v1.9.0, v1.8.3, dan v1.8.2**  
Catatan rilis:  
+ Ditambahkan support untuk Greengrass v1.9.2 dan v1.8.3.
+ Menambahkan dukungan untuk Greengrass OpenWrt.
+ Ditambahkan nama pengguna SSH dan perangkat kata sandi masuk.
+ Menambahkan perbaikan bug uji asli untuk OpenWrt - ARMv7l platform.
 

**IDT v1.2 untuk v1.8.1 AWS IoT Greengrass **  
Catatan rilis:  
+ Ditambahkan pengali waktu habis yang dapat dikonfigurasi untuk mengatasi dan memecahkan masalah waktu habis (sebagai contoh, koneksi bandwidth rendah).
 

**IDT v1.1 untuk v1.8.0 AWS IoT Greengrass **  
Catatan rilis:  
+ Menambahkan dukungan untuk Integrasi Keamanan AWS IoT Greengrass Perangkat Keras (HSI).
+ Menambahkan dukungan untuk AWS IoT Greengrass wadah dan tidak ada wadah.
+ Menambahkan pembuatan peran AWS IoT Greengrass layanan otomatis.
+ Peningkatan pembersihan sumber daya pengujian.
+ Ditambahkan laporan ringkasan eksekusi pengujian.
 

**IDT v1.1 untuk v1.7.1 AWS IoT Greengrass **  
Catatan rilis:  
+ Menambahkan dukungan untuk Integrasi Keamanan AWS IoT Greengrass Perangkat Keras (HSI).
+ Menambahkan dukungan untuk AWS IoT Greengrass wadah dan tidak ada wadah.
+ Menambahkan pembuatan peran AWS IoT Greengrass layanan otomatis.
+ Peningkatan pembersihan sumber daya pengujian.
+ Ditambahkan laporan ringkasan eksekusi pengujian.
 

**IDT v1.0 untuk v1.6.1 AWS IoT Greengrass **  
Catatan rilis:  
+ Menambahkan perbaikan bug uji OTA untuk kompatibilitas AWS IoT Greengrass versi masa depan.
[Jika Anda menggunakan IDT v1.0 untuk AWS IoT Greengrass v1.6.1, Anda harus membuat peran layanan Greengrass.](service-role.md) Dalam versi yang lebih baru, IDT membuat peran layanan untuk Anda.

# Gunakan IDT untuk menjalankan suite AWS IoT Greengrass kualifikasi
<a name="idt-gg-qualification"></a>

Anda dapat menggunakan AWS IoT Device Tester (IDT) AWS IoT Greengrass untuk memverifikasi bahwa perangkat lunak AWS IoT Greengrass Core berjalan pada perangkat keras Anda dan dapat berkomunikasi dengan perangkat keras. AWS Cloud Ini juga melakukan end-to-end tes dengan AWS IoT Core. Sebagai contoh, perangkat ini memverifikasi bahwa perangkat Anda dapat mengirim dan menerima pesan MQTT dan memprosesnya dengan benar. 

Karena AWS IoT Greengrass Version 1 telah dipindahkan ke [mode pemeliharaan](https://docs.aws.amazon.com/greengrass/v1/developerguide/maintenance-policy.html), IDT AWS IoT Greengrass V1 tidak lagi menghasilkan laporan kualifikasi yang ditandatangani. Jika Anda ingin menambahkan perangkat keras ke Katalog AWS Partner Perangkat, jalankan rangkaian AWS IoT Greengrass V2 kualifikasi untuk menghasilkan laporan pengujian yang dapat Anda kirimkan AWS IoT. Untuk informasi selengkapnya, lihat [Program Kualifikasi AWS Perangkat](https://aws.amazon.com/partners/dqp/) dan [versi IDT yang didukung untuk AWS IoT Greengrass V2](https://docs.aws.amazon.com/greengrass/v2/developerguide/dev-test-versions.html). 

Selain perangkat pengujian, IDT untuk AWS IoT Greengrass menciptakan sumber daya (misalnya, AWS IoT hal-hal, AWS IoT Greengrass grup, fungsi Lambda, dan sebagainya) di Akun AWS Anda untuk memfasilitasi proses kualifikasi.

<a name="idt-aws-credentials"></a>Untuk membuat sumber daya ini, IDT for AWS IoT Greengrass menggunakan AWS kredensional yang dikonfigurasi dalam `config.json` file untuk melakukan panggilan API atas nama Anda. Sumber daya ini disediakan pada berbagai waktu selama tes.

Saat Anda menggunakan IDT AWS IoT Greengrass untuk menjalankan rangkaian AWS IoT Greengrass kualifikasi, IDT melakukan langkah-langkah berikut:

1. Memuat dan memvalidasi perangkat dan konfigurasi kredensial Anda.

1. Melakukan tes yang dipilih dengan sumber daya lokal dan cloud yang diperlukan.

1. Membersihkan sumber daya lokal dan cloud.

1. Menghasilkan laporan tes yang menunjukkan jika perangkat Anda lulus tes yang diperlukan untuk kualifikasi.

## Versi rangkaian pengujian
<a name="idt-test-suite-versions"></a>

IDT untuk AWS IoT Greengrass mengatur pengujian ke dalam rangkaian pengujian dan grup pengujian.<a name="idt-test-suites-groups"></a>
+ Rangkaian percobaan adalah kumpulan grup tes yang digunakan untuk memverifikasi bahwa perangkat bekerja dengan versi tertentu AWS IoT Greengrass.
+ Sebuah grup tes adalah seperangkat tes individu yang terkait dengan fitur tertentu, seperti deployment grup Greengrass dan pesan MQTT.

Dimulai di IDT v3.0.0, test suite diversi menggunakan `major.minor.patch` format, sebagai contoh `GGQ_1.0.0`. Ketika Anda mengunduh IDT, paket termasuk versi test suite terbaru.

**penting**  
IDT mendukung tiga versi rangkaian pengujian terbaru untuk kualifikasi perangkat. Untuk informasi selengkapnya, lihat [Kebijakan Support untuk AWS IoT Device Tester untuk AWS IoT Greengrass V1](idt-support-policy.md).  
Anda dapat `list-supported-products` menjalankan daftar versi AWS IoT Greengrass dan test suite yang didukung oleh versi IDT Anda saat ini. Pengujian dari versi rangkaian uji yang tidak didukung tidak valid untuk kualifikasi perangkat. IDT tidak mencetak laporan kualifikasi untuk versi yang tidak didukung.

### Update untuk pengaturan konfigurasi IDT
<a name="idt-test-suite-versions-config-changes"></a>

Tes baru mungkin memperkenalkan pengaturan konfigurasi IDT baru.
+ Jika pengaturan opsional, IDT terus menjalankan tes.
+ Jika pengaturan diperlukan, IDT memberitahu Anda dan berhenti berjalan. Setelah Anda mengkonfigurasi pengaturan, restart uji coba.

  Pengaturan konfigurasi terletak di `<device-tester-extract-location>/configs` folder. Untuk informasi selengkapnya, lihat [Konfigurasikan pengaturan IDT untuk menjalankan rangkaian AWS IoT Greengrass kualifikasi](set-config.md).

Jika versi suite tes di-update menambahkan pengaturan konfigurasi, IDT membuat salinan file konfigurasi asli di `<device-tester-extract-location>/configs`.

## Deskripsi grup tes
<a name="dt-test-groups"></a>

------
#### [ IDT v2.0.0 and later ]

**Kelompok Uji yang Diperlukan untuk Kualifikasi Inti**  
Grup pengujian ini diperlukan untuk memenuhi syarat AWS IoT Greengrass perangkat Anda untuk Katalog AWS Partner Perangkat.    
AWS IoT Greengrass Dependensi Inti  
Memvalidasi bahwa perangkat Anda memenuhi semua persyaratan perangkat lunak dan perangkat keras untuk perangkat lunak AWS IoT Greengrass Core.  
Tes `Software Packages Dependencies` kasus dalam grup tes ini tidak berlaku ketika pengetesan di dalam [kontainer Docker](docker-config-setup.md).  
Deployment  
Memvalidasi bahwa fungsi Lambda dapat digunakan pada perangkat Anda.  
MQTT  
Memverifikasi fungsionalitas router AWS IoT Greengrass pesan dengan memeriksa komunikasi lokal antara inti Greengrass dan perangkat klien, yang merupakan perangkat IoT lokal.  
Over-the-Air (OTA)  
Memvalidasi bahwa perangkat Anda berhasil melakukan pembaruan OTA pada perangkat lunak AWS IoT Greengrass Core.  
<a name="n-a-docker"></a>Grup tes ini tidak berlaku ketika pengetesan di [kontainer Docker](docker-config-setup.md).  
Versi  
Memeriksa apakah versi yang AWS IoT Greengrass disediakan kompatibel dengan versi AWS IoT Device Tester yang Anda gunakan.

**Grup Uji Opsional**  
Grup uji ini bersifat opsional. Jika Anda memilih untuk memenuhi syarat untuk pengujian opsional, perangkat Anda terdaftar dengan kemampuan tambahan di Katalog AWS Partner Perangkat.    
Dependensi Kontainer  
<a name="description-container"></a>Memvalidasi bahwa perangkat memenuhi semua persyaratan perangkat lunak dan perangkat keras untuk menjalankan fungsi Lambda dalam mode kontainer pada core Greengrass.  
<a name="n-a-docker"></a>Grup tes ini tidak berlaku ketika pengetesan di [kontainer Docker](docker-config-setup.md).  
Kontainer Deployment  
<a name="description-deployment-container"></a>Memvalidasi bahwa fungsi Lambda dapat digunakan pada perangkat dan berjalan dalam mode kontainer pada Greengrass core.  
<a name="n-a-docker"></a>Grup tes ini tidak berlaku ketika pengetesan di [kontainer Docker](docker-config-setup.md).  
Docker Dependensi (Didukung untuk IDT v2.2.0 dan yang lebih baru)  
<a name="description-docker"></a>Memvalidasi bahwa perangkat memenuhi semua dependensi teknis yang diperlukan untuk menggunakan konektor deployment aplikasi Greengrass Docker untuk menjalankan kontainer  
<a name="n-a-docker"></a>Grup tes ini tidak berlaku ketika pengetesan di [kontainer Docker](docker-config-setup.md).  
Integrasi Keamanan Perangkat Keras (HSI)  
<a name="description-hsi"></a>Memverifikasi bahwa pustaka bersama HSI yang disediakan dapat berinteraksi dengan modul keamanan perangkat keras (HSM) dan mengimplementasikan PKCS \$111 yang diperlukan dengan benar. APIs HSM dan perpustakaan bersama harus dapat menandatangani CSR, melakukan operasi TLS, dan memberikan panjang kunci yang benar dan algoritma kunci publik.  
Stream Manager Dependensi (Didukung untuk IDT v2.2.0 dan yang lebih baru)  
<a name="description-sm"></a>Memvalidasi bahwa perangkat memenuhi semua dependensi teknis yang diperlukan untuk menjalankan AWS IoT Greengrass pengelola aliran.  
Dependensi Machine Learning (Didukung untuk IDT v3.1.0 dan yang lebih baru)  
<a name="description-ml"></a>Memvalidasi bahwa perangkat memenuhi semua dependensi teknis yang diperlukan untuk melakukan inferensi ML secara lokal.  
Pengujian Inferensi Machine Learning (Didukung untuk IDT v3.1.0 dan versi lebih baru)  
<a name="description-mlit"></a>Memvalidasi bahwa inferensi ML dapat dilakukan pada perangkat yang diberikan dites. Untuk informasi selengkapnya, lihat [Opsional: Mengonfigurasi perangkat Anda untuk kualifikasi ML](idt-ml-qualification.md).  
Tes Kontainer Inferensi Machine Learning (Didukung untuk IDT v3.1.0 dan yang lebih baru)  
<a name="description-mlict"></a>Memvalidasi bahwa inferensi ML dapat dilakukan pada perangkat tertentu yang sedang dites dan dijalankan dalam mode kontainer pada Greengrass core. Untuk informasi selengkapnya, lihat [Opsional: Mengonfigurasi perangkat Anda untuk kualifikasi ML](idt-ml-qualification.md).

------
#### [ IDT v1.3.3 and earlier ]

**Kelompok Uji yang Diperlukan untuk Kualifikasi Inti**  
Pengujian ini diperlukan untuk memenuhi syarat AWS IoT Greengrass perangkat Anda untuk Katalog AWS Partner Perangkat.    
AWS IoT Greengrass Dependensi Inti  
Memvalidasi bahwa perangkat Anda memenuhi semua persyaratan perangkat lunak dan perangkat keras untuk perangkat lunak AWS IoT Greengrass Core.  
Kombinasi (Interaksi Keamanan Perangkat)  
Memverifikasi fungsionalitas certificate manager perangkat dan deteksi IP pada perangkat Greengrass core dengan mengubah informasi konektivitas pada grup Greengrass di cloud. Kelompok uji memutar sertifikat AWS IoT Greengrass server dan memverifikasi yang AWS IoT Greengrass memungkinkan koneksi.  
Deployment (Diperlukan untuk IDT v1.2 dan sebelumnya)  
Memvalidasi bahwa fungsi Lambda dapat digunakan pada perangkat Anda.  
Device Certificate Manager (DCM)  
Memverifikasi bahwa manajer sertifikat AWS IoT Greengrass perangkat dapat menghasilkan sertifikat server saat startup dan memutar sertifikat jika hampir kedaluwarsa.  
Deteksi IP (IPD)  
Memverifikasi bahwa informasi konektivitas core di-update ketika ada perubahan alamat IP dalam perangkat Greengrass core. Untuk informasi selengkapnya, lihat [Aktifkan deteksi IP otomatis](gg-core.md#ip-auto-detect).  
Pencatatan log  
Memverifikasi bahwa layanan AWS IoT Greengrass logging dapat menulis ke file log menggunakan fungsi Lambda pengguna yang ditulis dengan Python.  
MQTT  
Memverifikasi fungsionalitas router AWS IoT Greengrass pesan dengan mengirim pesan pada topik yang dirutekan ke dua fungsi Lambda.   
Asli  
Memverifikasi yang AWS IoT Greengrass dapat menjalankan fungsi Lambda asli (dikompilasi).  
Over-the-Air (OTA)  
Memvalidasi bahwa perangkat Anda berhasil melakukan pembaruan OTA pada perangkat lunak AWS IoT Greengrass Core.  
penetrasi  
Memvalidasi bahwa perangkat lunak AWS IoT Greengrass Core gagal untuk memulai jika perlindungan hard link/soft link dan [seccomp](https://www.kernel.org/doc/Documentation/prctl/seccomp_filter.txt) tidak diaktifkan. Hal ini juga digunakan untuk memverifikasi fitur terkait keamanan lainnya.  
Bayangan  
Memverifikasi fungsi bayangan lokal dan bayangan cloud-syncing.  
Spooler  
Memvalidasi bahwa pesan MQTT antri dengan konfigurasi spooler default.  
Layanan Bursa Token (TES)  
Verifikasi yang AWS IoT Greengrass dapat menukar sertifikat intinya dengan AWS kredensi yang valid.  
Versi  
Memeriksa apakah versi yang AWS IoT Greengrass disediakan kompatibel dengan versi AWS IoT Device Tester yang Anda gunakan.

**Grup Uji Opsional**  
Tes ini opsional. Jika Anda memilih untuk memenuhi syarat untuk pengujian opsional, perangkat Anda terdaftar dengan kemampuan tambahan di Katalog AWS Partner Perangkat.    
Dependensi Kontainer  
Cek bahwa perangkat memenuhi semua dependensi yang diperlukan untuk menjalankan fungsi Lambda dalam mode kontainer.  
Integrasi Keamanan Perangkat Keras (HSI)  
Memverifikasi bahwa pustaka bersama HSI yang disediakan dapat berinteraksi dengan modul keamanan perangkat keras (HSM) dan mengimplementasikan PKCS \$111 yang diperlukan dengan benar. APIs HSM dan perpustakaan bersama harus dapat menandatangani CSR, melakukan operasi TLS, dan memberikan panjang kunci yang benar dan algoritma kunci publik.  
Akses Sumber Daya Lokal  
Memverifikasi fitur akses sumber daya lokal (LRA) AWS IoT Greengrass dengan menyediakan akses ke file dan direktori lokal yang dimiliki oleh berbagai pengguna dan grup Linux ke fungsi Lambda dalam wadah melalui LRA. AWS IoT Greengrass APIs Fungsi Lambda harus diizinkan atau ditolak akses ke sumber daya lokal berdasarkan konfigurasi akses sumber daya lokal.  
Jaringan  
Memverifikasi bahwa koneksi soket dapat dibentuk dari fungsi Lambda. Koneksi soket ini harus diizinkan atau ditolak berdasarkan konfigurasi Greengrass core.

------

# Prasyarat untuk menjalankan suite kualifikasi AWS IoT Greengrass
<a name="dev-tst-prereqs"></a>

Bagian ini menjelaskan prasyarat untuk menggunakan AWS IoT Device Tester (IDT) untuk AWS IoT Greengrass menjalankan rangkaian kualifikasi. AWS IoT Greengrass 

## Unduh versi terbaru AWS IoT Device Tester untuk AWS IoT Greengrass
<a name="install-dev-tst-gg"></a>

Unduh [versi terbaru](dev-test-versions.md) IDT dan mengekstraksi perangkat lunak ke lokasi pada sistem file Anda di mana Anda telah membaca dan menulis izin. 

**catatan**  
<a name="unzip-package-to-local-drive"></a>IDT tidak mendukung yang sedang dijalankan oleh beberapa pengguna dari lokasi bersama, seperti direktori NFS atau folder bersama jaringan Windows. Kami sarankan Anda mengekstraksi paket IDT ke drive lokal dan menjalankan biner IDT pada workstation lokal Anda.  
Windows memiliki batasan panjang jalur 260 karakter. Jika Anda menggunakan Windows, ekstraksi IDT ke direktori root seperti `C:\ ` atau `D:\` agar jalur Anda tetap di bawah batas 260 karakter.

## Buat dan konfigurasikan Akun AWS
<a name="config-aws-account-for-idt"></a>

Sebelum Anda dapat menggunakan IDT untuk AWS IoT Greengrass, Anda harus melakukan langkah-langkah berikut:

1. [Buat sebuah Akun AWS.]() Jika Anda sudah memiliki Akun AWS, lewati ke langkah 2.

1. [Konfigurasikan izin untuk IDT.]()

Izin akun ini memungkinkan IDT mengakses AWS layanan dan membuat AWS sumber daya, seperti AWS IoT hal-hal, grup Greengrass, dan fungsi Lambda, atas nama Anda.

<a name="idt-aws-credentials"></a>Untuk membuat sumber daya ini, IDT untuk AWS IoT Greengrass menggunakan AWS kredensil yang dikonfigurasi dalam `config.json` file untuk melakukan panggilan API atas nama Anda. Sumber daya ini disediakan pada berbagai waktu selama tes.

**catatan**  <a name="free-tier-tests"></a>
Meskipun sebagian besar tes memenuhi syarat untuk [Amazon Web Services Tingkat Gratis](https://aws.amazon.com/free), Anda harus menyediakan kartu kredit saat mendaftar Akun AWS. Untuk informasi selengkapnya, lihat [Mengapa saya memerlukan metode pembayaran jika akun saya dilindungi oleh Tingkat Gratis?](https://aws.amazon.com/premiumsupport/knowledge-center/free-tier-payment-method/).

### Langkah 1: Buat Akun AWS
<a name="create-aws-account-for-idt"></a>

Pada langkah ini, buat dan konfigurasikan Akun AWS. Jika Anda sudah memiliki Akun AWS, lompat ke[Langkah 2: Konfigurasikan izin untuk IDT](#configure-idt-permissions).

#### Mendaftar untuk Akun AWS
<a name="sign-up-for-aws"></a>

Jika Anda tidak memiliki Akun AWS, selesaikan langkah-langkah berikut untuk membuatnya.

**Untuk mendaftar untuk Akun AWS**

1. Buka [https://portal.aws.amazon.com/billing/pendaftaran.](https://portal.aws.amazon.com/billing/signup)

1. Ikuti petunjuk online.

   Bagian dari prosedur pendaftaran melibatkan menerima panggilan telepon atau pesan teks dan memasukkan kode verifikasi pada keypad telepon.

   Saat Anda mendaftar untuk sebuah Akun AWS, sebuah *Pengguna root akun AWS*dibuat. Pengguna root memiliki akses ke semua Layanan AWS dan sumber daya di akun. Sebagai praktik keamanan terbaik, tetapkan akses administratif ke pengguna, dan gunakan hanya pengguna root untuk melakukan [tugas yang memerlukan akses pengguna root](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_root-user.html#root-user-tasks).

AWS mengirimi Anda email konfirmasi setelah proses pendaftaran selesai. Kapan saja, Anda dapat melihat aktivitas akun Anda saat ini dan mengelola akun Anda dengan masuk [https://aws.amazon.com.rproxy.govskope.cake/](https://aws.amazon.com/) dan memilih **Akun Saya**.

#### Buat pengguna dengan akses administratif
<a name="create-an-admin"></a>

Setelah Anda mendaftar Akun AWS, amankan Pengguna root akun AWS, aktifkan AWS IAM Identity Center, dan buat pengguna administratif sehingga Anda tidak menggunakan pengguna root untuk tugas sehari-hari.

**Amankan Anda Pengguna root akun AWS**

1.  Masuk ke [Konsol Manajemen AWS](https://console.aws.amazon.com/)sebagai pemilik akun dengan memilih **pengguna Root** dan memasukkan alamat Akun AWS email Anda. Di laman berikutnya, masukkan kata sandi.

   Untuk bantuan masuk dengan menggunakan pengguna root, lihat [Masuk sebagai pengguna root](https://docs.aws.amazon.com/signin/latest/userguide/console-sign-in-tutorials.html#introduction-to-root-user-sign-in-tutorial) di *AWS Sign-In Panduan Pengguna*.

1. Mengaktifkan autentikasi multi-faktor (MFA) untuk pengguna root Anda.

   Untuk petunjuk, lihat [Mengaktifkan perangkat MFA virtual untuk pengguna Akun AWS root (konsol) Anda](https://docs.aws.amazon.com/IAM/latest/UserGuide/enable-virt-mfa-for-root.html) di Panduan Pengguna *IAM*.

**Buat pengguna dengan akses administratif**

1. Aktifkan Pusat Identitas IAM.

   Untuk mendapatkan petunjuk, silakan lihat [Mengaktifkan AWS IAM Identity Center](https://docs.aws.amazon.com//singlesignon/latest/userguide/get-set-up-for-idc.html) di *Panduan Pengguna AWS IAM Identity Center *.

1. Di Pusat Identitas IAM, berikan akses administratif ke pengguna.

   Untuk tutorial tentang menggunakan Direktori Pusat Identitas IAM sebagai sumber identitas Anda, lihat [Mengkonfigurasi akses pengguna dengan default Direktori Pusat Identitas IAM](https://docs.aws.amazon.com//singlesignon/latest/userguide/quick-start-default-idc.html) di *Panduan AWS IAM Identity Center Pengguna*.

**Masuk sebagai pengguna dengan akses administratif**
+ Untuk masuk dengan pengguna Pusat Identitas IAM, gunakan URL masuk yang dikirim ke alamat email saat Anda membuat pengguna Pusat Identitas IAM.

  Untuk bantuan masuk menggunakan pengguna Pusat Identitas IAM, lihat [Masuk ke portal AWS akses](https://docs.aws.amazon.com/signin/latest/userguide/iam-id-center-sign-in-tutorial.html) di *Panduan AWS Sign-In Pengguna*.

**Tetapkan akses ke pengguna tambahan**

1. Di Pusat Identitas IAM, buat set izin yang mengikuti praktik terbaik menerapkan izin hak istimewa paling sedikit.

   Untuk petunjuknya, lihat [Membuat set izin](https://docs.aws.amazon.com//singlesignon/latest/userguide/get-started-create-a-permission-set.html) di *Panduan AWS IAM Identity Center Pengguna*.

1. Tetapkan pengguna ke grup, lalu tetapkan akses masuk tunggal ke grup.

   Untuk petunjuk, lihat [Menambahkan grup](https://docs.aws.amazon.com//singlesignon/latest/userguide/addgroups.html) di *Panduan AWS IAM Identity Center Pengguna*.

### Langkah 2: Konfigurasikan izin untuk IDT
<a name="configure-idt-permissions"></a>

Pada langkah ini, konfigurasikan izin yang digunakan IDT untuk menjalankan pengujian dan mengumpulkan data AWS IoT Greengrass penggunaan IDT. Anda dapat menggunakan Konsol Manajemen AWS or AWS Command Line Interface (AWS CLI) untuk membuat kebijakan IAM dan pengguna pengujian untuk IDT, lalu melampirkan kebijakan ke pengguna. Jika Anda telah membuat pengguna percobaan untuk IDT, lewati ke [Konfigurasikan perangkat Anda untuk menjalankan tes IDT](device-config-setup.md) atau [Opsional: Mengonfigurasi wadah Docker Anda untuk IDT untuk AWS IoT Greengrass](docker-config-setup.md).
+ [Untuk Mengkonfigurasi Izin untuk IDT (Konsol)](#configure-idt-permissions-console)
+ [Untuk Mengkonfigurasi Izin untuk IDT ()AWS CLI](#configure-idt-permissions-cli)<a name="configure-idt-permissions-console"></a>

**Untuk mengonfigurasi izin untuk IDT (konsol)**

Ikuti langkah berikut untuk menggunakan konsol untuk mengonfigurasi izin untuk IDT untuk AWS IoT Greengrass.

1. Masuklah ke [konsol IAM](https://console.aws.amazon.com/iam).

1. Buat kebijakan yang dikelola pelanggan yang memberikan izin untuk membuat peran dengan izin tertentu. 

   1. Pada panel navigasi, pilih **Kebijakan**, lalu pilih **Buat kebijakan**.

   1. Pada tab **JSON** ini, ganti konten placeholder dengan kebijakan berikut.

------
#### [ JSON ]

****  

      ```
      {
          "Version":"2012-10-17",		 	 	 
          "Statement": [
              {
                  "Sid": "ManageRolePoliciesForIDTGreengrass",
                  "Effect": "Allow",
                  "Action": [
                      "iam:DetachRolePolicy",
                      "iam:AttachRolePolicy"
                  ],
                  "Resource": [
                      "arn:aws:iam::*:role/idt-*",
                      "arn:aws:iam::*:role/GreengrassServiceRole"
                  ],
                  "Condition": {
                      "ArnEquals": {
                          "iam:PolicyARN": [
                              "arn:aws:iam::aws:policy/service-role/AWSGreengrassResourceAccessRolePolicy",
                              "arn:aws:iam::aws:policy/service-role/GreengrassOTAUpdateArtifactAccess",
                              "arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole"
                          ]
                      }
                  }
              },
              {
                  "Sid": "ManageRolesForIDTGreengrass",
                  "Effect": "Allow",
                  "Action": [
                      "iam:CreateRole",
                      "iam:DeleteRole",
                      "iam:PassRole",
                      "iam:GetRole"
                  ],
                  "Resource": [
                    "arn:aws:iam::123456789012:role/idt-*",
                    "arn:aws:iam::123456789012:role/GreengrassServiceRole"
                  ]
              }
          ]
      }
      ```

------
**penting**  <a name="policy-grants-role-perms"></a>
Kebijakan berikut memberikan izin untuk membuat dan mengelola peran yang diperlukan oleh IDT untuk AWS IoT Greengrass. Ini termasuk izin untuk melampirkan kebijakan AWS terkelola berikut:  
[AWSGreengrassResourceAccessRolePolicy](https://console.aws.amazon.com/iam/home#/policies/arn:aws:iam::aws:policy/service-role/AWSGreengrassResourceAccessRolePolicy)
[Greengrass OTAUpdate ArtifactAccess](https://console.aws.amazon.com/iam/home#/policies/arn:aws:iam::aws:policy/service-role/GreengrassOTAUpdateArtifactAccess)
[AWSLambdaBasicExecutionRole](https://console.aws.amazon.com/iam/home#/policies/arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole)

   1. Pilih **Berikutnya: Tanda**.

   1. Pilih **Berikutnya: Tinjau**.

   1. Untuk **Nama**, masukkan **IDTGreengrassIAMPermissions**. Di bawah **Ringkasan**, tinjau izin yang diberikan oleh kebijakan Anda.

   1. Pilih **Buat kebijakan**.

1. Buat pengguna IAM dan lampirkan izin yang diperlukan oleh IDT untuk AWS IoT Greengrass.

   1. Buat pengguna IAM. Ikuti langkah 1 hingga 5 di [Membuat pengguna IAM (konsol)](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_users_create.html#id_users_create_console) di *Panduan Pengguna IAM*.

   1. Lampirkan izin untuk pengguna IAM Anda:

      1. Pada halaman **Setel izin**, pilih **Lampirkan kebijakan yang ada secara langsung**.

      1. Cari **IDTGreengrassIAMPermissions**kebijakan yang Anda buat di langkah sebelumnya. Pilih kotak centang.

      1. Cari **AWSIoTDeviceTesterForGreengrassFullAccess**kebijakan. Pilih kotak centang.
**catatan**  <a name="AWSIoTDeviceTesterForGreengrassFullAccess"></a>
[AWSIoTDeviceTesterForGreengrassFullAccess](https://console.aws.amazon.com/iam/home#/policies/arn:aws:iam::aws:policy/AWSIoTDeviceTesterForGreengrassFullAccess)Ini adalah kebijakan AWS terkelola yang mendefinisikan izin yang diperlukan IDT untuk membuat dan mengakses AWS sumber daya yang digunakan untuk pengujian. Untuk informasi selengkapnya, lihat [AWS kebijakan terkelola untuk AWS IoT Device Tester](#idt-managed-policy).

   1. Pilih **Selanjutnya: Menandai**.

   1. Pilih **Berikutnya: Tinjauan** untuk melihat ringkasan pilihan Anda.

   1. Pilih **Buat pengguna**.

   1. Untuk melihat kunci akses pengguna (kunci akses IDs dan kunci akses rahasia), pilih **Tampilkan** di sebelah kata sandi dan kunci akses. Untuk menyimpan kunci akses, pilih **Download.csv** lalu simpan file ke lokasi yang aman. Anda menggunakan informasi ini nanti untuk file kredensial AWS .

1. <a name="aws-account-config-next-steps"></a>Langkah berikutnya: Konfigurasikan [perangkat fisik](device-config-setup.md).

 <a name="configure-idt-permissions-cli"></a>

**Untuk mengonfigurasi izin untuk IDT (AWS CLI)**

Ikuti langkah-langkah ini untuk menggunakan AWS CLI untuk mengkonfigurasi izin untuk IDT untuk. AWS IoT Greengrass Jika Anda sudah mengonfigurasi izin di konsol, lewati ke [Konfigurasikan perangkat Anda untuk menjalankan tes IDT](device-config-setup.md) atau [Opsional: Mengonfigurasi wadah Docker Anda untuk IDT untuk AWS IoT Greengrass](docker-config-setup.md).

1. Di komputer Anda, instal dan konfigurasikan AWS CLI jika belum diinstal. Ikuti langkah-langkah di [Menginstal AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-install.html) di *Panduan Pengguna AWS Command Line Interface *.
**catatan**  
 AWS CLI Ini adalah alat open source yang dapat Anda gunakan untuk berinteraksi dengan AWS layanan dari shell baris perintah Anda.

1. Buat kebijakan yang dikelola pelanggan yang memberikan izin untuk mengelola IDT dan AWS IoT Greengrass peran.

------
#### [ Linux, macOS, or Unix ]

   ```
   aws iam create-policy --policy-name IDTGreengrassIAMPermissions --policy-document '{
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Sid": "ManageRolePoliciesForIDTGreengrass",
               "Effect": "Allow",
               "Action": [
                   "iam:DetachRolePolicy",
                   "iam:AttachRolePolicy"
               ],
               "Resource": [
                   "arn:aws:iam::*:role/idt-*",
                   "arn:aws:iam::*:role/GreengrassServiceRole"
               ],
               "Condition": {
                   "ArnEquals": {
                       "iam:PolicyARN": [
                           "arn:aws:iam::aws:policy/service-role/AWSGreengrassResourceAccessRolePolicy",
                           "arn:aws:iam::aws:policy/service-role/GreengrassOTAUpdateArtifactAccess",
                           "arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole"
                       ]
                   }
               }
           },
           {
               "Sid": "ManageRolesForIDTGreengrass",
               "Effect": "Allow",
               "Action": [
                   "iam:CreateRole",
                   "iam:DeleteRole",
                   "iam:PassRole",
                   "iam:GetRole"
               ],
               "Resource": [
                 "arn:aws:iam::123456789012:role/idt-*",
                 "arn:aws:iam::123456789012:role/GreengrassServiceRole"
               ]
           }
       ]
   }'
   ```

------
#### [ Windows command prompt ]

   ```
   aws iam create-policy --policy-name IDTGreengrassIAMPermissions --policy-document '{\"Version\": \"2012-10-17\",		 	 	  \"Statement\": [{\"Sid\": \"ManageRolePoliciesForIDTGreengrass\",\"Effect\": \"Allow\",\"Action\": [\"iam:DetachRolePolicy\", \"iam:AttachRolePolicy\"], \"Resource\": [\"arn:aws:iam::*:role/idt-*\",\"arn:aws:iam::*:role/GreengrassServiceRole\"],\"Condition\": {\"ArnEquals\": {\"iam:PolicyARN\": [\"arn:aws:iam::aws:policy/service-role/AWSGreengrassResourceAccessRolePolicy\",\"arn:aws:iam::aws:policy/service-role/GreengrassOTAUpdateArtifactAccess\",\"arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole\"]}}},{\"Sid\": \"ManageRolesForIDTGreengrass\",\"Effect\": \"Allow\",\"Action\": [\"iam:CreateRole\",\"iam:DeleteRole\", \"iam:PassRole\", \"iam:GetRole\"],\"Resource\": [\"arn:aws:iam::*:role/idt-*\",\"arn:aws:iam::*:role/GreengrassServiceRole\"]}]}'
   ```

**catatan**  
Langkah ini mencakup contoh prompt perintah Windows karena menggunakan sintaks JSON yang berbeda dari perintah terminal Linux, MacOS, atau Unix.

------

1. Buat pengguna IAM dan lampirkan izin yang diperlukan oleh IDT untuk AWS IoT Greengrass.

   1. Buat pengguna IAM. Dalam contoh pengaturan ini, pengguna diberi nama `IDTGreengrassUser`.

      ```
      aws iam create-user --user-name IDTGreengrassUser
      ```

   1. Lampirkan kebijakan `IDTGreengrassIAMPermissions` yang Anda buat pada langkah 2 untuk pengguna IAM Anda. Ganti *<account-id>* dalam perintah dengan ID Anda Akun AWS.

      ```
      aws iam attach-user-policy --user-name IDTGreengrassUser --policy-arn arn:aws:iam::<account-id>:policy/IDTGreengrassIAMPermissions
      ```

   1. Lampirkan `AWSIoTDeviceTesterForGreengrassFullAccess` kebijakan ini ke pengguna IAM.

      ```
      aws iam attach-user-policy --user-name IDTGreengrassUser --policy-arn arn:aws:iam::aws:policy/AWSIoTDeviceTesterForGreengrassFullAccess
      ```
**catatan**  <a name="AWSIoTDeviceTesterForGreengrassFullAccess"></a>
[AWSIoTDeviceTesterForGreengrassFullAccess](https://console.aws.amazon.com/iam/home#/policies/arn:aws:iam::aws:policy/AWSIoTDeviceTesterForGreengrassFullAccess)Ini adalah kebijakan AWS terkelola yang mendefinisikan izin yang diperlukan IDT untuk membuat dan mengakses AWS sumber daya yang digunakan untuk pengujian. Untuk informasi selengkapnya, lihat [AWS kebijakan terkelola untuk AWS IoT Device Tester](#idt-managed-policy).

1. Buat secret access key bagi pengguna.

   ```
   aws iam create-access-key --user-name IDTGreengrassUser
   ```

   Simpan output tersebut di lokasi yang aman. Anda menggunakan informasi ini nanti untuk mengonfigurasi file AWS kredensi Anda.

1. <a name="aws-account-config-next-steps"></a>Langkah berikutnya: Konfigurasikan [perangkat fisik](device-config-setup.md).

## AWS kebijakan terkelola untuk AWS IoT Device Tester
<a name="idt-managed-policy"></a>

Kebijakan [AWSIoTDeviceTesterForGreengrassFullAccess](https://console.aws.amazon.com/iam/home#/policies/arn:aws:iam::aws:policy/AWSIoTDeviceTesterForGreengrassFullAccess)terkelola memungkinkan IDT menjalankan operasi dan mengumpulkan metrik penggunaan. Kebijakan ini memberikan izin IDT berikut:
+ `iot-device-tester:CheckVersion`. Periksa apakah satu set AWS IoT Greengrass, test suite, dan versi IDT kompatibel.
+ `iot-device-tester:DownloadTestSuite`. Unduh tes suite.
+ `iot-device-tester:LatestIdt`. Dapatkan informasi tentang versi IDT terbaru yang tersedia untuk diunduh.
+ `iot-device-tester:SendMetrics`. Publikasikan data penggunaan yang IDT kumpulkan tentang tes Anda.
+ `iot-device-tester:SupportedVersion`. Dapatkan daftar AWS IoT Greengrass dan uji versi suite yang didukung oleh IDT. Informasi ini ditampilkan di jendela baris perintah.

# Konfigurasikan perangkat Anda untuk menjalankan tes IDT
<a name="device-config-setup"></a>

Untuk mengonfigurasi perangkat Anda, Anda harus menginstal AWS IoT Greengrass dependensi, mengonfigurasi perangkat lunak AWS IoT Greengrass Core, mengonfigurasi komputer host untuk mengakses perangkat Anda, dan mengonfigurasi izin pengguna di perangkat Anda.

## Verifikasi AWS IoT Greengrass dependensi pada perangkat yang sedang diuji
<a name="install-gg-dependencies"></a>

Sebelum IDT for AWS IoT Greengrass dapat menguji perangkat Anda, pastikan Anda telah menyiapkan perangkat seperti yang dijelaskan dalam [Memulai AWS IoT Greengrass](https://docs.aws.amazon.com/greengrass/latest/developerguide/gg-gs.html). Untuk informasi tentang platform yang didukung, lihat [Platform yang didukung](https://docs.aws.amazon.com/greengrass/latest/developerguide/what-is-gg.html#gg-platforms).

## Konfigurasikan AWS IoT Greengrass perangkat lunak
<a name="config-gg"></a>

IDT untuk AWS IoT Greengrass menguji perangkat Anda untuk kompatibilitas dengan versi tertentu. AWS IoT Greengrass IDT menyediakan dua opsi untuk pengujian AWS IoT Greengrass pada perangkat Anda:
+ Unduh dan gunakan versi [AWS IoT Greengrass perangkat lunak Core](what-is-gg.md#gg-core-download-tab). IDT menginstal perangkat lunak untuk Anda.
+ Gunakan versi perangkat lunak AWS IoT Greengrass Core yang sudah diinstal pada perangkat Anda.

**catatan**  
Setiap versi AWS IoT Greengrass memiliki versi IDT yang sesuai. Anda harus mengunduh versi IDT yang sesuai dengan versi yang AWS IoT Greengrass Anda gunakan.

Bagian berikut menjelaskan opsi ini. Anda hanya butuh mengerjakan satu.

### Opsi 1: Unduh perangkat lunak AWS IoT Greengrass Inti dan konfigurasikan AWS IoT Device Tester untuk menggunakannya
<a name="download-gg"></a>

Anda dapat mengunduh perangkat lunak AWS IoT Greengrass Inti dari halaman unduhan [Perangkat Lunak AWS IoT Greengrass Inti](what-is-gg.md#gg-core-download-tab). 

1. Temukan arsitektur dan distribusi Linux yang benar, dan kemudian memilih **Mengunduh**.

1. Salin file tar.gz ke `<device-tester-extract-location>/products/greengrass/ggc`.

**catatan**  
Jangan mengubah nama file AWS IoT Greengrass tar.gz. Jangan menempatkan beberapa file dalam direktori ini untuk sistem operasi dan arsitektur yang sama. Sebagai contoh memiliki kedua `greengrass-linux-armv7l-1.7.1.tar.gz` dan `greengrass-linux-armv7l-1.8.1.tar.gz` file dalam direktori tersebut akan menyebabkan tes gagal.

### Opsi 2: Gunakan instalasi yang ada AWS IoT Greengrass dengan AWS IoT Device Tester
<a name="existing-gg"></a>

Konfigurasikan IDT untuk menguji perangkat lunak AWS IoT Greengrass Inti yang diinstal pada perangkat Anda dengan menambahkan `greengrassLocation` atribut ke `device.json` file di `<device-tester-extract-location>/configs` folder. Contoh:

```
"greengrassLocation" : "<path-to-greengrass-on-device>"
```

Untuk informasi lebih lanjut tentang file `device.json` ini, lihat [Konfigurasikan device.json](set-config.md#device-config).

Pada perangkat Linux, lokasi default perangkat lunak AWS IoT Greengrass Core adalah`/greengrass`.

**catatan**  
Perangkat Anda harus memiliki instalasi perangkat lunak AWS IoT Greengrass Core yang belum dimulai.  
Pastikan Anda telah menambahkan `ggc_user` pengguna dan `ggc_group` pada perangkat Anda. Untuk informasi lebih lanjut, lihat [pengaturan Lingkungan untuk AWS IoT Greengrass](https://docs.aws.amazon.com/greengrass/latest/developerguide/module1.html).

## Konfigurasikan komputer host Anda untuk mengakses perangkat yang sedang diuji
<a name="configure-host"></a>

IDT berjalan pada komputer host Anda dan harus dapat menggunakan SSH untuk terhubung ke perangkat Anda. Terdapat dua pilihan untuk memungkinkan IDT untuk mendapatkan akses SSH ke perangkat Anda yang diuji:

1. Ikuti petunjuk di sini untuk membuat pasangan kunci SSH dan otorisasi kunci Anda untuk masuk ke perangkat Anda yang sedang diuji tanpa menyebutkan kata sandi.

1. Berikan nama pengguna dan kata sandi untuk setiap perangkat di file `device.json`. Untuk informasi selengkapnya, lihat [Konfigurasikan device.json](set-config.md#device-config).

Anda dapat menggunakan implementasi SSL apa pun untuk membuat kunci SSH. Petunjuk berikut menunjukkan cara menggunakan [SSH-KEYGEN](https://www.ssh.com/ssh/keygen/) atau [Pu TTYgen](https://www.ssh.com/ssh/putty/windows/puttygen) (untuk Windows). Jika Anda menggunakan implementasi SSL lain, lihat dokumentasi untuk implementasi tersebut.

IDT menggunakan kunci SSH untuk diautentikasi dengan perangkat Anda yang sedang diuji. 

**Untuk membuat kunci SSH dengan SSH-KEYGEN**

1. Buat kunci SSH

   Anda dapat menggunakan perintah **ssh-keygen** Open SSH untuk membuat pasangan kunci SSH. Jika Anda sudah memiliki pasanagn kunci SSH pada komputer host Anda, adalah praktik terbaik untuk membuat pasangan kunci SSH khusus untuk IDT. Dengan cara ini, setelah Anda menyelesaikan tes, komputer host Anda tidak dapat lagi terhubung ke perangkat Anda tanpa memasukkan kata sandi. Hal ini juga memungkinkan Anda membatasi akses ke perangkat jarak jauh hanya untuk yang membutuhkannya.
**catatan**  
Windows tidak memiliki klien SSH yang diinstal. Untuk informasi tentang cara menginstal klien SSH di Windows, lihat [Unduh Perangkat Lunak Klien SSH](https://www.ssh.com/ssh/#sec-Download-client-software).

   Perintah **ssh-keygen** meminta Anda untuk memberikan nama dan path untuk menyimpan pasangan kunci tersebut. Secara default, file pasangan kunci diberi nama `id_rsa` (kunci privat) dan `id_rsa.pub` (kunci publik). Di macOS dan Linux, lokasi default file ini adalah `~/.ssh/`. Di Windows, lokasi default untuk file ini adalah `C:\Users\<user-name>\.ssh`.

   Saat diminta, masukkan frase kunci untuk melindungi kunci SSH Anda. Untuk informasi lebih lanjut, lihat [Buat Kunci SSH Baru](https://www.ssh.com/ssh/keygen/).

1. Tambahkan kunci SSH yang diotorisasi pada perangkat Anda yang sedang diuji.

   IDT harus menggunakan kunci privat SSH Anda untuk masuk ke perangkat Anda yang sedang diuji. Untuk mengotorisasi kunci privat SSH Anda untuk masuk ke perangkat Anda yang sedang diuji, gunakan perintah **ssh-copy-id** dari komputer host Anda. Perintah ini menambahkan kunci publik Anda ke dalam file `~/.ssh/authorized_keys` pada perangkat Anda yang sedang diuji. Contoh:

   **\$1 ssh-copy-id *<remote-ssh-user>*@*<remote-device-ip>***

   Di *remote-ssh-user* mana nama pengguna yang digunakan untuk masuk ke perangkat Anda yang sedang diuji dan *remote-device-ip* merupakan alamat IP perangkat yang diuji untuk menjalankan pengujian. Contoh:

   **ssh-copy-id pi@192.168.1.5**

   Saat diminta, masukkan kata sandi untuk nama pengguna yang Anda tentukan di perintah **ssh-copy-id**.

   **ssh-copy-id** mengasumsikan kunci publik tersebut bernama `id_rsa.pub` dan disimpan di lokasi default (pada macOS dan Linux, `~/.ssh/` dan pada Windows, `C:\Users\<user-name>\.ssh`). Jika Anda memberikan kunci publik nama yang berbeda atau menyimpannya di lokasi yang berbeda, Anda harus menentukan path yang memenuhi syarat untuk kunci publik SSH Anda dengan menggunakan **-i** untuk **ssh-copy-id** (misalnya, **ssh-copy-id -i \$1/my/path/myKey.pub**). Untuk informasi lebih lanjut tentang cara membuat kunci SSH dan menyalin kunci publik, lihat [SSH-COPY-ID](https://www.ssh.com/ssh/copy-id).

**Untuk membuat kunci SSH menggunakan Pu TTYgen (hanya Windows)**

1. Pastikan Anda mempunyai server dan klien OpenSSH yang terinstal pada perangkat Anda yang sedang diuji. Untuk informasi selengkapnya, lihat [OpenSSH](https://www.openssh.com/).

1. Instal [Pu TTYgen](https://www.puttygen.com/) pada perangkat Anda yang sedang diuji.

1. Buka PuTTYgen.

1. Pilih **Buat** dan gerakkan kursor mouse Anda di dalam kotak untuk menghasilkan kunci privat.

1. Dari menu **Konversi**, pilih **Ekspor kunci OpenSSH**, dan simpan kunci privat dengan ekstensi file `.pem`.

1. Tambahkan kunci publik ke file `/home/<user>/.ssh/authorized_keys` pada perangkat yang sedang diuji.

   1. Salin teks kunci publik dari TTYgen jendela Pu.

   1. Gunakan PuTTY untuk membuat sesi pada perangkat Anda yang sedang diuji.

      1. Dari command prompt atau jendela Windows Powershell, jalankan perintah berikut:

         **C:/*<path-to-putty>*/putty.exe -ssh *<user>*@*<dut-ip-address>***

      1. Saat diminta, masukkan kata sandi perangkat Anda.

      1. Gunakan vi atau editor teks lain untuk menambahkan kunci publik ke file `/home/<user>/.ssh/authorized_keys` pada perangkat Anda yang sedang diuji.

1. Perbarui file `device.json` Anda dengan nama pengguna, alamat IP, dan path Anda ke file kunci privat yang baru saja Anda simpan di komputer host untuk setiap perangkat yang sedang diuji. Untuk informasi selengkapnya, lihat [Konfigurasikan device.json](set-config.md#device-config). Pastikan Anda memberikan path dan nama file yang lengkap untuk kunci privat dan gunakan garis miring ('/'). Misalnya, untuk path Windows `C:\DT\privatekey.pem`, gunakan `C:/DT/privatekey.pem` di file `device.json`. 

## Konfigurasikan izin pengguna di perangkat Anda
<a name="root-access"></a>

IDT melakukan operasi pada berbagai direktori dan file dalam perangkat yang diuji. Beberapa operasi ini memerlukan izin yang ditinggikan (menggunakan **sudo**). Untuk mengotomatiskan operasi ini, IDT for AWS IoT Greengrass harus dapat menjalankan perintah dengan sudo tanpa diminta kata sandi.

Ikuti langkah-langkah ini pada perangkat yang sedang diuji untuk mengizinkan akses sudo tanpa diminta memasukkan kata sandi. 

**catatan**  
`username` mengacu pada pengguna SSH yang digunakan oleh IDT untuk mengakses perangkat yang diuji.

**Tambahkan pengguna ke grup sudo.**

1. Pada perangkat yang sedang diuji, jalankan `sudo usermod -aG sudo <username>`.

1. Keluar, lalu masuk kembali agar perubahan diterapkan.

1. Untuk memverifikasi nama pengguna Anda telah berhasil ditambahkan, jalankan **sudo echo test**. Jika Anda tidak diminta untuk memasukkan kata sandi, pengguna Anda telah dikonfigurasi dengan benar.

1. Buka file `/etc/sudoers` dan tambahkan baris berikut ke akhir file:

   `<ssh-username> ALL=(ALL) NOPASSWD: ALL`

## Konfigurasikan perangkat Anda untuk mengetes fitur opsional
<a name="optional-feature-config"></a>

Topik berikut menjelaskan cara mengonfigurasi perangkat Anda untuk menjalankan tes IDT untuk fitur opsional. Ikuti langkah-langkah konfigurasi ini hanya jika Anda ingin mengetes fitur ini. Jika tidak, lanjutkan ke [Konfigurasikan pengaturan IDT untuk menjalankan rangkaian AWS IoT Greengrass kualifikasi](set-config.md).

**Topics**
+ [

## Verifikasi AWS IoT Greengrass dependensi pada perangkat yang sedang diuji
](#install-gg-dependencies)
+ [

## Konfigurasikan AWS IoT Greengrass perangkat lunak
](#config-gg)
+ [

## Konfigurasikan komputer host Anda untuk mengakses perangkat yang sedang diuji
](#configure-host)
+ [

## Konfigurasikan izin pengguna di perangkat Anda
](#root-access)
+ [

## Konfigurasikan perangkat Anda untuk mengetes fitur opsional
](#optional-feature-config)
+ [

# Opsional: Mengonfigurasi wadah Docker Anda untuk IDT untuk AWS IoT Greengrass
](docker-config-setup.md)
+ [

# Opsional: Mengonfigurasi perangkat Anda untuk kualifikasi ML
](idt-ml-qualification.md)

# Opsional: Mengonfigurasi wadah Docker Anda untuk IDT untuk AWS IoT Greengrass
<a name="docker-config-setup"></a>

AWS IoT Greengrass menyediakan gambar Docker dan Dockerfile yang membuatnya lebih mudah untuk menjalankan perangkat lunak AWS IoT Greengrass Core dalam wadah Docker. Setelah menyiapkan AWS IoT Greengrass penampung, Anda dapat menjalankan pengujian IDT. Saat ini, hanya x86\$164 Docker arsitektur yang didukung untuk menjalankan IDT untuk AWS IoT Greengrass.

Fitur ini memerlukan IDT v2.3.0 atau yang lebih baru.

Proses pengaturan wadah Docker untuk menjalankan tes IDT bergantung pada apakah Anda menggunakan image Docker atau Dockerfile yang disediakan oleh. AWS IoT Greengrass
+ [Gunakan gambar Docker](#docker-config-setup-docker-image). Gambar Docker memiliki perangkat lunak AWS IoT Greengrass Core dan dependensi yang diinstal.
+ [Menggunakan Dockerfile](#docker-config-setup-dockerfile). Dockerfile berisi kode sumber yang dapat Anda gunakan untuk membangun gambar AWS IoT Greengrass kontainer khusus. Citra dapat dimodifikasi untuk berjalan pada arsitektur platform yang berbeda atau untuk mengurangi ukuran citra.
**catatan**  
AWS IoT Greengrass tidak menyediakan gambar Dockerfiles atau Docker untuk perangkat lunak AWS IoT Greengrass inti versi 1.11.1. Untuk menjalankan pengujian IDT pada gambar kontainer kustom Anda sendiri, gambar Anda harus menyertakan dependensi yang ditentukan dalam Dockerfile yang disediakan oleh. AWS IoT Greengrass

Fitur berikut tidak tersedia saat Anda menjalankan AWS IoT Greengrass di wadah Docker:<a name="docker-image-unsupported-features"></a>
+ [Konektor](connectors.md) yang berjalan di mode **kontainer Greengrass** ini. Untuk menjalankan konektor dalam kontainer Docker, konektor harus berjalan dengan mode **Tanpa kontainer** ini. Untuk menemukan konektor yang mendukung mode **Tanpa kontainer** ini, lihat [AWS-disediakan konektor Greengrass](connectors-list.md). Beberapa konektor ini memiliki parameter mode isolasi yang harus Anda atur ke **Tanpa kontainer**.
+ [Sumber daya perangkat dan volume lokal](access-local-resources.md). Fungsi Lambda yang ditetapkan pengguna milik Anda yang berjalan dalam kontainer Docker harus mengakses perangkat dan volume pada core secara langsung.

## Konfigurasikan gambar Docker yang disediakan oleh AWS IoT Greengrass
<a name="docker-config-setup-docker-image"></a>

Ikuti langkah-langkah ini untuk mengonfigurasi image AWS IoT Greengrass Docker untuk menjalankan tes IDT.

**Prasyarat**

Sebelum Anda mulai tutorial ini, Anda harus melakukan hal berikut.<a name="docker-image-prereq-list"></a>
+ Anda harus menginstal perangkat lunak dan versi berikut di komputer host Anda berdasarkan versi AWS Command Line Interface (AWS CLI) yang Anda pilih.

------
#### [ AWS CLI version 2 ]
  + [Docker](https://docs.docker.com/install/) versi 18.09 atau yang lebih baru. Versi sebelumnya juga dapat berfungsi, namun kami merekomendasikan 18.09 atau yang lebih baru.
  + AWS CLI versi 2.0.0 atau yang lebih baru.
    + Untuk menginstal AWS CLI versi 2, lihat [Menginstal AWS CLI versi 2](https://docs.aws.amazon.com/cli/latest/userguide/install-cliv2.html).
    + Untuk mengkonfigurasi AWS CLI, lihat [Mengkonfigurasi file. AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html)
**catatan**  
Untuk meningkatkan ke AWS CLI versi 2 yang lebih baru di komputer Windows, Anda harus mengulangi proses [instalasi MSI](https://docs.aws.amazon.com/cli/latest/userguide/install-cliv2-windows.html).

------
#### [ AWS CLI version 1 ]
  + [Docker](https://docs.docker.com/install/) versi 18.09 atau yang lebih baru. Versi sebelumnya juga dapat berfungsi, namun kami merekomendasikan 18.09 atau yang lebih baru.
  + [Python](https://www.python.org/downloads/) versi 3.6 atau lebih baru.
  + [pip](https://pip.pypa.io/en/stable/installing) versi 18.1 atau yang lebih baru.
  + AWS CLI versi 1.17.10 atau yang lebih baru
    + Untuk menginstal AWS CLI versi 1, lihat [Menginstal AWS CLI versi 1](https://docs.aws.amazon.com/cli/latest/userguide/install-cliv1.html).
    + Untuk mengkonfigurasi AWS CLI, lihat [Mengkonfigurasi file. AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html)
    + Untuk meng-upgrade ke versi terbaru dari AWS CLI versi 1, jalankan perintah berikut.

      ```
      pip install awscli --upgrade --user
      ```
**catatan**  
Jika Anda menggunakan [instalasi MSI](https://docs.aws.amazon.com/cli/latest/userguide/install-windows.html#msi-on-windows) AWS CLI versi 1 di Windows, perhatikan hal berikut:  
Jika instalasi AWS CLI versi 1 gagal menginstal botocore, coba gunakan instalasi [Python](https://docs.aws.amazon.com/cli/latest/userguide/awscli-install-windows.html#awscli-install-windows-pip) dan pip.
Untuk meningkatkan ke AWS CLI versi 1 yang lebih baru, Anda harus mengulangi proses instalasi MSI.

------
+ Untuk mengakses sumber daya Amazon Elastic Container Registry (Amazon ECR), Anda harus memberikan izin berikut. 
  + Amazon ECR mengharuskan pengguna untuk memberikan `ecr:GetAuthorizationToken` izin melalui kebijakan AWS Identity and Access Management (IAM) sebelum mereka dapat mengautentikasi ke registri dan mendorong atau menarik gambar dari repositori Amazon ECR. Untuk informasi lebih lanjut, lihat [Contoh Kebijakan Repositori Amazon ECR](https://docs.aws.amazon.com/AmazonECR/latest/userguide/repository-policy-examples.html) dan [Mengakses Satu Repositori Amazon ECR](https://docs.aws.amazon.com/AmazonECR/latest/userguide/security_iam_id-based-policy-examples.html#security_iam_id-based-policy-examples-access-one-bucket) di *Amazon Elastic Container Registry*.

 

1. Unduh gambar Docker dan konfiguras kontainer. Anda dapat mengunduh citra prebuilt dari [Docker Hub](https://hub.docker.com/r/amazon/aws-iot-greengrass) atau [Amazon Elastic Container Registry](https://docs.aws.amazon.com/AmazonECR/latest/userguide/what-is-ecr.html) (Amazon ECR) dan menjalankannya pada platform Windows, MacOS, dan Linux (x86\$164).

   Untuk mengunduh gambar Docker dari Amazon ECR, selesaikan semua langkah di [Langkah 1: Dapatkan gambar AWS IoT Greengrass kontainer dari Amazon ECR](run-gg-in-docker-container.md#docker-pull-image). Kemudian, kembali ke topik ini untuk melanjutkan konfigurasi.

1. <a name="docker-linux-non-root"></a>Hanya pengguna Linux: Pastikan pengguna yang menjalankan IDT memiliki izin untuk menjalankan perintah Docker. Untuk informasi lebih lanjut, lihat [Mengelola Docker sebagai pengguna non-root](https://docs.docker.com/install/linux/linux-postinstall/#manage-docker-as-a-non-root-user) dalam dokumentasi Docker.

1. <a name="docker-run-gg-container"></a>Untuk menjalankan AWS IoT Greengrass kontainer, gunakan perintah untuk sistem operasi Anda:

------
#### [ Linux ]

   ```
   docker run --rm --init -it -d --name aws-iot-greengrass \
   -p 8883:8883 \
   -v <host-path-to-kernel-config-file>:<container-path> \
   <image-repository>:<tag>
   ```
   + Ganti *<host-path-to-kernel-config-file>* dengan jalur ke file konfigurasi kernel pada host dan *<container-path>* dengan jalur tempat volume dipasang di wadah.

     File konfigurasi kernel pada host biasanya terletak di `/proc/config.gz` atau `/boot/config-<kernel-release-date>`. Anda dapat berlari `uname -r` untuk menemukan *<kernel-release-date>* nilainya.

     **Contoh:** Untuk memasang file konfigurasi dari `/boot/config-<kernel-release-date>`

     ```
     -v /boot/config-4.15.0-74-generic:/boot/config-4.15.0-74-generic \
     ```

     **Contoh:** Untuk memasang file konfigurasi dari `proc/config.gz`

     ```
     -v /proc/config.gz:/proc/config.gz \
     ```
   + Ganti*<image-repository>*: *<tag>* dalam perintah dengan nama repositori dan tag gambar target.

     **Contoh:** Untuk menunjuk ke versi terbaru dari perangkat lunak AWS IoT Greengrass Core

     ```
     216483018798.dkr.ecr.us-west-2.amazonaws.com/aws-iot-greengrass:latest
     ```

     Untuk mendapatkan daftar gambar AWS IoT Greengrass Docker, jalankan perintah berikut.

     ```
     aws ecr list-images --region us-west-2 --registry-id 216483018798 --repository-name aws-iot-greengrass
     ```

------
#### [ macOS ]

   ```
   docker run --rm --init -it -d --name aws-iot-greengrass \
   -p 8883:8883 \
   <image-repository>:<tag>
   ```
   + Ganti*<image-repository>*: *<tag>* dalam perintah dengan nama repositori dan tag gambar target.

     **Contoh:** Untuk menunjuk ke versi terbaru dari perangkat lunak AWS IoT Greengrass Core

     ```
     216483018798.dkr.ecr.us-west-2.amazonaws.com/aws-iot-greengrass:latest
     ```

     Untuk mendapatkan daftar gambar AWS IoT Greengrass Docker, jalankan perintah berikut:

     ```
     aws ecr list-images --region us-west-2 --registry-id 216483018798 --repository-name aws-iot-greengrass
     ```

------
#### [ Windows ]

   ```
   docker run --rm --init -it -d --name aws-iot-greengrass \
   -p 8883:8883 \
   <image-repository>:<tag>
   ```
   + Ganti*<image-repository>*: *<tag>* dalam perintah dengan nama repositori dan tag gambar target.

     **Contoh:** Untuk menunjuk ke versi terbaru dari perangkat lunak AWS IoT Greengrass Core

     ```
     216483018798.dkr.ecr.us-west-2.amazonaws.com/aws-iot-greengrass:latest
     ```

     Untuk mendapatkan daftar gambar AWS IoT Greengrass Docker, jalankan perintah berikut:

     ```
     aws ecr list-images --region us-west-2 --registry-id 216483018798 --repository-name aws-iot-greengrass
     ```

------
**penting**  
Saat menguji dengan IDT, jangan sertakan `--entrypoint /greengrass-entrypoint.sh \` argumen yang digunakan untuk menjalankan image untuk AWS IoT Greengrass penggunaan umum.

1. <a name="docker-config-next-steps"></a>Langkah selanjutnya: [Konfigurasikan AWS kredensyal dan `device.json` file Anda](set-config.md).

## Konfigurasikan dockerfile yang disediakan oleh AWS IoT Greengrass
<a name="docker-config-setup-dockerfile"></a>

Ikuti langkah-langkah ini untuk mengonfigurasi image Docker yang dibangun dari AWS IoT Greengrass Dockerfile untuk menjalankan pengujian IDT.

1. Dari [AWS IoT Greengrass Perangkat lunak Docker](what-is-gg.md#gg-docker-download), mengunduh paket Dockerfile ke komputer host Anda dan mengekstraksi itu.

1. Buka `README.md`. Tiga langkah selanjutnya mengacu pada bagian dalam file ini.

1. Pastikan Anda memenuhi persyaratan di **bagian** Prasyarat.

1. Hanya pengguna Linux: Selesaikan langkah-langkah **Aktifkan Symlink dan Perlindungan Hardlink** dan **Aktifkan Penerusan IPv4 Jaringan**.

1. Untuk membuat gambar Docker, selesaikan semua langkah di **Langkah 1. Bangun Gambar AWS IoT Greengrass Docker**. Kemudian, kembali ke topik ini untuk melanjutkan konfigurasi.

1. <a name="docker-run-gg-container"></a>Untuk menjalankan AWS IoT Greengrass kontainer, gunakan perintah untuk sistem operasi Anda:

------
#### [ Linux ]

   ```
   docker run --rm --init -it -d --name aws-iot-greengrass \
   -p 8883:8883 \
   -v <host-path-to-kernel-config-file>:<container-path> \
   <image-repository>:<tag>
   ```
   + Ganti *<host-path-to-kernel-config-file>* dengan jalur ke file konfigurasi kernel pada host dan *<container-path>* dengan jalur tempat volume dipasang di wadah.

     File konfigurasi kernel pada host biasanya terletak di `/proc/config.gz` atau `/boot/config-<kernel-release-date>`. Anda dapat berlari `uname -r` untuk menemukan *<kernel-release-date>* nilainya.

     **Contoh:** Untuk memasang file konfigurasi dari `/boot/config-<kernel-release-date>`

     ```
     -v /boot/config-4.15.0-74-generic:/boot/config-4.15.0-74-generic \
     ```

     **Contoh:** Untuk memasang file konfigurasi dari `proc/config.gz`

     ```
     -v /proc/config.gz:/proc/config.gz \
     ```
   + Ganti*<image-repository>*: *<tag>* dalam perintah dengan nama repositori dan tag gambar target.

     **Contoh:** Untuk menunjuk ke versi terbaru dari perangkat lunak AWS IoT Greengrass Core

     ```
     216483018798.dkr.ecr.us-west-2.amazonaws.com/aws-iot-greengrass:latest
     ```

     Untuk mendapatkan daftar gambar AWS IoT Greengrass Docker, jalankan perintah berikut.

     ```
     aws ecr list-images --region us-west-2 --registry-id 216483018798 --repository-name aws-iot-greengrass
     ```

------
#### [ macOS ]

   ```
   docker run --rm --init -it -d --name aws-iot-greengrass \
   -p 8883:8883 \
   <image-repository>:<tag>
   ```
   + Ganti*<image-repository>*: *<tag>* dalam perintah dengan nama repositori dan tag gambar target.

     **Contoh:** Untuk menunjuk ke versi terbaru dari perangkat lunak AWS IoT Greengrass Core

     ```
     216483018798.dkr.ecr.us-west-2.amazonaws.com/aws-iot-greengrass:latest
     ```

     Untuk mendapatkan daftar gambar AWS IoT Greengrass Docker, jalankan perintah berikut:

     ```
     aws ecr list-images --region us-west-2 --registry-id 216483018798 --repository-name aws-iot-greengrass
     ```

------
#### [ Windows ]

   ```
   docker run --rm --init -it -d --name aws-iot-greengrass \
   -p 8883:8883 \
   <image-repository>:<tag>
   ```
   + Ganti*<image-repository>*: *<tag>* dalam perintah dengan nama repositori dan tag gambar target.

     **Contoh:** Untuk menunjuk ke versi terbaru dari perangkat lunak AWS IoT Greengrass Core

     ```
     216483018798.dkr.ecr.us-west-2.amazonaws.com/aws-iot-greengrass:latest
     ```

     Untuk mendapatkan daftar gambar AWS IoT Greengrass Docker, jalankan perintah berikut:

     ```
     aws ecr list-images --region us-west-2 --registry-id 216483018798 --repository-name aws-iot-greengrass
     ```

------
**penting**  
Saat menguji dengan IDT, jangan sertakan `--entrypoint /greengrass-entrypoint.sh \` argumen yang digunakan untuk menjalankan image untuk AWS IoT Greengrass penggunaan umum.

1. <a name="docker-config-next-steps"></a>Langkah selanjutnya: [Konfigurasikan AWS kredensyal dan `device.json` file Anda](set-config.md).

## Memecahkan masalah penyiapan kontainer Docker Anda untuk IDT AWS IoT Greengrass
<a name="docker-config-setup-troubleshooting"></a>

Gunakan informasi berikut untuk membantu memecahkan masalah dengan menjalankan wadah Docker untuk IDT untuk pengujian. AWS IoT Greengrass 

### PERINGATAN: Kesalahan saat memuat konfigurasifile:/home/user/.docker/config.json - stat /home/<user>/.docker/config.json: izin ditolak
<a name="docker-config-permissions-linux"></a>

Jika Anda mendapatkan kesalahan ini ketika menjalankan perintah `docker` di Linux, jalankan perintah berikut. Ganti *<user>* dalam perintah berikut dengan pengguna yang menjalankan IDT.

```
sudo chown <user>:<user> /home/<user>/.docker -R
sudo chmod g+rwx /home/<user>/.docker -R
```

# Opsional: Mengonfigurasi perangkat Anda untuk kualifikasi ML
<a name="idt-ml-qualification"></a>

IDT for AWS IoT Greengrass menyediakan pengujian kualifikasi machine learning (ML) untuk memvalidasi bahwa perangkat Anda dapat melakukan inferensi ML secara lokal menggunakan model terlatih cloud.

Untuk menjalankan tes kualifikasi ML, Anda harus terlebih dahulu mengonfigurasi perangkat Anda seperti yang dijelaskan di [Konfigurasikan perangkat Anda untuk menjalankan tes IDT](device-config-setup.md). Kemudian, ikuti langkah-langkah dalam topik ini untuk menginstal dependensi untuk kerangka kerja ML yang Anda ingin jalankan.

IDT v3.1.0 atau yang lebih baru diperlukan untuk menjalankan tes untuk kualifikasi ML.

## Menginstal dependensi kerangka kerja ML
<a name="ml-qualification-framework-dependencies"></a>

Semua dependensi kerangka kerja ML harus diinstal di bawah direktori `/usr/local/lib/python3.x/site-packages` ini. Untuk memastikan mereka dipasang di direktori yang benar, kami merekomendasikan Anda menggunakan `sudo` izin root ketika menginstal dependensi. Lingkungan virtual tidak didukung untuk tes kualifikasi.

**catatan**  
Jika anda sedang mengetes fungsi Lambda yang berjalan dengan [kontainerisasi](lambda-group-config.md#lambda-containerization-considerations) (di mode **kontainer Greengrass** ini), membuat symlink untuk perpustakaan Python di bawah `/usr/local/lib/python3.x` tidak didukung. Untuk menghindari kesalahan, Anda harus menginstal dependensi di bawah direktori yang benar.

Ikuti langkah-langkah untuk menginstal dependensi untuk kerangka kerja target Anda:
+ [Instal MXNet dependensi](#ml-qualification-mxnet-dependencies)
+ [Instal TensorFlow dependensi](#ml-qualification-tensorflow-dependencies)
+ [Instal dependensi DLR](#ml-qualification-dlr-dependencies)

 

## Instal dependensi Apache MXNet
<a name="ml-qualification-mxnet-dependencies"></a>

<a name="test-framework-dependencies"></a>Tes kualifikasi IDT untuk kerangka kerja ini memiliki dependensi sebagai berikut:
+ <a name="ml-qualification-python-req"></a>Python 3.6 atau Python 3.7.
**catatan**  <a name="python-symlink-command"></a>
Jika Anda menggunakan Python 3.6, Anda harus membuat sebuah tautan simbolik dari binari Python 3.7 ke Python 3.6. Ini mengonfigurasi perangkat Anda untuk memenuhi persyaratan Python untuk AWS IoT Greengrass. Sebagai contoh:  

  ```
  sudo ln -s path-to-python-3.6/python3.6 path-to-python-3.7/python3.7
  ```
+ Apache MXNet v1.2.1 atau yang lebih baru.
+ NumPy. Versi harus kompatibel dengan MXNet versi Anda.

### Instalasi MXNet
<a name="ml-qualification-mxnet-install"></a>

Ikuti instruksi dalam MXNet dokumentasi untuk [menginstal MXNet](https://mxnet.apache.org/get_started/?platform=linux&language=python&processor=cpu&environ=pip&).

**catatan**  
<a name="run-python3-commands"></a>Jika Python 2.x dan Python 3.x keduanya diinstal pada perangkat Anda, gunakan Python 3.x dalam perintah yang Anda jalankan untuk menginstal dependensi.

### Memvalidasi instalasi MXNet
<a name="ml-qualification-mxnet-validate"></a>

Pilih salah satu opsi berikut untuk memvalidasi MXNet instalasi.

#### Opsi 1: SSH ke perangkat Anda dan jalankan skrip
<a name="ml-qualification-validate-mxnet-option-1"></a>

1. <a name="ssh-validate-framework-install-ssh"></a>SSH ke perangkat Anda.

1. <a name="ssh-validate-framework-install-run-scripts"></a>Jalankan skrip berikut untuk memverifikasi bahwa dependensi diinstal dengan benar.

   ```
   sudo python3.7 -c "import mxnet; print(mxnet.__version__)"
   ```

   ```
   sudo python3.7 -c "import numpy; print(numpy.__version__)"
   ```

   <a name="ssh-passed-mldependencies"></a>Output mencetak nomor versi dan skrip harus keluar tanpa kesalahan.

#### Opsi 2: Jalankan tes depedensi IDT
<a name="ml-qualification-validate-mxnet-option-2"></a>

1. <a name="idt-validate-framework-install-check-config"></a>Pastikan bahwa `device.json` dikonfigurasi untuk kualifikasi ML. Untuk informasi selengkapnya, lihat [Konfigurasikan device.json untuk kualifikasi ML](set-config.md#device-json-ml-qualification).

1. <a name="idt-validate-framework-install-run-test"></a>Jalankan tes dependensi untuk kerangka kerja.

   ```
   devicetester_[linux | mac | win_x86-64] run-suite --group-id mldependencies --test-id mxnet_dependency_check
   ```

   <a name="idt-passed-mldependencies"></a>Ringkasan tes menampilkan `PASSED` hasil untuk `mldependencies`.

 

## Instal TensorFlow dependensi
<a name="ml-qualification-tensorflow-dependencies"></a>

<a name="test-framework-dependencies"></a>Tes kualifikasi IDT untuk kerangka kerja ini memiliki dependensi sebagai berikut:
+ <a name="ml-qualification-python-req"></a>Python 3.6 atau Python 3.7.
**catatan**  <a name="python-symlink-command"></a>
Jika Anda menggunakan Python 3.6, Anda harus membuat sebuah tautan simbolik dari binari Python 3.7 ke Python 3.6. Ini mengonfigurasi perangkat Anda untuk memenuhi persyaratan Python untuk AWS IoT Greengrass. Sebagai contoh:  

  ```
  sudo ln -s path-to-python-3.6/python3.6 path-to-python-3.7/python3.7
  ```
+ TensorFlow 1.x.

### Instalasi TensorFlow
<a name="ml-qualification-tensorflow-install"></a>

Ikuti petunjuk dalam TensorFlow dokumentasi untuk menginstal TensorFlow 1.x [dengan pip](https://www.tensorflow.org/install/pip) atau [dari](https://www.tensorflow.org/install/source) sumber.

**catatan**  
<a name="run-python3-commands"></a>Jika Python 2.x dan Python 3.x keduanya diinstal pada perangkat Anda, gunakan Python 3.x dalam perintah yang Anda jalankan untuk menginstal dependensi.

### Memvalidasi instalasi TensorFlow
<a name="ml-qualification-tensorflow-validate"></a>

Pilih salah satu opsi berikut untuk memvalidasi TensorFlow instalasi.

#### Opsi 1: SSH ke perangkat Anda dan jalankan skrip
<a name="ml-qualification-validate-tensorflow-option-1"></a>

1. <a name="ssh-validate-framework-install-ssh"></a>SSH ke perangkat Anda.

1. Menjalankan skrip berikut untuk memverifikasi bahwa depedensi telah diinstal dengan benar.

   ```
   sudo python3.7 -c "import tensorflow; print(tensorflow.__version__)"
   ```

   <a name="ssh-passed-mldependencies"></a>Output mencetak nomor versi dan skrip harus keluar tanpa kesalahan.

#### Opsi 2: Jalankan tes depedensi IDT
<a name="ml-qualification-validate-tensorflow-option-2"></a>

1. <a name="idt-validate-framework-install-check-config"></a>Pastikan bahwa `device.json` dikonfigurasi untuk kualifikasi ML. Untuk informasi selengkapnya, lihat [Konfigurasikan device.json untuk kualifikasi ML](set-config.md#device-json-ml-qualification).

1. <a name="idt-validate-framework-install-run-test"></a>Jalankan tes dependensi untuk kerangka kerja.

   ```
   devicetester_[linux | mac | win_x86-64] run-suite --group-id mldependencies --test-id tensorflow_dependency_check
   ```

   <a name="idt-passed-mldependencies"></a>Ringkasan tes menampilkan `PASSED` hasil untuk `mldependencies`.

 

## Instal dependensi Amazon SageMaker AI Neo Deep Learning Runtime (DLR)
<a name="ml-qualification-dlr-dependencies"></a>

<a name="test-framework-dependencies"></a>Tes kualifikasi IDT untuk kerangka kerja ini memiliki dependensi sebagai berikut:
+ <a name="ml-qualification-python-req"></a>Python 3.6 atau Python 3.7.
**catatan**  <a name="python-symlink-command"></a>
Jika Anda menggunakan Python 3.6, Anda harus membuat sebuah tautan simbolik dari binari Python 3.7 ke Python 3.6. Ini mengonfigurasi perangkat Anda untuk memenuhi persyaratan Python untuk AWS IoT Greengrass. Sebagai contoh:  

  ```
  sudo ln -s path-to-python-3.6/python3.6 path-to-python-3.7/python3.7
  ```
+ SageMaker AI Neo DLR.
+ numpy.

Setelah Anda menginstal dependensi tes DLR, Anda harus [mengkompilasi model](#ml-qualification-dlr-compile-model).

### Menginstal DLR
<a name="ml-qualification-dlr-install"></a>

Ikuti instruksi di dokumentasi DLR untuk [instal Neo DLR](https://neo-ai-dlr.readthedocs.io/en/latest/install.html#building-on-linux).

**catatan**  
<a name="run-python3-commands"></a>Jika Python 2.x dan Python 3.x keduanya diinstal pada perangkat Anda, gunakan Python 3.x dalam perintah yang Anda jalankan untuk menginstal dependensi.

### Memvalidasi instalasi DLR
<a name="ml-qualification-dlr-validate"></a>

Pilih salah satu opsi berikut untuk memvalidasi instalasi DLR.

#### Opsi 1: SSH ke perangkat Anda dan jalankan skrip
<a name="ml-qualification-validate-dlr-option-1"></a>

1. <a name="ssh-validate-framework-install-ssh"></a>SSH ke perangkat Anda.

1. <a name="ssh-validate-framework-install-run-scripts"></a>Jalankan skrip berikut untuk memverifikasi bahwa dependensi diinstal dengan benar.

   ```
   sudo python3.7 -c "import dlr; print(dlr.__version__)"
   ```

   ```
   sudo python3.7 -c "import numpy; print(numpy.__version__)"
   ```

   <a name="ssh-passed-mldependencies"></a>Output mencetak nomor versi dan skrip harus keluar tanpa kesalahan.

#### Opsi 2: Jalankan tes depedensi IDT
<a name="ml-qualification-validate-dlr-option-2"></a>

1. <a name="idt-validate-framework-install-check-config"></a>Pastikan bahwa `device.json` dikonfigurasi untuk kualifikasi ML. Untuk informasi selengkapnya, lihat [Konfigurasikan device.json untuk kualifikasi ML](set-config.md#device-json-ml-qualification).

1. <a name="idt-validate-framework-install-run-test"></a>Jalankan tes dependensi untuk kerangka kerja.

   ```
   devicetester_[linux | mac | win_x86-64] run-suite --group-id mldependencies --test-id dlr_dependency_check
   ```

   <a name="idt-passed-mldependencies"></a>Ringkasan tes menampilkan `PASSED` hasil untuk `mldependencies`.

## Kompilasi model DLR
<a name="ml-qualification-dlr-compile-model"></a>

Anda harus mengkompilasi model DLR sebelum Anda dapat menggunakannya untuk tes kualifikasi ML. Pilih langkah-langkah, memilih salah satu opsi berikut.

### Opsi 1: Gunakan Amazon SageMaker AI untuk mengkompilasi model
<a name="ml-qualification-compile-dlr-option-1"></a>

Ikuti langkah-langkah ini untuk menggunakan SageMaker AI untuk mengkompilasi model ML yang disediakan oleh IDT. Model ini sudah dilatih sebelumnya dengan MXNet Apache.

1. Verifikasi bahwa jenis perangkat Anda didukung oleh SageMaker AI. Untuk informasi selengkapnya, lihat [opsi perangkat target](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_OutputConfig.html#sagemaker-Type-OutputConfig-TargetDevice) *Referensi API Amazon SageMaker AI*. Jika jenis perangkat Anda saat ini tidak didukung oleh SageMaker AI, ikuti langkah-langkahnya[Opsi 2: Gunakan TVM untuk mengkompilasi model DLR](#ml-qualification-compile-dlr-option-2).
**catatan**  
Menjalankan tes DLR dengan model yang dikompilasi oleh SageMaker AI mungkin memakan waktu 4 atau 5 menit. Jangan hentikan IDT selama waktu ini.

1. <a name="compile-dlr-download-uncompiled-model"></a>Unduh file tarBALL yang berisi MXNet model DLR yang belum dikompilasi dan terlatih sebelumnya:
   + [dlr-noncompiled-model-1.0.tar.gz](https://docs.aws.amazon.com/greengrass/latest/developerguide/download-dlr-noncompiled-model-1.0.html)

1. <a name="compile-dlr-decompress-uncompiled-model"></a>Dekompresi tarball. Perintah ini menghasilkan struktur direktori berikut.  
![\[Direktori resnet18 berisi tiga file.\]](http://docs.aws.amazon.com/id_id/greengrass/v1/developerguide/images/idt/idt-ml-qualification-dlr-uncompiled.png)

1. Pindahkan `synset.txt` keluar dari `resnet18` direktori. Buat catatan tentang lokasi baru. Anda salin file ini ke direktori model dikompilasi yang lebih baru..

1. Kompres konten `resnet18` direktori.

   ```
   tar cvfz model.tar.gz resnet18v1-symbol.json resnet18v1-0000.params
   ```

1. Unggah file terkompresi ke bucket Amazon S3 di Akun AWS Anda, lalu ikuti langkah-langkah [di Compile a Model (Console](https://docs.aws.amazon.com/sagemaker/latest/dg/neo-job-compilation-console.html)) untuk membuat pekerjaan kompilasi.

   1. Untuk **Konfigurasi input**, gunakan nilai berikut:
      + Untuk **Konfigurasi input data**, memasukkan `{"data": [1, 3, 224, 224]}`.
      + Untuk **Kerangka kerja machine learning**, memilih `MXNet`.

   1. Untuk **Konfigurasi output**, gunakan nilai berikut:
      + Untuk **Lokasi output S3**, memasukkan jalur ke bucket atau folder Amazon S3 di mana Anda ingin menyimpan model yang dikompilasi.
      + Untuk **Perangkat target**, pilih jenis perangkat Anda.

1. Mengunduh model yang dikompilasi dari lokasi output yang Anda tentukan, dan kemudian unzip file.

1. Salin `synset.txt` ke dalam direktori model yang dikompilasi.

1. Ubah nama direktori model yang dikompilasi menjadi `resnet18`.

   Direktori model terkompilasi Anda harus memiliki struktur direktori berikut.  
![\[Direktori model terkompilasi resnet18 berisi empat file.\]](http://docs.aws.amazon.com/id_id/greengrass/v1/developerguide/images/idt/idt-ml-qualification-dlr-compiled-sm.png)

### Opsi 2: Gunakan TVM untuk mengkompilasi model DLR
<a name="ml-qualification-compile-dlr-option-2"></a>

Ikuti langkah-langkah berikut untuk menggunakan TVM untuk mengompilasi model ML yang disediakan oleh IDT. Model ini sudah dilatih sebelumnya dengan Apache MXNet, jadi Anda harus menginstal MXNet di komputer atau perangkat tempat Anda mengkompilasi model. Untuk menginstal MXNet, ikuti instruksi dalam [ MXNet dokumentasi](https://mxnet.apache.org/get_started/?platform=linux&language=python&processor=cpu&environ=pip&).

**catatan**  
Kami merekomendasikan bahwa Anda mengkompilasi model pada perangkat target Anda. Praktek ini opsional, tetapi dapat membantu memastikan kompatibilitas dan mengurangi potensi masalah.

 

1. <a name="compile-dlr-download-uncompiled-model"></a>Unduh file tarBALL yang berisi MXNet model DLR yang belum dikompilasi dan terlatih sebelumnya:
   + [dlr-noncompiled-model-1.0.tar.gz](https://docs.aws.amazon.com/greengrass/latest/developerguide/download-dlr-noncompiled-model-1.0.html)

1. <a name="compile-dlr-decompress-uncompiled-model"></a>Dekompresi tarball. Perintah ini menghasilkan struktur direktori berikut.  
![\[Direktori resnet18 berisi tiga file.\]](http://docs.aws.amazon.com/id_id/greengrass/v1/developerguide/images/idt/idt-ml-qualification-dlr-uncompiled.png)

1. Ikuti instruksi di dokumentasi TVM untuk [membangun dan menginstal TVM dari sumber untuk platform Anda](https://docs.tvm.ai/install/from_source.html).

1. Setelah TVM dibangun, jalankan kompilasi TVM untuk model resnet18. Langkah-langkah berikut didasarkan pada [ Tutorial Quick Start untuk Mengkompilasi Model Deep Learning](https://tvm.apache.org/docs/tutorial/relay_quick_start.html#sphx-glr-tutorials-get-started-relay-quick-start-py) dalam dokumentasi TVM.

   1. Buka `relay_quick_start.py` file dari repositori TVM kloning.

   1. Update kode yang [mendefinisikan jaringan syaraf tiruan dalam relay](https://tvm.apache.org/docs/tutorial/relay_quick_start.html#define-neural-network-in-relay). Anda dapat menggunakan salah satu opsi berikut:
      + Opsi 1: Gunakan `mxnet.gluon.model_zoo.vision.get_model` untuk mendapatkan modul relay dan parameter:

        ```
        from mxnet.gluon.model_zoo.vision import get_model
        block = get_model('resnet18_v1', pretrained=True)
        mod, params = relay.frontend.from_mxnet(block, {"data": data_shape})
        ```
      + Opsi 2: Dari model yang tidak dikompilasi yang Anda unduh pada langkah 1, salin file berikut ke direktori yang sama dengan `relay_quick_start.py` file. File-file ini berisi modul relay dan parameter.
        + `resnet18v1-symbol.json`
        + `resnet18v1-0000.params`

   1. Update kode yang [menyimpan dan memuat modul yang dikompilasi](https://tvm.apache.org/docs/tutorial/relay_quick_start.html#save-and-load-compiled-module) untuk menggunakan kode berikut.

      ```
      from tvm.contrib import util
      path_lib = "deploy_lib.so"
      #  Export the model library based on your device architecture
      lib.export_library("deploy_lib.so", cc="aarch64-linux-gnu-g++")
      with open("deploy_graph.json", "w") as fo:
          fo.write(graph)
      with open("deploy_param.params", "wb") as fo:
          fo.write(relay.save_param_dict(params))
      ```

   1. Bangun model:

      ```
      python3 tutorials/relay_quick_start.py --build-dir ./model
      ```

      Perintah ini menghasilkan file-file berikut.
      + `deploy_graph.json`
      + `deploy_lib.so`
      + `deploy_param.params`

1. Salin berkas model yang dihasilkan ke dalam direktori bernama `resnet18`. Ini adalah direktori model terkompilasi Anda.

1. Salin direktori model yang dikompilasi ke komputer host Anda. Kemudian salin `synset.txt` dari model yang tidak dikompilasi yang Anda unduh pada langkah 1 ke dalam direktori model yang dikompilasi.

   Direktori model terkompilasi Anda harus memiliki struktur direktori berikut.  
![\[Direktori model terkompilasi resnet18 berisi empat file.\]](http://docs.aws.amazon.com/id_id/greengrass/v1/developerguide/images/idt/idt-ml-qualification-dlr-compiled-tvm.png)

Selanjutnya, [konfigurasikan AWS kredensil dan `device.json` file](set-config.md) Anda.

# Konfigurasikan pengaturan IDT untuk menjalankan rangkaian AWS IoT Greengrass kualifikasi
<a name="set-config"></a>

Sebelum menjalankan pengujian, Anda harus mengonfigurasi pengaturan untuk AWS kredensyal dan perangkat di komputer host Anda.

## Konfigurasikan AWS kredensyal Anda
<a name="cfg-aws-gg"></a>

Anda harus mengonfigurasikan kredensial pengguna IAM Anda di file `<device-tester-extract-location> /configs/config.json`. Gunakan kredensyal untuk IDT untuk AWS IoT Greengrass pengguna yang dibuat di. [Buat dan konfigurasikan Akun AWS](dev-tst-prereqs.md#config-aws-account-for-idt) Anda dapat menentukan kredensial Anda dengan salah satu dari dua cara berikut:
+ File kredensial
+ Variabel-variabel lingkungan

### Konfigurasikan AWS kredensyal dengan file kredensyal
<a name="config-cred-file"></a>

IDT menggunakan file kredensials yang sama sebagai AWS CLI. Untuk informasi selengkapnya, lihat [File konfigurasi dan kredensial](https://docs.aws.amazon.com/cli/latest/userguide/cli-config-files.html).

Lokasi file kredensial itu bervariasi, tergantung pada sistem operasi yang Anda gunakan:
+ macOS, Linux: `~/.aws/credentials`
+ Windows: `C:\Users\UserName\.aws\credentials`

Tambahkan AWS kredensi Anda ke `credentials` file dalam format berikut:

```
[default]
aws_access_key_id = <your_access_key_id>
aws_secret_access_key = <your_secret_access_key>
```

Untuk mengonfigurasi IDT AWS IoT Greengrass agar dapat menggunakan AWS kredensyal dari `credentials` file Anda, edit `config.json` file Anda sebagai berikut:

```
{
	"awsRegion": "us-west-2",
	"auth": {
		"method": "file",
		"credentials": {
			"profile": "default"
		}
	}
}
```

**catatan**  
Jika Anda tidak menggunakan `default` AWS profil, pastikan untuk mengubah nama profil di `config.json` file Anda. Untuk informasi selengkapnya, lihat [Profil Bernama](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-profiles.html).

### Konfigurasikan AWS kredensyal dengan variabel lingkungan
<a name="config-env-vars"></a>

Variabel lingkungan adalah variabel yang dikelola oleh sistem operasi dan digunakan oleh perintah sistem. Variabel ini tidak tersimpan jika Anda menutup sesi SSH. IDT untuk AWS IoT Greengrass dapat menggunakan variabel `AWS_ACCESS_KEY_ID` dan `AWS_SECRET_ACCESS_KEY` lingkungan untuk menyimpan AWS kredensyal Anda.

Untuk mengatur variabel ini di Linux, macOS, atau Unix, gunakan **export**:

```
export AWS_ACCESS_KEY_ID=<your_access_key_id>
export AWS_SECRET_ACCESS_KEY=<your_secret_access_key>
```

Untuk menetapkan variabel ini di Windows, gunakan **set**:

```
set AWS_ACCESS_KEY_ID=<your_access_key_id>
set AWS_SECRET_ACCESS_KEY=<your_secret_access_key>
```

Untuk mengonfigurasi IDT untuk menggunakan variabel lingkungan, edit bagian `auth` di file `config.json` Anda. Berikut ini contohnya:

```
{
	"awsRegion": "us-west-2",
	"auth": {
		"method": "environment"
	}
}
```

## Konfigurasikan device.json
<a name="device-config"></a>

Selain AWS kredensyal, IDT untuk informasi AWS IoT Greengrass kebutuhan tentang perangkat yang menjalankan pengujian (misalnya, alamat IP, informasi login, sistem operasi, dan arsitektur CPU).

Anda harus memberikan informasi ini dengan menggunakan templat `device.json` yang terletak di ` <device_tester_extract_location>/configs/device.json`:

------
#### [ Physical device ]

```
[
  {
    "id": "<pool-id>",
    "sku": "<sku>",
    "features": [
      {
        "name": "os",
        "value": "linux | ubuntu | openwrt"
      },
      {
        "name": "arch",
        "value": "x86_64 | armv6l | armv7l | aarch64"
      },
      {
        "name": "container",
        "value": "yes | no"
      },
      {
        "name": "docker",
        "value": "yes | no"
      },
      {
        "name": "streamManagement",
        "value": "yes | no"
      },
      {
        "name": "hsi",
        "value": "yes | no"
      },
      {
        "name": "ml",
        "value": "mxnet | tensorflow | dlr | mxnet,dlr,tensorflow | no"
      },
      *********** Remove the section below if the device is not qualifying for ML **************,
      {
        "name": "mlLambdaContainerizationMode",
        "value": "container | process | both"
      },
      {
        "name": "processor",
        "value": "cpu | gpu"
      },
      ******************************************************************************************
    ],
    *********** Remove the section below if the device is not qualifying for HSI ***************
    "hsm": {
      "p11Provider": "/path/to/pkcs11ProviderLibrary",
      "slotLabel": "<slot_label>",
      "slotUserPin": "<slot_pin>",
      "privateKeyLabel": "<key_label>",
      "openSSLEngine": "/path/to/openssl/engine"
    },
    ********************************************************************************************
    *********** Remove the section below if the device is not qualifying for ML ****************
    "machineLearning": {
      "dlrModelPath": "/path/to/compiled/dlr/model",
      "environmentVariables": [
        {
          "key": "<environment-variable-name>",
          "value": "<Path:$PATH>"
        }
      ],
      "deviceResources": [
        {
          "name": "<resource-name>",
          "path": "<resource-path>",
          "type": "device | volume"
        }
      ]
    },
    ******************************************************************************************
    "kernelConfigLocation": "",
    "greengrassLocation": "",
    "devices": [
      {
        "id": "<device-id>",
        "connectivity": {
          "protocol": "ssh",
          "ip": "<ip-address>",
          "port": 22,
          "auth": {
            "method": "pki | password",
            "credentials": {
              "user": "<user-name>",
              "privKeyPath": "/path/to/private/key",
              "password": "<password>"
            }
          }
        }
      }
    ]
  }
]
```

**catatan**  
Tentukan `privKeyPath` hanya jika `method` diatur ke `pki`.  
Tentukan `password` hanya jika `method` diatur ke `password`.

------
#### [ Docker container ]

```
[
  {
    "id": "<pool-id>",
    "sku": "<sku>",
    "features": [
      {
        "name": "os",
        "value": "linux | ubuntu | openwrt"
      },
      {
        "name": "arch",
        "value": "x86_64"
      },
      {
        "name": "container",
        "value": "no"
      },
      {
        "name": "docker",
        "value": "no"
      },
      {
        "name": "streamManagement",
        "value": "yes | no"
      },
      {
        "name": "hsi",
        "value": "no"
      },
      {
        "name": "ml",
        "value": "mxnet | tensorflow | dlr | mxnet,dlr,tensorflow | no"
      },
      *********** Remove the section below if the device is not qualifying for ML **************,
      {
        "name": "mlLambdaContainerizationMode",
        "value": "process"
      },
      {
        "name": "processor",
        "value": "cpu | gpu"
      },
      ******************************************************************************************
    ],
    *********** Remove the section below if the device is not qualifying for ML ****************
    "machineLearning": {
      "dlrModelPath": "/path/to/compiled/dlr/model",
      "environmentVariables": [
        {
          "key": "<environment-variable-name>",
          "value": "<Path:$PATH>"
        }
      ],
      "deviceResources": [
        {
          "name": "<resource-name>",
          "path": "<resource-path>",
          "type": "device | volume"
        }
      ]
    },
    ******************************************************************************************
    "kernelConfigLocation": "",
    "greengrassLocation": "",
    "devices": [
      {
        "id": "<device-id>",
        "connectivity": {
          "protocol": "docker",
          "containerId": "<container-name | container-id>",
          "containerUser": "<user>"
        }
      }
    ]
  }
]
```

------

Semua bidang yang berisi nilai-nilai yang diperlukan seperti yang dijelaskan di sini:

`id`  
ID alfanumerik yang ditetapkan pengguna secara unik mengidentifikasi kumpulan perangkat yang disebut *kolam perangkat*. Perangkat yang termasuk dalam suatu kolam harus memiliki perangkat keras yang identik. Ketika Anda menjalankan serangkaian tes, perangkat di kolam tersebut digunakan untuk memparalelkan beban kerja. Beberapa perangkat digunakan untuk menjalankan tes yang berbeda.

`sku`  
Nilai alfanumerik yang secara unik mengidentifikasi perangkat yang diuji. SKU digunakan untuk melacak forum yang berkualitas.  
Jika Anda ingin mencantumkan papan Anda di Katalog AWS Partner Perangkat, SKU yang Anda tentukan di sini harus cocok dengan SKU yang Anda gunakan dalam proses daftar.

`features`  
Rangkaian yang berisi fitur perangkat yang didukung. Semua fitur diperlukan.    
`os` dan `arch`  
  
Kombinasi sistem operasi (OS) dan arsitektur yang didukung:  
+ `linux`, `x86_64`
+ `linux`, `armv6l`
+ `linux`, `armv7l`
+ `linux`, `aarch64`
+ `ubuntu`, `x86_64`
+ `openwrt`, `armv7l`
+ `openwrt`, `aarch64`
Jika Anda menggunakan IDT untuk menguji AWS IoT Greengrass berjalan di wadah Docker, hanya arsitektur Docker x86\$164 yang didukung.  
`container`  
<a name="description-container"></a>Memvalidasi bahwa perangkat memenuhi semua persyaratan perangkat lunak dan perangkat keras untuk menjalankan fungsi Lambda dalam mode kontainer pada core Greengrass.  
Nilai yang valid adalah `yes` atau `no`.  
`docker`  
<a name="description-docker"></a>Memvalidasi bahwa perangkat memenuhi semua dependensi teknis yang diperlukan untuk menggunakan konektor deployment aplikasi Greengrass Docker untuk menjalankan kontainer  
Nilai yang valid adalah `yes` atau `no`.  
`streamManagement`  
<a name="description-sm"></a>Memvalidasi bahwa perangkat memenuhi semua dependensi teknis yang diperlukan untuk menjalankan AWS IoT Greengrass pengelola aliran.  
Nilai yang valid adalah `yes` atau `no`.  
`hsi`  
<a name="description-hsi"></a>Memverifikasi bahwa pustaka bersama HSI yang disediakan dapat berinteraksi dengan modul keamanan perangkat keras (HSM) dan mengimplementasikan PKCS \$111 yang diperlukan dengan benar. APIs HSM dan perpustakaan bersama harus dapat menandatangani CSR, melakukan operasi TLS, dan memberikan panjang kunci yang benar dan algoritma kunci publik.  
Nilai yang valid adalah `yes` atau `no`.  
`ml`  
<a name="description-ml"></a>Memvalidasi bahwa perangkat memenuhi semua dependensi teknis yang diperlukan untuk melakukan inferensi ML secara lokal.  
Nilai yang valid dapat berupa kombinasi `mxnet`, `tensorflow`, `dlr`, dan `no` (misalnya, `mxnet`, `mxnet,tensorflow`, `mxnet,tensorflow,dlr`, atau `no`).  
`mlLambdaContainerizationMode`  
Memvalidasi bahwa perangkat memenuhi semua dependensi teknis yang diperlukan untuk melakukan inferensi ML dalam mode kontainer pada perangkat Greengrass.  
Nilai yang valid adalah `container`, `process`, atau `both`.  
`processor`  
Memvalidasi bahwa perangkat memenuhi semua persyaratan perangkat keras untuk jenis prosesor tertentu.  
Nilai yang valid adalah `cpu` atau `gpu`.
Jika Anda tidak ingin menggunakan `container`, `docker`, `streamManager`, `hsi`, atau `ml` fitur, Anda dapat mengatur sesuai `value` ke `no`.  
Docker hanya mendukung kualifikasi fitur untuk `streamManagement` dan `ml`.

`machineLearning`  
Tidak wajib. Informasi konfigurasi untuk tes kualifikasi ML. Untuk informasi selengkapnya, lihat [Konfigurasikan device.json untuk kualifikasi ML](#device-json-ml-qualification).

`hsm`  
Tidak wajib. Informasi konfigurasi untuk pengujian dengan Modul Keamanan AWS IoT Greengrass Perangkat Keras (HSM). Jika tidak, `hsm` properti harus dihilangkan. Untuk informasi selengkapnya, lihat [Integrasi keamanan perangkat keras](hardware-security.md).  
<a name="connectivity-protocol-ssh-only"></a>Properti ini hanya berlaku jika `connectivity.protocol` diatur ke `ssh`.    
`hsm.p11Provider`  
Jalur absolut ke perpustakaan libdl-loadable implementasi PKCS \$111.  
`hsm.slotLabel`  
Melabelkan slot yang digunakan untuk mengidentifikasi modul perangkat keras.  
`hsm.slotUserPin`  
PIN pengguna digunakan untuk mengotentikasi AWS IoT Greengrass inti ke modul.  
`hsm.privateKeyLabel`  
Label yang digunakan untuk mengidentifikasi kunci dalam modul perangkat keras.  
`hsm.openSSLEngine`  
Jalur absolut untuk OpenSSL file mesin `.so` yang memungkinkan dukungan PKCS \$111 di OpenSSL. Digunakan oleh agen pembaruan AWS IoT Greengrass OTA.

`devices.id`  
Pengenal unik yang ditetapkan pengguna untuk perangkat yang sedang diuji.

`connectivity.protocol`  
Protokol komunikasi yang digunakan untuk berkomunikasi dengan perangkat ini. Saat ini, satu-satunya nilai yang didukung adalah `ssh` untuk perangkat fisik dan `docker` untuk kontainer Docker.

`connectivity.ip`  
Alamat IP perangkat yang sedang dites.  
<a name="connectivity-protocol-ssh-only"></a>Properti ini hanya berlaku jika `connectivity.protocol` diatur ke `ssh`.

`connectivity.containerId`  
ID kontainer atau nama kontainer Docker yang sedang diuji.  
<a name="connectivity-protocol-docker-only"></a>Properti ini hanya berlaku jika `connectivity.protocol` diatur ke `docker`.

`connectivity.auth`  
Informasi autentikasi untuk koneksi tersebut.  
<a name="connectivity-protocol-ssh-only"></a>Properti ini hanya berlaku jika `connectivity.protocol` diatur ke `ssh`.    
`connectivity.auth.method`  
Metode autentikasi yang digunakan untuk mengakses perangkat melalui protokol konektivitas yang diberikan.  
Nilai yang didukung adalah:  
+ `pki`
+ `password`  
`connectivity.auth.credentials`  
Kredensial yang digunakan untuk autentikasi.    
`connectivity.auth.credentials.password`  
Kata sandi yang digunakan untuk masuk ke perangkat yang sedang diuji.  
Nilai ini hanya berlaku jika `connectivity.auth.method` diatur ke `password`.  
`connectivity.auth.credentials.privKeyPath`  
Jalur lengkap ke kunci privat yang digunakan untuk masuk ke perangkat yang sedang diuji.  
Nilai ini hanya berlaku jika `connectivity.auth.method` diatur ke `pki`.  
`connectivity.auth.credentials.user`  
Nama pengguna untuk masuk ke perangkat yang sedang di.tes.  
`connectivity.auth.credentials.privKeyPath`  
Jalur lengkap ke kunci privat yang digunakan untuk masuk ke perangkat yang sedang dites.

`connectivity.port`  
Tidak wajib. Jumlah port yang akan digunakan untuk koneksi SSH.  
Nilai default adalah 22.  
Properti ini berlaku hanya jika `connectivity.protocol` diatur ke `ssh`.

`greengrassLocation`  
Lokasi perangkat lunak AWS IoT Greengrass Core di perangkat Anda.  
Untuk perangkat fisik, nilai ini hanya digunakan ketika Anda menggunakan instalasi yang ada AWS IoT Greengrass. Gunakan atribut ini untuk memberitahu IDT untuk menggunakan versi AWS IoT Greengrass perangkat lunak inti yang diinstal pada perangkat Anda.  
Saat menjalankan pengujian dalam wadah Docker dari image Docker atau Dockerfile yang disediakan oleh AWS IoT Greengrass, setel nilai ini ke. `/greengrass`

`kernelConfigLocation`  
Tidak wajib. Jalur ke file konfigurasi kernel. AWS IoT Device Tester menggunakan file ini untuk memeriksa apakah perangkat memiliki fitur kernel yang diperlukan diaktifkan. Jika tidak ditentukan, IDT menggunakan jalur berikut untuk mencari file konfigurasi kernel: `/proc/config.gz` dan`/boot/config-<kernel-version>`. AWS IoT Tester Perangkat menggunakan jalur pertama menemukan.

## Konfigurasikan device.json untuk kualifikasi ML
<a name="device-json-ml-qualification"></a>

Bagian ini menjelaskan properti opsional dalam file konfigurasi perangkat yang berlaku untuk kualifikasi ML. Jika Anda berencana untuk menjalankan tes untuk kualifikasi ML, Anda harus menentukan properti yang berlaku untuk kasus penggunaan Anda.

Anda dapat menggunakan `device-ml.json` templat untuk menentukan pengaturan konfigurasi untuk perangkat Anda. Templat ini berisi properti opsional ML. Anda juga dapat menggunakan `device.json` dan menambahkan properti kualifikasi ML. File ini terletak di `<device-tester-extract-location>/configs` dan termasuk properti kualifikasi ML. Jika Anda menggunakan `device-ml.json`, Anda harus mengubah nama file ke `device.json` sebelum Anda menjalankan tes IDT.

Untuk informasi tentang properti konfigurasi perangkat yang tidak berlaku untuk kualifikasi ML, lihat [Konfigurasikan device.json](#device-config).

 

`ml` dalam `features` array  
Kerangka kerja ML bahwa papan forum mendukung. <a name="idt-version-ml-qualification"></a>Properti ini memerlukan IDT v3.1.0 atau yang lebih baru.  
+ Jika forum Anda hanya mendukung satu kerangka kerja, tentukan kerangka kerjanya. Contoh:

  ```
  {
      "name": "ml",
      "value": "mxnet"
  }
  ```
+ Jika forum Anda mendukung beberapa kerangka kerja, tentukan kerangka kerja sebagai daftar yang dipisahkan koma. Contoh:

  ```
  {
      "name": "ml",
      "value": "mxnet,tensorflow"
  }
  ```

`mlLambdaContainerizationMode` di `features` array  
Pada [Mode kontainerisasi](lambda-group-config.md#lambda-containerization-considerations) yang ingin Anda tes. <a name="idt-version-ml-qualification"></a>Properti ini memerlukan IDT v3.1.0 atau yang lebih baru.  
+ Memilih `process` untuk menjalankan kode inferensi ML dengan fungsi Lambda non-containerized. Opsi ini membutuhkan AWS IoT Greengrass v1.10.x atau yang lebih baru.
+ Memilih `container` untuk menjalankan kode inferensi ML dengan fungsi Lambda kontainer.
+ Memilih `both` untuk menjalankan kode inferensi ML dengan kedua mode. Opsi ini membutuhkan AWS IoT Greengrass v1.10.x atau yang lebih baru.

`processor` di `features` array  
Mengindikasikan akselerator perangkat keras yang didukung forum Anda. <a name="idt-version-ml-qualification"></a>Properti ini memerlukan IDT v3.1.0 atau yang lebih baru.  
+ Memilih `cpu` jika forum Anda menggunakan CPU sebagai prosesor.
+ Memilih `gpu` jika forum Anda menggunakan GPU sebagai prosesor.

`machineLearning`  
Tidak wajib. Informasi konfigurasi untuk tes kualifikasi ML. <a name="idt-version-ml-qualification"></a>Properti ini memerlukan IDT v3.1.0 atau yang lebih baru.    
`dlrModelPath`  
Diperlukan untuk menggunakan `dlr` kerangka kerja. Jalur absolut ke direktori model terkompilasi DLR Anda, yang harus diberi nama `resnet18`. Untuk informasi selengkapnya, lihat [Kompilasi model DLR](idt-ml-qualification.md#ml-qualification-dlr-compile-model).  
Berikut ini adalah contoh jalur di macOS: `/Users/<user>/Downloads/resnet18`.  
`environmentVariables`  
Array pasangan kunci-nilai yang dinamis dapat lulus pengaturan untuk tes inferensi ML. Opsional untuk perangkat CPU. Anda dapat menggunakan bagian ini untuk menambahkan variabel lingkungan khusus kerangka kerja yang diperlukan oleh jenis perangkat Anda. Untuk informasi tentang persyaratan ini, lihat situs resmi kerangka kerja atau perangkat. Misalnya, untuk menjalankan tes MXNet inferensi pada beberapa perangkat, variabel lingkungan berikut mungkin diperlukan.  

```
"environmentVariables": [
    ...
    {
        "key": "PYTHONPATH",      
        "value": "$MXNET_HOME/python:$PYTHONPATH"    
    },
    {
        "key": "MXNET_HOME",
        "value": "$HOME/mxnet/"
    },
    ...
]
```
`value`Bidang mungkin bervariasi berdasarkan MXNet instalasi Anda.
Jika anda sedang mengetes fungsi Lambda yang berjalan dengan [kontainerisasi](lambda-group-config.md#lambda-containerization-considerations) pada perangkat GPU, tambahkan variabel lingkungan untuk perpustakaan GPU. Hal ini memungkinkan GPU untuk melakukan komputasi. Untuk menggunakan perpustakaan GPU yang berbeda, lihat dokumentasi resmi untuk perpustakaan atau perangkat.  
Konfigurasikan kunci berikut jika `mlLambdaContainerizationMode` fitur diatur ke `container` atau `both`.

```
"environmentVariables": [
    {
        "key": "PATH",      
        "value": "<path/to/software/bin>:$PATH"    
    },
    {
        "key": "LD_LIBRARY_PATH",      
        "value": "<path/to/ld/lib>"    
    },
    ...
]
```  
`deviceResources`  
Diperlukan oleh perangkat GPU. Berisi [sumber daya lokal](access-local-resources.md#lra-resource-types) yang dapat diakses oleh fungsi Lambda. Gunakan bagian ini untuk menambahkan perangkat lokal dan volume sumber daya.  
+ Untuk sumber daya perangkat, tentukan `"type": "device"`. Untuk perangkat GPU, sumber daya perangkat harus berupa file perangkat terkait GPU di bawah `/dev`.
**catatan**  
Direktori `/dev/shm` adalah pengecualian. Hal ini dapat dikonfigurasi sebagai sumber daya volume saja.
+ Untuk sumber daya volume, tentukan `"type": "volume"`.

# Jalankan suite AWS IoT Greengrass kualifikasi
<a name="run-tests"></a>

Setelah Anda [mengatur konfigurasi yang diperlukan](set-config.md), Anda bisa memulai tes. Waktu aktif dari rangkaian uji penuh tergantung pada perangkat keras Anda. Untuk referensi, memakan waktu sekitar 30 menit untuk menyelesaikan tes suite penuh pada Raspberry Pi 3B.

Contoh berikut `run-suite` menunjukkan cara menjalankan tes kualifikasi untuk kolam perangkat. Kolam perangkat adalah satu set perangkat yang sama.

------
#### [ IDT v3.0.0 and later ]

Jalankan semua grup tes dalam tes suite tertentu.  

```
devicetester_[linux | mac | win_x86-64] run-suite --suite-id GGQ_1.0.0 --pool-id <pool-id>
```
Gunakan `list-suites` perintah untuk daftar tes suite yang ada di `tests` folder.

Jalankan grup tes tertentu dalam tes suite.  

```
devicetester_[linux | mac | win_x86-64] run-suite --suite-id GGQ_1.0.0 --group-id <group-id> --pool-id <pool-id>
```
Gunakan `list-groups` perintah untuk daftar grup tes di tes suite.

Jalankan kasus tes tertentu dalam grup tes.  

```
devicetester_[linux | mac | win_x86-64] run-suite --group-id <group-id> --test-id <test-id>
```

Jalankan beberapa tes kasus dalam grup tes.  

```
devicetester_[linux | mac | win_x86-64] run-suite --group-id <group-id> --test-id <test-id1>,<test-id2>
```

Daftar tes kasus dalam grup tes.  

```
devicetester_[linux | mac | win_x86-64] list-test-cases --group-id <group-id>
```

Opsi untuk `run-suite` perintah adalah opsional. Sebagai contoh, Anda dapat menghilangkan `pool-id` jika Anda hanya memiliki satu kolam perangkat yang didefinisikan di file `device.json` Anda. Atau, Anda bisa menghilangkan `suite-id` jika Anda ingin menjalankan folder `tests` versi terbaru.

**catatan**  
IDT meminta Anda jika versi rangkaian tes yang lebih baru tersedia secara online. Untuk informasi selengkapnya, lihat [Atur perilaku update default](#idt-update-behavior).

Untuk informasi lebih lanjut tentang `run-suite` dan perintah IDT lainnya, lihat [IDT untuk perintah AWS IoT Greengrass](#bk-cli).

------
#### [ IDT v2.3.0 and earlier ]

Jalankan semua grup tes di suite tertentu.  

```
devicetester_[linux | mac | win_x86-64] run-suite --suite-id GGQ_1 --pool-id <pool-id>
```

Jalankan grup tes tertentu.  

```
devicetester_[linux | mac | win_x86-64] run-suite --suite-id GGQ_1 --group-id <group-id> --pool-id <pool-id>
```
`suite-id` dan `pool-id` opsional jika Anda menjalankan tes suite tunggal pada kolam perangkat tunggal. Ini berarti bahwa Anda hanya memiliki satu perangkat kolam didefinisikan dalam file `device.json` Anda.

------

## Periksa depedensi Greengrass
<a name="idt-dependency-checker"></a>

Kami merekomendasikan Anda menjalankan grup tes pemeriksa dependensi untuk memastikan semua dependensi Greengrass diinstal sebelum Anda menjalankan grup tes terkait. Sebagai contoh:
+ Jalankan `ggcdependencies` sebelum menjalankan grup tes kualifikasi core.
+ Jalankan `containerdependencies` sebelum menjalankan grup tes kontainer-spesifik.
+ Jalankan `dockerdependencies` sebelum menjalankan grup tes Docker-spesifik.
+ Jalankan `ggcstreammanagementdependencies` sebelum menjalankan grup tes khusus pengelola aliran.

## Atur perilaku update default
<a name="idt-update-behavior"></a>

Ketika Anda memulai tes run, IDT memeriksa secara online untuk versi tes suite yang lebih baru. Jika tersedia, IDT meminta Anda untuk update ke versi terbaru yang tersedia. Anda dapat mengatur `upgrade-test-suite` (atau `u`) bendera untuk mengontrol perilaku update default. Nilai yang benar adalah:
+ `y`. IDT mengunduh dan menggunakan versi terbaru yang tersedia.
+ `n` (default). IDT menggunakan versi yang ditentukan dalam `suite-id` opsi. Jika `suite-id` tidak ditentukan, IDT menggunakan versi terbaru dalam folder `tests` ini.

Jika Anda tidak menyertakan `upgrade-test-suite` bendera, IDT meminta Anda ketika update tersedia dan menunggu 30 detik untuk input Anda (`y` atau `n`). Jika tidak ada input yang dimasukkan, defaultnya ke `n` dan terus menjalankan tes.

Contoh-contoh berikut menunjukkan kasus penggunaan umum untuk fitur ini:

**Secara otomatis menggunakan tes terbaru yang tersedia untuk grup uji.**  

```
devicetester_linux run-suite -u y --group-id mqtt --pool-id DevicePool1
```

**Jalankan pengujian dalam versi suite pengujian tertentu.**  

```
devicetester_linux run-suite -u n --suite-id GGQ_1.0.0 --group-id mqtt --pool-id DevicePool1
```

**Meminta pembaruan saat runtime.**  

```
devicetester_linux run-suite --pool-id DevicePool1
```

## IDT untuk perintah AWS IoT Greengrass
<a name="bk-cli"></a>

Perintah IDT terletak di `<device-tester-extract-location>/bin` direktori. Gunakan mereka untuk operasi berikut:

------
#### [ IDT v3.0.0 and later ]

`help`  <a name="idt-command-help"></a>
Daftar informasi tentang perintah yang ditentukan.

`list-groups`  <a name="idt-command-list-groups"></a>
Mendaftar grup dalam rangkaian tes yang diberikan.

`list-suites`  <a name="idt-command-list-suites"></a>
Mencantumkan rangkaian tes yang tersedia.

`list-supported-products`  
Daftar produk yang didukung, dalam AWS IoT Greengrass versi kasus ini, dan versi rangkaian pengujian untuk versi IDT saat ini.

`list-test-cases`  
Mencantumkan uji kasus dalam grup uji yang diberikan. Opsi berikut didukung:  
+ `group-id`. Grup uji yang harus dicari. Opsi ini diperlukan dan harus menentukan satu grup.

`run-suite`  
Menjalankan serangkaian tes pada kolam perangkat. Berikut ini adalah beberapa opsi yang didukung:  
+ `suite-id`. Versi rangkaian tes yang akan jalankan. Jika tidak ditentukan, IDT akan menggunakan versi terbaru dalam folder `tests`.
+ `group-id`. Grup uji yang akan jalankan, sebagai daftar yang dipisahkan koma. Jika tidak ditentukan, IDT akan menjalankan semua grup uji di rangkaian tes.
+ `test-id`. Uji kasus yang akan dijalankan, sebagai daftar yang dipisahkan koma. Ketika ditentukan, `group-id` harus menentukan satu grup.
+ `pool-id`. Kolam perangkat yang akan diuji. Anda harus menentukan kolam jika Anda memiliki beberapa perangkat kolam yang didefinisikan dalam file `device.json` Anda.
+ `upgrade-test-suite`. Mengontrol bagaimana update versi tes suite ditangani. Mulai IDT v3.0.0, IDT memeriksa secara online untuk memperbarui versi rangkaian pengujian. Untuk informasi selengkapnya, lihat [Versi rangkaian pengujian](idt-gg-qualification.md#idt-test-suite-versions).
+ `stop-on-first-failure`. Mengkonfigurasi IDT untuk menghentikan pelaksanaan pada kegagalan pertama. Pilihan ini harus digunakan dengan `group-id` untuk men-debug grup tes yang ditentukan. Jangan gunakan opsi ini ketika menjalankan tes suite penuh untuk menghasilkan laporan kualifikasi.
+ `update-idt`. Mengatur respon untuk prompt untuk update IDT. `Y` ketika input menghentikan pelaksanaan tes jika IDT mendeteksi ada versi yang lebih baru. `N` ketika input terus melaksanakan tes.
+ `update-managed-policy`. `Y` ketika input berhenti melaksanakan tes jika IDT mendeteksi bahwa kebijakan dikelola pengguna tidak diperbarui. `N` ketika input terus melaksanakan tes.
Untuk informasi lebih lanjut tentang `run-suite` opsi, gunakan `help` Opsi:  

```
devicetester_[linux | mac | win_x86-64] run-suite -h
```

------
#### [ IDT v2.3.0 and earlier ]

`help`  <a name="idt-command-help"></a>
Daftar informasi tentang perintah yang ditentukan.

`list-groups`  <a name="idt-command-list-groups"></a>
Mendaftar grup dalam rangkaian tes yang diberikan.

`list-suites`  <a name="idt-command-list-suites"></a>
Daftar tes suite yang tersedia.

`run-suite`  
Menjalankan serangkaian tes pada kolam perangkat.  
Untuk informasi lebih lanjut tentang `run-suite` opsi, gunakan `help` opsi:  

```
devicetester_[linux | mac | win_x86-64] run-suite -h
```

------

# Memahami hasil dan mencatat
<a name="results-logs"></a>

Bagian ini menjelaskan bagaimana melihat dan menafsirkan laporan hasil IDT dan mencatat. 

## Melihat Hasil
<a name="view-results"></a>

Saat berjalan, IDT menuliskan kesalahan ke konsol, file log, dan laporan tes. Setelah IDT menyelesaikan tes suite kualifikasi, menghasilkan dua laporan tes. Laporan-laporan ini dapat ditemukan di `<device-tester-extract-location>/results/<execution-id>/`. Kedua laporan menangkap hasil dari pelaksanaan kualifikasi tes suite.

`awsiotdevicetester_report.xml`Ini adalah laporan pengujian kualifikasi yang Anda kirimkan AWS untuk mencantumkan perangkat Anda di Katalog AWS Partner Perangkat. Laporan tersebut berisi elemen berikut:
+ Versi IDT.
+  AWS IoT Greengrass Versi yang diuji.
+ SKU dan nama kolam perangkat yang ditentukan dalam file `device.json`.
+ Fitur kolam perangkat yang ditentukan dalam file `device.json`.
+ Ringkasan agregat hasil tes.
+ Perincian hasil tes oleh perpustakaan yang dites berdasarkan fitur perangkat (sebagai contoh, akses sumber daya lokal, bayangan, MQTT, dan sebagainya).

`GGQ_Result.xml`Laporan ini dalam [format JUnit XHTML](https://llg.cubic.org/docs/junit/). Anda dapat mengintegrasikannya ke dalam integrasi berkelanjutan dan platform deployment seperti [Jenkins](https://jenkins.io/), [Bamboo](https://www.atlassian.com/software/bamboo), dan sebagainya. Laporan tersebut berisi elemen berikut:
+ Ringkasan agregat hasil pengujian.
+ Rincian hasil pengujian oleh AWS IoT Greengrass fungsionalitas yang diuji.

## Menafsirkan laporan IDT
<a name="interpreting-results-gg"></a>

Bagian laporan di `awsiotdevicetester_report.xml` atau `awsiotdevicetester_report.xml` daftar tes yang dijalankan dan hasilnya.

Menandai XML pertama `<testsuites>` berisi ringkasan pelaksanaan tes. Sebagai contoh:

```
<testsuites name="GGQ results" time="2299" tests="28" failures="0" errors="0" disabled="0">
```Atribut yang digunakan dalam tanda `<testsuites>`

`name`  
Nama dari tes suite.

`time`  
Waktu, dalam hitungan detik, yang dibutuhkan untuk menjalankan suite kualifikasi.

`tests`  
Jumlah tes yang dilaksanakan.

`failures`  
Jumlah tes yang dijalankan, tetapi tidak lulus.

`errors`  
Jumlah tes yang tidak dapat dilaksanakan oelh IDT.

`disabled`  
Atribut ini tidak digunakan dan dapat diabaikan.

File `awsiotdevicetester_report.xml` berisi sebuah tanda `<awsproduct>` yang berisi informasi tentang produk yang sedang dites dan fitur produk yang divalidasi setelah menjalankan tes suite.Atribut yang digunakan dalam tanda `<awsproduct>`

`name`  
Nama produk yang sedang diuji.

`version`  
Versi produk yang sedang diuji.

`features`  
Fitur divalidasi. Fitur yang ditandai sebagai `required` wajib mengirimkan forum Anda untuk kualifikasi. Potongan berikut menunjukkan bagaimana informasi ini muncul di `awsiotdevicetester_report.xml` file.  

```
<feature name="aws-iot-greengrass-no-container" value="supported" type="required"></feature>
```
Fitur yang ditandai sebagai `optional` tidak diperlukan untuk kualifikasi. Potongan berikut menunjukkan fitur opsional.  

```
<feature name="aws-iot-greengrass-container" value="supported" type="optional"></feature> 
<feature name="aws-iot-greengrass-hsi" value="not-supported" type="optional"></feature>
```

Jika tidak ada kegagalan pengujian atau kesalahan untuk fitur yang diperlukan, perangkat Anda memenuhi persyaratan teknis untuk dijalankan AWS IoT Greengrass dan dapat beroperasi dengan AWS IoT layanan. Jika ingin mencantumkan perangkat di Katalog AWS Partner Perangkat, Anda dapat menggunakan laporan ini sebagai bukti kualifikasi.

Jika terjadi kegagalan atau kesalahan uji, Anda dapat mengidentifikasi pengujian yang gagal tersebut dengan meninjau tanda XML `<testsuites>`. Tag XML `<testsuite>` di dalam tag `<testsuites>` menunjukkan ringkasan hasil tes untuk grup uji. Sebagai contoh:

```
<testsuite name="combination" package="" tests="1" failures="0" time="161" disabled="0" errors="0" skipped="0">
```

Format ini serupa dengan tanda `<testsuites>`, tetapi dengan atribut `skipped` yang tidak digunakan dan dapat diabaikan. Di dalam masing-masing tanda XML `<testsuite>`, terdapat tanda `<testcase>` untuk setiap tes yang dieksekusi untuk suatu grup uji. Sebagai contoh:

```
<testcase classname="Security Combination (IPD + DCM) Test Context" name="Security Combination IP Change Tests sec4_test_1: Should rotate server cert when IPD disabled and following changes are made:Add CIS conn info and Add another CIS conn info" attempts="1"></testcase>>
```Atribut yang digunakan dalam tanda `<testcase>`

`name`  
Nama tes.

`attempts`  
Berapa kali IDT mengeksekusi uji kasus.

Ketika tes gagal atau kesalahan terjadi, tag `<failure>` atau `<error>` akan ditambahkan ke tag `<testcase>` dengan informasi untuk pemecahan masalah. Sebagai contoh:

```
<testcase classname="mcu.Full_MQTT" name="AFQP_MQTT_Connect_HappyCase" attempts="1">
	<failure type="Failure">Reason for the test failure</failure>
	<error>Reason for the test execution error</error>
</testcase>
```

## Melihat log
<a name="view-logs-gg"></a>

IDT menghasilkan log dari pelaksanaan tes di `<devicetester-extract-location>/results/<execution-id>/logs`. Dua set log dihasilkan:

`test_manager.log`  
Log yang dihasilkan dari komponen Test Manager AWS IoT Device Tester (misalnya, log yang terkait dengan konfigurasi, pengurutan pengujian, dan pembuatan laporan).

`<test_case_id>.log (for example, ota.log)`  
Log dari grup tes, termasuk log dari perangkat yang dites. Ketika tes gagal, file tar.gz yang berisi log perangkat yang dites untuk tes dibuat (sebagai contoh, `ota_prod_test_1_ggc_logs.tar.gz`).

Untuk informasi selengkapnya, lihat [IDT untuk AWS IoT Greengrass pemecahan masalah](idt-troubleshooting.md).

# Gunakan IDT untuk mengembangkan dan menjalankan rangkain tes Anda sendiri
<a name="idt-custom-tests"></a>

<a name="idt-byotc"></a>Mulai IDT v4.0.0, IDT untuk AWS IoT Greengrass menggabungkan pengaturan konfigurasi standar dan format hasil dengan lingkungan rangkaian pengujian yang memungkinkan Anda mengembangkan rangkaian pengujian khusus untuk perangkat dan perangkat lunak perangkat Anda. Anda dapat menambahkan tes khusus untuk validasi internal Anda sendiri atau memberikannya kepada pelanggan Anda untuk verifikasi perangkat.

Gunakan IDT untuk mengembangkan dan menjalankan rangkaian tes kustom, sebagai berikut:

**Untuk mengembangkan suite uji khusus**  
+ Buat rangkaian test dengan logika tes kustom untuk perangkat Greengrass yang ingin Anda uji.
+ Sediakan IDT dengan rangkaian tes kustom Anda untuk menguji runner. Sertakan informasi tentang konfigurasi pengaturan khusus untuk rangkaian pengujian Anda.

**Untuk menjalankan suite pengujian kustom**  
+ Atur perangkat yang ingin Anda uji.
+ Terapkan konfigurasi pengaturan yang diperlukan oleh rangkaian tes yang ingin Anda gunakan.
+ Gunakan IDT untuk menjalankan rangkaian tes kustom Anda.
+ Lihat hasil tes dan log eksekusi untuk tes yang dijalankan oleh IDT.

## Unduh versi terbaru AWS IoT Device Tester untuk AWS IoT Greengrass
<a name="install-dev-tst-gg"></a>

Unduh [versi terbaru](dev-test-versions.md) IDT dan mengekstraksi perangkat lunak ke lokasi pada sistem file Anda di mana Anda telah membaca dan menulis izin. 

**catatan**  
<a name="unzip-package-to-local-drive"></a>IDT tidak mendukung yang sedang dijalankan oleh beberapa pengguna dari lokasi bersama, seperti direktori NFS atau folder bersama jaringan Windows. Kami sarankan Anda mengekstraksi paket IDT ke drive lokal dan menjalankan biner IDT pada workstation lokal Anda.  
Windows memiliki batasan panjang jalur 260 karakter. Jika Anda menggunakan Windows, ekstraksi IDT ke direktori root seperti `C:\ ` atau `D:\` agar jalur Anda tetap di bawah batas 260 karakter.

## Alur kerja pembuatan rangkaian uji
<a name="custom-test-workflow"></a>

Rangkaian uji terdiri dari tiga jenis file:
+ File konfigurasi JSON yang menyediakan IDT dengan informasi tentang cara menjalankan rangkaiain tes.
+ File yang dapat dieksekusi yang digunakan oleh IDT untuk menjalankan uji kasus.
+ File tambahan diperlukan untuk menjalankan tes.

Selesaikan langkah-langkah dasar berikut untuk membuat tes IDT kustom:

1. [Buat file konfigurasi JSON](idt-json-config.md) untuk rangkaian tes Anda.

1. [Buat uji kasus yang dapat dieksekusi](test-executables.md) yang berisi logika ujian untuk rangkaian tes anda. 

1. Verifikasi dan dokumentasi [informasi konfigurasi yang diperlukan untuk menguji runner](set-config-custom.md) untuk menjalankan rangkaian tes.

1. Verifikasi bahwa IDT dapat menjalankan rangkain tes Anda dan buat [hasil pengujian](run-tests-custom.md) seperti yang diharapkan.

Untuk cepat membangun rangkaian kustom sampel dan menjalankannya, ikuti petunjuk di [Tutorial: Bangun dan jalankan sampel rangkaian tes IDT](build-sample-suite.md). 

Untuk memulai membuat rangkaian tes kustom di Python, lihat [Tutorial: Kembangkan rangkaian tes IDT sederhana](create-custom-tests.md).

# Tutorial: Bangun dan jalankan sampel rangkaian tes IDT
<a name="build-sample-suite"></a>

Unduhan AWS IoT Device Tester menyertakan kode sumber untuk rangkaian pengujian sampel. Anda dapat menyelesaikan tutorial ini untuk membangun dan menjalankan rangkaian pengujian sampel untuk memahami bagaimana Anda dapat menggunakan AWS IoT Device Tester AWS IoT Greengrass untuk menjalankan suite pengujian kustom.

 Dalam tutorial ini, Anda akan melakukan langkah-langkah berikut: 

1. [Bangun rangkaian uji sampel](#build-sample)

1. [Gunakan IDT untuk menjalankan rangkaian uji sampel](#run-sample)

## Prasyarat
<a name="prereqs-tutorial-sample"></a>

Untuk menyelesaikan tutorial ini, Anda memerlukan hal berikut ini: <a name="prereqs-list"></a>
+ 

**Persyaratan komputer host**
  + Versi terbaru dari AWS IoT Device Tester
  + [Python](https://www.python.org/downloads/) 3.7 atau yang lebih baru

    Untuk memeriksa versi Python yang diinstal pada komputer Anda, jalankan perintah berikut:

    ```
    python3 --version
    ```

    Pada Windows, jika penggunaan perintah ini menghasilkan kesalahan, gunakan `python --version` sebagai gantinya. Jika nomor versi yang dikembalikan adalah 3,7 atau lebih besar, jalankan perintah berikut di terminal Powershell untuk mengatur `python3` sebagai alias untuk perintah `python`. 

    ```
    Set-Alias -Name "python3" -Value "python"
    ```

    Jika tidak ada informasi versi yang dikembalikan atau jika nomor versi kurang dari 3,7, ikuti petunjuk di [Mengunduh Py](https://wiki.python.org/moin/BeginnersGuide/Download) untuk menginstal Python 3.7\$1. Untuk informasi selengkapnya, lihat [dokumentasi Python](https://docs.python.org).
  + [urllib3](https://urllib3.readthedocs.io/en/latest/)

    Untuk memverifikasi bahwa `urllib3` diinstal dengan benar, jalankan perintah berikut:

    ```
    python3 -c 'import urllib3'
    ```

    Jika `urllib3` belum terinstal, gunakan perintah berikut untuk menginstalnya:

    ```
    python3 -m pip install urllib3
    ```
+ 

**Persyaratan perangkat**
  + Perangkat dengan sistem operasi Linux dan koneksi jaringan ke jaringan yang sama dengan komputer host Anda. 

    Kami menyarankan agar Anda menggunakan [Raspberry Pi](https://www.raspberrypi.org/) dengan OS Raspberry Pi. Pastikan Anda mengatur [SSH](https://www.raspberrypi.org/documentation/remote-access/ssh/) pada Raspberry Pi Anda untuk terhubung secara jarak jauh ke sana.

## Konfigurasi informasi perangkat untuk IDT
<a name="configure-idt-sample"></a>

Konfigurasi informasi perangkat Anda untuk IDT untuk menjalankan tes. Anda harus memperbarui templat `device.json` yang terletak di folder `<device-tester-extract-location>/configs` dengan informasi berikut.

```
[
  {
    "id": "pool",
    "sku": "N/A",
    "devices": [
      {
        "id": "<device-id>",
        "connectivity": {
          "protocol": "ssh",
          "ip": "<ip-address>",
          "port": "<port>",
          "auth": {
            "method": "pki | password",
            "credentials": {
              "user": "<user-name>",
              "privKeyPath": "/path/to/private/key",
              "password": "<password>"
            }
          }
        }
      }
    ]
  }
]
```

Di objek `devices`, berikan informasi berikut:

`id`  
Pengenal unik yang ditetapkan pengguna untuk perangkat Anda.

`connectivity.ip`  
Alamat IP perangkat Anda.

`connectivity.port`  
Tidak wajib. Nomor port yang digunakan untuk koneksi SSH ke perangkat Anda.

`connectivity.auth`  
Informasi autentikasi untuk koneksi tersebut.  
Properti ini hanya berlaku jika `connectivity.protocol` diatur ke `ssh`.    
`connectivity.auth.method`  
Metode autentikasi yang digunakan untuk mengakses perangkat melalui protokol konektivitas yang diberikan.  
Nilai yang didukung adalah:  
+ `pki`
+ `password`  
`connectivity.auth.credentials`  
Kredensial yang digunakan untuk autentikasi.    
`connectivity.auth.credentials.user`  
Nama pengguna yang digunakan untuk masuk ke perangkat Anda.  
`connectivity.auth.credentials.privKeyPath`  
Jalur lengkap ke kunci pribadi yang digunakan untuk masuk ke perangkat Anda.  
Nilai ini hanya berlaku jika `connectivity.auth.method` diatur ke `pki`.  
`devices.connectivity.auth.credentials.password`  
Kata sandi yang digunakan untuk masuk ke perangkat Anda.  
Nilai ini hanya berlaku jika `connectivity.auth.method` diatur ke `password`.

**catatan**  
Tentukan `privKeyPath` hanya jika `method` diatur ke `pki`.  
Tentukan `password` hanya jika `method` diatur ke `password`.

## Bangun rangkaian uji sampel
<a name="build-sample"></a>

Folder `<device-tester-extract-location>/samples/python` berisi contoh file konfigurasi, kode sumber, dan SDK Klien IDT yang dapat Anda gabungkan ke dalam rangkaian tes dengan menggunakan skrip build yang disediakan. Pohon direktori berikut menunjukkan lokasi file contoh ini:

```
<device-tester-extract-location>
├── ...
├── tests
├── samples
│   ├── ...
│   └── python
│       ├── configuration
│       ├── src
│       └── build-scripts
│           ├── build.sh
│           └── build.ps1
└── sdks
    ├── ...
    └── python
        └── idt_client
```

Untuk membangun rangkaian tes, jalankan perintah berikut pada komputer host Anda:

------
#### [ Windows ]

```
cd <device-tester-extract-location>/samples/python/build-scripts
./build.ps1
```

------
#### [ Linux, macOS, or UNIX ]

```
cd <device-tester-extract-location>/samples/python/build-scripts
./build.sh
```

------

Hal ini akan menciptakan rangkaian uji sampel di folder `IDTSampleSuitePython_1.0.0` dalam folder `<device-tester-extract-location>/tests`. Tinjau file di folder `IDTSampleSuitePython_1.0.0` untuk memahami bagaimana sampel rangkaian tes dibangun dan untuk melihat berbagai contoh uji kasus executable dan konfigurasi tes file JSON. 

Langkah berikutnya: Gunakan IDT untuk [menjalankan rangkaian tes sampel](#run-sample) yang Anda buat.

## Gunakan IDT untuk menjalankan rangkaian uji sampel
<a name="run-sample"></a>

Untuk membangun rangkaian tes, jalankan perintah berikut pada komputer host Anda: 

```
cd <device-tester-extract-location>/bin
./devicetester_[linux | mac | win_x86-64] run-suite --suite-id IDTSampleSuitePython
```

IDT menjalankan sampel rangkaian tes dan mengalirkan hasil ke konsol. Ketika tes telah selesai berjalan, Anda akan melihat informasi berikut:

```
========== Test Summary ==========
Execution Time:         5s
Tests Completed:        4
Tests Passed:           4
Tests Failed:           0
Tests Skipped:          0
----------------------------------
Test Groups:
    sample_group:       PASSED
----------------------------------
Path to IoT Device Tester Report: /path/to/devicetester/results/87e673c6-1226-11eb-9269-8c8590419f30/awsiotdevicetester_report.xml
Path to Test Execution Logs: /path/to/devicetester/results/87e673c6-1226-11eb-9269-8c8590419f30/logs
Path to Aggregated JUnit Report: /path/to/devicetester/results/87e673c6-1226-11eb-9269-8c8590419f30/IDTSampleSuitePython_Report.xml
```

## Pemecahan masalah
<a name="tutorial-troubleshooting-custom"></a>

Gunakan informasi berikut untuk membantu menyelesaikan masalah dengan menyelesaikan tutorial.

**Uji kasus tidak berjalan dengan sukses**  
Jika tes tidak berjalan sukses, IDT akan mengalirkan log kesalahan ke konsol yang dapat membantu Anda memecahkan masalah uji coba. Pastikan Anda memenuhi semua [prasyarat](#prereqs-tutorial-sample) untuk tutorial ini.

**Tidak dapat menyambung ke perangkat yang sedang diuji**

Verifikasi hal berikut:
+ File `device.json` Anda berisi alamat IP, port, dan informasi autentikasi yang benar.
+ Anda dapat terhubung ke perangkat Anda melalui SSH dari komputer host Anda.

# Tutorial: Kembangkan rangkaian tes IDT sederhana
<a name="create-custom-tests"></a>

Rangkaian tes menggabungkan hal berikut:
+ Executable tes yang berisi logika tes
+ File konfigurasi JSON yang menggambarkan rangkaian tes

Tutorial ini menunjukkan cara menggunakan IDT AWS IoT Greengrass untuk mengembangkan rangkaian pengujian Python yang berisi satu kasus uji. Dalam tutorial ini, Anda akan melakukan langkah-langkah berikut: 

1. [Buat direktori rangkaian tes](#test-suite-dir)

1. [Buat file konfigurasi JSON](#test-suite-json)

1. [Buat executable uji kasus](#test-suite-exe)

1. [Jalankan rangkaian tes](#run-test-suite)

## Prasyarat
<a name="prereqs-tutorial-custom"></a>

Untuk menyelesaikan tutorial ini, Anda memerlukan hal berikut ini: <a name="prereqs-list"></a>
+ 

**Persyaratan komputer host**
  + Versi terbaru dari AWS IoT Device Tester
  + [Python](https://www.python.org/downloads/) 3.7 atau yang lebih baru

    Untuk memeriksa versi Python yang diinstal pada komputer Anda, jalankan perintah berikut:

    ```
    python3 --version
    ```

    Pada Windows, jika penggunaan perintah ini menghasilkan kesalahan, gunakan `python --version` sebagai gantinya. Jika nomor versi yang dikembalikan adalah 3,7 atau lebih besar, jalankan perintah berikut di terminal Powershell untuk mengatur `python3` sebagai alias untuk perintah `python`. 

    ```
    Set-Alias -Name "python3" -Value "python"
    ```

    Jika tidak ada informasi versi yang dikembalikan atau jika nomor versi kurang dari 3,7, ikuti petunjuk di [Mengunduh Py](https://wiki.python.org/moin/BeginnersGuide/Download) untuk menginstal Python 3.7\$1. Untuk informasi selengkapnya, lihat [dokumentasi Python](https://docs.python.org).
  + [urllib3](https://urllib3.readthedocs.io/en/latest/)

    Untuk memverifikasi bahwa `urllib3` diinstal dengan benar, jalankan perintah berikut:

    ```
    python3 -c 'import urllib3'
    ```

    Jika `urllib3` belum terinstal, gunakan perintah berikut untuk menginstalnya:

    ```
    python3 -m pip install urllib3
    ```
+ 

**Persyaratan perangkat**
  + Perangkat dengan sistem operasi Linux dan koneksi jaringan ke jaringan yang sama dengan komputer host Anda. 

    Kami menyarankan agar Anda menggunakan [Raspberry Pi](https://www.raspberrypi.org/) dengan OS Raspberry Pi. Pastikan Anda mengatur [SSH](https://www.raspberrypi.org/documentation/remote-access/ssh/) pada Raspberry Pi Anda untuk terhubung secara jarak jauh ke sana.

## Buat direktori rangkaian tes
<a name="test-suite-dir"></a>

IDT secara logis memisahkan uji kasus ke dalam grup uji dalam setiap rangkaian tes. Setiap uji kasus harus berada di dalam grup uji. Untuk tutorial ini, buat folder bernama `MyTestSuite_1.0.0` dan buat pohon direktori berikut dalam folder ini:

```
MyTestSuite_1.0.0
└── suite
    └── myTestGroup
        └── myTestCase
```

## Buat file konfigurasi JSON
<a name="test-suite-json"></a>

Rangkaian tes Anda harus berisi [file konfigurasi JSON](idt-json-config.md) yang diperlukan berikut ini:<a name="required-json"></a>File JSON yang dibutuhkan

`suite.json`  
Berisi informasi tentang rangkaian pengujian. Lihat [Konfigurasikan suite.json](idt-json-config.md#suite-json).

`group.json`  
Berisi informasi tentang grup uji. Anda harus membuat file `group.json` untuk setiap grup uji di rangkaian tes Anda. Lihat [Konfigurasikan group.json](idt-json-config.md#group-json).

`test.json`  
Berisi informasi tentang grup uji. Anda harus membuat file `test.json` untuk setiap grup uji di rangkaian tes Anda. Lihat [Konfigurasikan test.json](idt-json-config.md#test-json).

1. Di folder `MyTestSuite_1.0.0/suite`, buat file `suite.json` dengan struktur berikut:

   ```
   {
       "id": "MyTestSuite_1.0.0",
       "title": "My Test Suite",
       "details": "This is my test suite.",
       "userDataRequired": false
   }
   ```

1. Di folder `MyTestSuite_1.0.0/myTestGroup`, buat file `group.json` dengan struktur berikut:

   ```
   {
       "id": "MyTestGroup",
       "title": "My Test Group",
       "details": "This is my test group.",
       "optional": false
   }
   ```

1. Di folder `MyTestSuite_1.0.0/myTestGroup/myTestCase`, buat file `test.json` dengan struktur berikut:

   ```
   {
       "id": "MyTestCase",
       "title": "My Test Case",
       "details": "This is my test case.",
       "execution": {
           "timeout": 300000,
           "linux": {
               "cmd": "python3",
               "args": [
                   "myTestCase.py"
               ]
           },
           "mac": {
               "cmd": "python3",
               "args": [
                   "myTestCase.py"
               ]
           },
           "win": {
               "cmd": "python3",
               "args": [
                   "myTestCase.py"
               ]
           }
       }
   }
   ```

Pohon direktori untuk folder `MyTestSuite_1.0.0` Anda sekarang akan terlihat seperti berikut ini:

```
MyTestSuite_1.0.0
└── suite
    ├── suite.json
    └── myTestGroup
        ├── group.json
        └── myTestCase
            └── test.json
```

## Dapatkan SDK klien IDT
<a name="add-idt-sdk"></a>

Anda menggunakan [SDK Klien IDT](test-executables.md#idt-client-sdk) untuk memungkinkan IDT berinteraksi dengan perangkat yang sedang diuji dan melaporkan hasil pengujian. Untuk tutorial ini, Anda akan menggunakan versi Python dari SDK. 

Dari folder `<device-tester-extract-location>/sdks/python/`, salin folder `idt_client` ke folder `MyTestSuite_1.0.0/suite/myTestGroup/myTestCase` Anda. 

Untuk memverifikasi bahwa SDK berhasil disalin, jalankan perintah berikut.

```
cd MyTestSuite_1.0.0/suite/myTestGroup/myTestCase
python3 -c 'import idt_client'
```

## Buat executable uji kasus
<a name="test-suite-exe"></a>

Executable uji kasus berisi logika tes yang ingin Anda jalankan. Sebuah rangkaian tes dapat berisi beberapa executable uji kasus. Untuk tutorial ini, Anda hanya akan membuat satu executable uji kasus.

1. Buat file rangkaian test.

   Di folder `MyTestSuite_1.0.0/suite/myTestGroup/myTestCase`, buat file `myTestCase.py` dengan konten berikut:

   ```
   from idt_client import *
   
   def main():
       # Use the client SDK to communicate with IDT
       client = Client()
   
   if __name__ == "__main__":
       main()
   ```

1. Gunakan fungsi SDK klien untuk menambahkan logika uji berikut ke file `myTestCase.py` Anda:

   1. Jalankan perintah SSH pada perangkat yang diuji.

      ```
      from idt_client import *
      
      def main():
          # Use the client SDK to communicate with IDT
          client = Client()
          
          # Create an execute on device request
          exec_req = ExecuteOnDeviceRequest(ExecuteOnDeviceCommand("echo 'hello world'"))
          
          # Run the command
          exec_resp = client.execute_on_device(exec_req)
          
          # Print the standard output
          print(exec_resp.stdout)
      
      if __name__ == "__main__":
          main()
      ```

   1. Kirim hasil tes ke IDT.

      ```
      from idt_client import *
      
      def main():
          # Use the client SDK to communicate with IDT
          client = Client()
          
          # Create an execute on device request
          exec_req = ExecuteOnDeviceRequest(ExecuteOnDeviceCommand("echo 'hello world'"))
          
          # Run the command
          exec_resp = client.execute_on_device(exec_req)
          
          # Print the standard output
          print(exec_resp.stdout)
      
          # Create a send result request
          sr_req = SendResultRequest(TestResult(passed=True))
           
          # Send the result
          client.send_result(sr_req)
             
      if __name__ == "__main__":
          main()
      ```

## Konfigurasi informasi perangkat untuk IDT
<a name="configure-idt-sample"></a>

Konfigurasi informasi perangkat Anda untuk IDT untuk menjalankan tes. Anda harus memperbarui templat `device.json` yang terletak di folder `<device-tester-extract-location>/configs` dengan informasi berikut.

```
[
  {
    "id": "pool",
    "sku": "N/A",
    "devices": [
      {
        "id": "<device-id>",
        "connectivity": {
          "protocol": "ssh",
          "ip": "<ip-address>",
          "port": "<port>",
          "auth": {
            "method": "pki | password",
            "credentials": {
              "user": "<user-name>",
              "privKeyPath": "/path/to/private/key",
              "password": "<password>"
            }
          }
        }
      }
    ]
  }
]
```

Di objek `devices`, berikan informasi berikut:

`id`  
Pengenal unik yang ditetapkan pengguna untuk perangkat Anda.

`connectivity.ip`  
Alamat IP perangkat Anda.

`connectivity.port`  
Tidak wajib. Nomor port yang digunakan untuk koneksi SSH ke perangkat Anda.

`connectivity.auth`  
Informasi autentikasi untuk koneksi tersebut.  
Properti ini hanya berlaku jika `connectivity.protocol` diatur ke `ssh`.    
`connectivity.auth.method`  
Metode autentikasi yang digunakan untuk mengakses perangkat melalui protokol konektivitas yang diberikan.  
Nilai yang didukung adalah:  
+ `pki`
+ `password`  
`connectivity.auth.credentials`  
Kredensial yang digunakan untuk autentikasi.    
`connectivity.auth.credentials.user`  
Nama pengguna yang digunakan untuk masuk ke perangkat Anda.  
`connectivity.auth.credentials.privKeyPath`  
Jalur lengkap ke kunci pribadi yang digunakan untuk masuk ke perangkat Anda.  
Nilai ini hanya berlaku jika `connectivity.auth.method` diatur ke `pki`.  
`devices.connectivity.auth.credentials.password`  
Kata sandi yang digunakan untuk masuk ke perangkat Anda.  
Nilai ini hanya berlaku jika `connectivity.auth.method` diatur ke `password`.

**catatan**  
Tentukan `privKeyPath` hanya jika `method` diatur ke `pki`.  
Tentukan `password` hanya jika `method` diatur ke `password`.

## Jalankan rangkaian tes
<a name="run-test-suite"></a>

Setelah Anda membuat rangkaian tes Anda, Anda ingin memastikan bahwa rangkaian tes itu berfungsi seperti yang diharapkan. Selesaikan langkah-langkah berikut untuk menjalankan rangkaian pengujian dengan kolam perangkat yang sudah ada untuk melakukannya.

1. Salin folder `MyTestSuite_1.0.0` Anda ke dalam `<device-tester-extract-location>/tests`.

1. Jalankan perintah berikut:

   ```
   cd <device-tester-extract-location>/bin
   ./devicetester_[linux | mac | win_x86-64] run-suite --suite-id MyTestSuite
   ```

IDT menjalankan rangkaian tes Anda dan mengalirkan hasilnya ke konsol. Ketika tes telah selesai berjalan, Anda akan melihat informasi berikut:

```
time="2020-10-19T09:24:47-07:00" level=info msg=Using pool: pool
time="2020-10-19T09:24:47-07:00" level=info msg=Using test suite "MyTestSuite_1.0.0" for execution
time="2020-10-19T09:24:47-07:00" level=info msg=b'hello world\n' suiteId=MyTestSuite groupId=myTestGroup testCaseId=myTestCase deviceId=my-device executionId=9a52f362-1227-11eb-86c9-8c8590419f30
time="2020-10-19T09:24:47-07:00" level=info msg=All tests finished. executionId=9a52f362-1227-11eb-86c9-8c8590419f30
time="2020-10-19T09:24:48-07:00" level=info msg=

========== Test Summary ==========
Execution Time:         1s
Tests Completed:        1
Tests Passed:           1
Tests Failed:           0
Tests Skipped:          0
----------------------------------
Test Groups:
    myTestGroup:        PASSED
----------------------------------
Path to IoT Device Tester Report: /path/to/devicetester/results/9a52f362-1227-11eb-86c9-8c8590419f30/awsiotdevicetester_report.xml
Path to Test Execution Logs: /path/to/devicetester/results/9a52f362-1227-11eb-86c9-8c8590419f30/logs
Path to Aggregated JUnit Report: /path/to/devicetester/results/9a52f362-1227-11eb-86c9-8c8590419f30/MyTestSuite_Report.xml
```

## Pemecahan masalah
<a name="tutorial-troubleshooting"></a>

Gunakan informasi berikut untuk membantu menyelesaikan masalah dengan menyelesaikan tutorial.

**Uji kasus tidak berjalan dengan sukses**

Jika tes tidak berjalan sukses, IDT akan mengalirkan log kesalahan ke konsol yang dapat membantu Anda memecahkan masalah uji coba. Sebelum Anda memeriksa log kesalahan, verifikasi hal berikut:
+ SDK Klien IDT berada dalam folder yang benar seperti yang dijelaskan dalam [langkah ini](#add-idt-sdk).
+ Pastikan Anda memenuhi semua [prasyarat](#prereqs-tutorial-custom) untuk tutorial ini.

**Tidak dapat menyambung ke perangkat yang sedang diuji**

Verifikasi hal berikut:
+ File `device.json` Anda berisi alamat IP, port, dan informasi autentikasi yang benar.
+ Anda dapat terhubung ke perangkat Anda melalui SSH dari komputer host Anda.

# Buat file konfigurasi rangkaian tes IDT
<a name="idt-json-config"></a>

Bagian ini menjelaskan format di mana Anda membuat file konfigurasi JSON yang Anda sertakan ketika Anda menyusun rangkaian uji kustom.<a name="required-json"></a>File JSON yang dibutuhkan

`suite.json`  
Berisi informasi tentang rangkaian pengujian. Lihat [Konfigurasikan suite.json](#suite-json).

`group.json`  
Berisi informasi tentang grup uji. Anda harus membuat file `group.json` untuk setiap grup uji di rangkaian tes Anda. Lihat [Konfigurasikan group.json](#group-json).

`test.json`  
Berisi informasi tentang grup uji. Anda harus membuat file `test.json` untuk setiap grup uji di rangkaian tes Anda. Lihat [Konfigurasikan test.json](#test-json).File JSON opsional

`state_machine.json`  
Menentukan bagaimana tes akan dijalankan ketika IDT menjalankan rangkaian tes. Lihat [Konfigurasikan state\$1machine.json](#state-machine-json).

`userdata_schema.json`  
Menentukan skema untuk [file `userdata.json`](set-config-custom.md#userdata-config-custom) yang dapat disertakan oleh test runner dalam konfigurasi pengaturannya. File `userdata.json` digunakan untuk konfigurasi informasi tambahan apa pun yang diperlukan untuk menjalankan tes tetapi tidak terdapat dalam file `device.json`. Lihat [Konfigurasikan userdata\$1schema.json](#userdata-schema-json).

File konfigurasi JSON ditempatkan pada `<custom-test-suite-folder>` Anda seperti yang ditunjukkan di sini.

```
<custom-test-suite-folder>
└── suite
    ├── suite.json
    ├── state_machine.json
    ├── userdata_schema.json
    ├── <test-group-folder>
        ├── group.json
        ├── <test-case-folder>
            └── test.json
```

## Konfigurasikan suite.json
<a name="suite-json"></a>

File `suite.json` menetapkan variabel lingkungan dan menentukan apakah data pengguna diperlukan untuk menjalankan rangkaian tes. Gunakan templat berikut untuk mengonfigurasi file `<custom-test-suite-folder>/suite/suite.json` Anda: 

```
{
    "id": "<suite-name>_<suite-version>",
    "title": "<suite-title>",
    "details": "<suite-details>",
    "userDataRequired": true | false,
    "environmentVariables": [
        {
            "key": "<name>",
            "value": "<value>",
        },
        ...
        {
            "key": "<name>",
            "value": "<value>",
        }
    ]
}
```

Semua kolom yang berisi nilai wajib diisi seperti yang dijelaskan di sini:

`id`  
ID unik yang ditetapkan pengguna untuk rangkaian uji. Nilai dari `id` harus cocok dengan nama folder rangkaian uji tempat file `suite.json` berada. Nama rangkaian dan versi rangkaian juga harus memenuhi persyaratan berikut:   
+ `<suite-name>` tidak dapat berisi garis bawah.
+ `<suite-version>` dilambangkan sebagai `x.x.x`, di mana `x` adalah angka.
ID ditampilkan dalam laporan uji yang dihasilkan IDT.

`title`  
Nama yang ditetapkan pengguna untuk produk atau fitur yang diuji oleh rangkaian tes ini. Nama ditampilkan dalam IDT CLI untuk test runner.

`details`  
Deskripsi singkat tentang tujuan dari rangkaian tes.

`userDataRequired`  
Menentukan apakah test runner perlu menyertakan informasi kustom dalam file `userdata.json`. Jika Anda menetapkan nilai ini ke `true`, Anda juga harus menyertakan [file `userdata_schema.json`](#userdata-schema-json) dalam folder rangkaian uji Anda.

`environmentVariables`  
Tidak wajib. Serangkaian variabel lingkungan yang akan ditetapkan untuk rangkaian tes ini.    
`environmentVariables.key`  
Nama variabel lingkungan.  
`environmentVariables.value`  
Nilai variabel lingkungan.

## Konfigurasikan group.json
<a name="group-json"></a>

File `group.json` menentukan apakah grup uji itu wajib atau opsional. Gunakan templat berikut untuk mengonfigurasi file `<custom-test-suite-folder>/suite/<test-group>/group.json` Anda: 

```
{
    "id": "<group-id>",
    "title": "<group-title>",
    "details": "<group-details>",
    "optional": true | false,
}
```

Semua kolom yang berisi nilai wajib diisi seperti yang dijelaskan di sini:

`id`  
ID unik yang ditetapkan pengguna untuk grup uji. Nilai `id` harus sesuai dengan nama folder grup uji tempat `group.json` file berada, dan tidak boleh mengandung garis bawah (`_`). ID digunakan dalam laporan uji yang dihasilkan IDT.

`title`  
Nama deskriptif untuk grup uji. Nama tersebut ditampilkan dalam IDT CLI untuk test runner.

`details`  
Deskripsi singkat tentang tujuan dari grup tes.

`optional`  
Tidak wajib. Atur ke `true` untuk menampilkan grup tes ini sebagai grup opsional setelah IDT selesai menjalankan tes yang diperlukan. Nilai defaultnya adalah `false`.

## Konfigurasikan test.json
<a name="test-json"></a>

File `test.json` menentukan executable uji kasus dan variabel lingkungan yang digunakan oleh uji kasus. Untuk informasi selengkapnya tentang cara membuat executable uji kasus, lihat [Buat executable uji kasus IDT](test-executables.md).

Gunakan templat berikut untuk mengonfigurasi file `<custom-test-suite-folder>/suite/<test-group>/<test-case>/test.json` Anda: 

```
{
    "id": "<test-id>",
    "title": "<test-title>",
    "details": "<test-details>",
    "requireDUT": true | false,
    "requiredResources": [
        {
            "name": "<resource-name>",
            "features": [
                {
                    "name": "<feature-name>",
                    "version": "<feature-version>",
                    "jobSlots": <job-slots>
                }
            ]
        }
    ],
    "execution": {
        "timeout": <timeout>,
        "mac": {
            "cmd": "/path/to/executable",
            "args": [
                "<argument>"
            ],
        },
        "linux": {
            "cmd": "/path/to/executable",
            "args": [
                "<argument>"
            ],
        },
        "win": {
            "cmd": "/path/to/executable",
            "args": [
                "<argument>"
            ]
        }
    },
    "environmentVariables": [
        {
            "key": "<name>",
            "value": "<value>",
        }
    ]
}
```

Semua kolom yang berisi nilai wajib diisi seperti yang dijelaskan di sini:

`id`  
ID unik yang ditetapkan pengguna untuk grup uji. Nilai `id` harus sesuai dengan nama folder kasus uji tempat `test.json` file berada, dan tidak boleh mengandung garis bawah (`_`). ID digunakan dalam laporan uji yang dihasilkan IDT.

`title`  
Nama deskriptif untuk uji kasus. Nama tersebut ditampilkan dalam IDT CLI untuk test runner.

`details`  
Deskripsi singkat tentang tujuan dari uji kasus.

`requireDUT`  
Tidak wajib. Atur ke `true` jika perangkat diperlukan untuk menjalankan tes ini, jika tidak atur ke `false`. Nilai defaultnya adalah `true`. Test runner akan mengonfigurasi perangkat yang akan digunakannya untuk menjalankan pengujian di file `device.json`.

`requiredResources`  
Tidak wajib. Serangkaian hal yang menyediakan informasi tentang perangkat sumber daya yang diperlukan untuk menjalankan tes ini.     
`requiredResources.name`  
Nama unik yang akan diberikan kepada sumber daya perangkat ketika tes ini berjalan.  
`requiredResources.features`  
Serangkaian fitur perangkat sumber daya yang ditetapkan pengguna.     
`requiredResources.features.name`  
Nama fitur. Fitur perangkat yang ingin Anda gunakan untuk perangkat ini. Nama ini dicocokkan dengan nama fitur yang disediakan oleh test runner di file `resource.json`.  
`requiredResources.features.version`  
Tidak wajib. Versi fitur. Nama ini dicocokkan dengan versi fitur yang disediakan oleh test runner di file `resource.json`. Jika versi tidak tersedia, maka fitur tersebut tidak dicentang. Jika nomor versi tidak diperlukan untuk fitur tersebut, biarkan kolom ini kosong.  
`requiredResources.features.jobSlots`  
Tidak wajib. Jumlah tes simultan yang dapat didukung fitur ini. Nilai default-nya adalah `1`. Jika Anda ingin IDT menggunakan perangkat yang berbeda untuk masing-masing fitur, kami sarankan Anda menetapkan nilai ini ke `1`.

`execution.timeout`  
Jumlah waktu (dalam milidetik) yang ditunggu oleh IDT hingga tes tersebut selesai dijalankan. Untuk informasi selengkapnya tentang pengaturan parameter ini, lihat [Buat executable uji kasus IDT](test-executables.md).

`execution.os`  
Executable uji kasus yang akan dijalankan berdasarkan sistem operasi komputer host yang menjalankan IDT. Nilai yang didukung adalah `linux`, `mac`, dan `win`.     
`execution.os.cmd`  
Jalur ke executable uji kasus yang ingin Anda jalankan untuk sistem operasi tertentu. Lokasi ini harus berada di jalur sistem.  
`execution.os.args`  
Tidak wajib. Argumen yang akan disediakan untuk menjalankan executable uji kasus.

`environmentVariables`  
Tidak wajib. Serangkaian variabel lingkungan yang akan ditetapkan untuk uji kasus ini.     
`environmentVariables.key`  
Nama variabel lingkungan.  
`environmentVariables.value`  
Nilai variabel lingkungan.
Jika Anda menentukan variabel lingkungan yang sama di file `test.json` dan di file `suite.json`, nilai dalam file `test.json` akan diutamakan. 

## Konfigurasikan state\$1machine.json
<a name="state-machine-json"></a>

State machine adalah suatu konstruksi yang mengendalikan aliran eksekusi rangkaian uji. Ia menentukan keadaan awal dari rangkaian tes, mengelola transisi keadaan berdasarkan aturan yang ditetapkan pengguna, dan terus melakukan transisi melalui keadaan-keadaan tersebut sampai mencapai keadaan akhir. 

Jika rangkaian tes Anda tidak menyertakan state machine yang ditetapkan pengguna, IDT akan membuat state machine untuk Anda. State machine default melakukan fungsi-fungsi berikut:
+ Menyediakan test runner dengan kemampuan untuk memilih dan menjalankan grup uji tertentu, dan bukan seluruh rangkaian uji.
+ Jika grup uji tertentu tidak dipilih, ia menjalankan setiap grup uji di rangkaian uji dengan urutan acak. 
+ Membuat laporan dan mencetak ringkasan konsol yang menunjukkan hasil tes untuk setiap grup uji dan uji kasus.

Untuk informasi selengkapnya tentang bagaimana state machine IDT bekerja, lihat [Konfigurasikan state machine IDT](idt-state-machine.md).

## Konfigurasikan userdata\$1schema.json
<a name="userdata-schema-json"></a>

File `userdata_schema.json` menentukan skema di mana test runner menyediakan data pengguna. Data pengguna diperlukan jika rangkaian uji Anda memerlukan informasi yang tidak ada di file `device.json`. Misalnya, pengujian Anda mungkin memerlukan kredensial jaringan Wi-Fi, port terbuka tertentu, atau sertifikat yang harus diberikan pengguna. Informasi ini dapat diberikan kepada IDT sebagai parameter input yang disebut `userdata`, nilai yang merupakan file `userdata.json`, yang dibuat oleh para pengguna dalam `<device-tester-extract-location>/config` mereka. Format file `userdata.json` didasarkan pada `userdata_schema.json` yang Anda sertakan dalam rangkaian tes.

Untuk menunjukkan hal tersebut test runner harus menyediakan file `userdata.json`:

1. Di file `suite.json`, atur `userDataRequired` ke `true`.

1. Di `<custom-test-suite-folder>` Anda, buat file `userdata_schema.json`.

1. Edit file `userdata_schema.json` untuk membuat [Skema IETF Draft v4 JSON](https://json-schema.org/specification-links.html#draft-4) yang valid.

Ketika IDT menjalankan rangkaian uji Anda, secara otomatis ia membaca skema dan menggunakannya untuk memvalidasi file `userdata.json` yang disediakan oleh test runner. Jika valid, isi file `userdata.json` akan tersedia baik di [konteks IDT](idt-context.md) maupun di [konteks state machine](idt-state-machine.md#state-machine-context).

# Konfigurasikan state machine IDT
<a name="idt-state-machine"></a>

State machine adalah suatu konstruksi yang mengendalikan aliran eksekusi rangkaian uji. Ia menentukan keadaan awal dari rangkaian tes, mengelola transisi keadaan berdasarkan aturan yang ditetapkan pengguna, dan terus melakukan transisi melalui keadaan-keadaan tersebut sampai mencapai keadaan akhir. 

Jika rangkaian tes Anda tidak menyertakan state machine yang ditetapkan pengguna, IDT akan membuat state machine untuk Anda. State machine default melakukan fungsi-fungsi berikut:
+ Menyediakan test runner dengan kemampuan untuk memilih dan menjalankan grup uji tertentu, dan bukan seluruh rangkaian uji.
+ Jika grup uji tertentu tidak dipilih, ia menjalankan setiap grup uji di rangkaian uji dengan urutan acak. 
+ Membuat laporan dan mencetak ringkasan konsol yang menunjukkan hasil tes untuk setiap grup uji dan uji kasus.

State machine untuk rangkaian uji IDT harus memenuhi kriteria berikut:
+ Setiap keadaan sesuai dengan tindakan yang harus ddilakukan oleh IDT, seperti menjalankan grup uji atau produk file laporan.
+ Transisi ke suatu keadaan akan menghasilkan tindakan yang terkait dengan keadaan tersebut.
+ Setiap keadaan menentukan aturan transisi untuk keadaan berikutnya.
+ Keadaan akhir harus berupa `Succeed` atau `Fail`.

## Format state machine
<a name="state-machine-format"></a>

Anda dapat menggunakan templat berikut untuk mengonfigurasi file `<custom-test-suite-folder>/suite/state_machine.json` Anda: 

```
{
  "Comment": "<description>",
  "StartAt": "<state-name>",
  "States": {
    "<state-name>": {
      "Type": "<state-type>",
      // Additional state configuration
    }
    
    // Required states
    "Succeed": {
      "Type": "Succeed"
    },
    "Fail": {
      "Type": "Fail"
    }
  }
}
```

Semua kolom yang berisi nilai wajib diisi seperti yang dijelaskan di sini:

`Comment`  
Sebuah deskripsi tentang state machine.

`StartAt`  
Nama keadaan di mana IDT mulai menjalankan rangkaian tes. Nilai dari `StartAt` harus diatur ke salah satu keadaan yang tercantum di objek `States`.

`States`  
Sebuah objek yang memetakan nama keadaan yang ditetapkan pengguna ke keadaan IDT yang valid. Setiap Negara. *state-name*objek berisi definisi status valid yang dipetakan ke. *state-name*  
Objek `States` harus mencakup keadaan `Succeed` dan `Fail`. Untuk informasi lebih lanjut tentang keadaan yang valid, lihat [Keadaan yang valid dan definisi keadaan](#valid-states).

## Keadaan yang valid dan definisi keadaan
<a name="valid-states"></a>

Bagian ini menjelaskan definisi keadaan pada semua keadaan yang valid yang dapat digunakan dalam state machine IDT. Beberapa keadaan berikut mendukung konfigurasi pada tingkat uji kasus. Namun, kami sarankan Anda untuk mengonfigurasi aturan transisi keadaan pada tingkat grup uji dan bukan pada tingkat uji kasus kecuali jika benar-benar diperlukan.

**Topics**
+ [

### RunTask
](#state-runtask)
+ [

### Pilihan
](#state-choice)
+ [

### Paralel
](#state-parallel)
+ [

### AddProductFeatures
](#state-addproductfeatures)
+ [

### Laporan
](#state-report)
+ [

### LogMessage
](#state-logmessage)
+ [

### SelectGroup
](#state-selectgroup)
+ [

### Gagal
](#state-fail)
+ [

### Berhasil
](#state-succeed)

### RunTask
<a name="state-runtask"></a>

Keadaan `RunTask` menjalankan uji kasus dari grup uji yang ditentukan dalam rangkaian tes.

```
{
    "Type": "RunTask",
    "Next": "<state-name>",
    "TestGroup": "<group-id>",
    "TestCases": [
        "<test-id>"
    ],
    "ResultVar": "<result-name>"
}
```

Semua kolom yang berisi nilai wajib diisi seperti yang dijelaskan di sini:

`Next`  
Nama keadaan yang akan ditransisi setelah melaksanakan tindakan dalam keadaan saat ini.

`TestGroup`  
Tidak wajib. ID grup uji yang akan dijalankan. Jika nilai ini tidak ditentukan, IDT akan menjalankan grup uji yang dipilih oleh test runner.

`TestCases`  
Tidak wajib. Array kasus uji IDs dari grup yang ditentukan dalam`TestGroup`. Berdasarkan nilai-nilai `TestGroup` dan `TestCases`, IDT menentukan perilaku eksekusi tes sebagai berikut:   
+ Ketika `TestGroup` dan `TestCases` ditentukan, IDT akan menjalankan uji kasus tertentu dari grup uji. 
+ Ketika `TestCases` ditentukan tetapi `TestGroup` tidak ditentukan, IDT akan menjalankan uji kasus yang ditentukan.
+ Ketika `TestGroup` ditentukan tetapi `TestCases` tidak ditentukan, IDT akan menjalankan semua uji kasus di grup uji yang ditentukan.
+ Ketika `TestGroup` ataupun `TestCases` tidak ditentukan, IDT akan menjalankan semua uji kasus dari grup uji yang dipilih oleh test runner dari IDT CLI. Untuk mengaktifkan pilihan grup untuk test runner, Anda harus menyertakan keadaan `RunTask` dan `Choice` dalam file `statemachine.json` Anda. Untuk contoh cara kerjanya, lihat [Contoh state machine: Jalankan grup uji yang dipilih pengguna](#allow-specific-groups).

  Untuk informasi selengkapnya tentang mengaktifkan perintah IDT CLI untuk test runner, lihat [Aktifkan perintah IDT CLI](test-executables.md#idt-cli-coop).

`ResultVar`  
Nama variabel konteks yang akan diatur dengan hasil uji yang dijalankan. Jangan tentukan nilai ini jika Anda tidak menentukan nilai untuk `TestGroup`. IDT menetapkan nilai variabel yang Anda tentukan di `ResultVar` hingga `true` atau `false` berdasarkan berikut ini:   
+ Jika nama variabel adalah dari bentuk `text_text_passed`, maka nilainya akan diatur ke apakah semua tes dalam grup uji pertama akan dilalui atau dilompati.
+ Dalam semua kasus lainnya, nilai akan diatur ke apakah semua tes di semua grup uji akan dilalui atau dilompati.

Biasanya, Anda akan menggunakan `RunTask` status untuk menentukan ID grup uji tanpa menentukan kasus uji individual IDs, sehingga IDT akan menjalankan semua kasus uji dalam kelompok uji yang ditentukan. Semua uji kasus yang dijalankan oleh keadaan ini berjalan secara paralel, dengan urutan acak. Namun, jika semua uji kasus memerlukan perangkat untuk dijalankan, dan hanya satu perangkat yang tersedia, maka uji kasus akan berjalan secara berurutan sebagai gantinya. 

**Penanganan kesalahan**

Jika salah satu grup uji atau kasus uji IDs yang ditentukan tidak valid, maka status ini mengeluarkan kesalahan `RunTaskError` eksekusi. Jika keadaan ini menemukan kesalahan eksekusi, ia juga akan menetapkan variabel `hasExecutionError` dalam konteks state machine ke `true`.

### Pilihan
<a name="state-choice"></a>

Keadaan `Choice` memungkinkan Anda secara dinamis mengatur keadaan berikutnya yang akan ditransisikan berdasarkan keadaan yang ditetapkan pengguna.

```
{
    "Type": "Choice",
    "Default": "<state-name>", 
    "FallthroughOnError": true | false,
    "Choices": [
        {
            "Expression": "<expression>",
            "Next": "<state-name>"
        }
    ]
}
```

Semua kolom yang berisi nilai wajib diisi seperti yang dijelaskan di sini:

`Default`  
Keadaan default yang akan ditransisikan jika tidak terdapat ekspresi yang ditentukan di `Choices` dapat dievaluasi pada `true`.

`FallthroughOnError`  
Tidak wajib. Menentukan perilaku ketika keadaan tersebut bertemu kesalahan dalam mengevaluasi ekspresi. Atur ke `true` jika Anda ingin melompati ekspresi jika hasil evaluasi menghasilkan kesalahan. Jika tidak ada ekspresi yang cocok, state machine akan bertransisi ke keadaan `Default`. Jika nilai `FallthroughOnError` tidak ditentukan, default-nya adalah `false`. 

`Choices`  
Serangkaian ekspresi dan keadaan untuk menentukan keadaan mana yang akan ditransisikan setelah mengeksekusi tindakan dalam keadaan saat ini.    
`Choices.Expression`  
Ekspresi yang harus dievaluasi pada nilai boolean. Jika ekspresi mengevaluasi `true`, maka state machine akan bertransisi ke keadaan yang ditentukan dalam `Choices.Next`. String ekspresi mengambil nilai-nilai dari konteks state machine dan kemudian melakukan operasi padanya untuk sampai pada nilai boolean. Untuk informasi tentang mengakses konteks state machine, lihat [Konteks mesin keadaan](#state-machine-context).   
`Choices.Next`  
Nama keadaan yang akan ditransisikan jika ekspresi yang ditentukan dalam `Choices.Expression` dievaluasi pada `true`.

**Penanganan kesalahan**

Keadaan `Choice` dapat memerlukan penanganan kesalahan dalam kasus berikut: 
+ Beberapa variabel dalam ekspresi pilihan tidak ada dalam konteks state machine.
+ Hasil ekspresi bukan merupakan nilai boolean.
+ Hasil pencarian JSON bukanlah string, nomor, atau boolean.

Anda tidak dapat menggunakan blok `Catch` untuk menangani kesalahan dalam keadaan ini. Jika Anda ingin berhenti mengeksekusi state machine ketika menemukan kesalahan, Anda harus mengatur `FallthroughOnError` ke `false`. Namun, kami menyarankan agar Anda mengatur `FallthroughOnError` ke `true` Anda, dan tergantung pada kasus penggunaan Anda, lakukan salah satu langkah berikut:
+ Jika variabel yang Anda akses diharapkan untuk tidak ada dalam beberapa kasus, gunakan nilai `Default` dan blok `Choices` tambahan untuk menentukan keadaan berikutnya.
+ Jika variabel yang Anda akses harus selalu ada, atur keadaan `Default`ke `Fail`.

### Paralel
<a name="state-parallel"></a>

Keadaan `Parallel` memungkinkan Anda untuk menentukan dan menjalankan state machine baru secara paralel satu sama lain.

```
{
    "Type": "Parallel",
    "Next": "<state-name>",
    "Branches": [
        <state-machine-definition>
    ]
}
```

Semua kolom yang berisi nilai wajib diisi seperti yang dijelaskan di sini:

`Next`  
Nama keadaan yang akan ditransisi setelah melaksanakan tindakan dalam keadaan saat ini.

`Branches`  
Serangkaian definisi state machine yang akan dijalankan. Setiap definisi state machine harus berisi keadaan `StartAt`, `Succeed`, dan `Fail` miliknya sendiri. Definisi state machine dalam rangkaian ini tidak dapat mengacu pada keadaan di luar definisinya sendiri.   
Karena setiap cabang state machine memiliki konteks state machine yang sama, pengaturan variabel dalam satu cabang dan kemudian pembacaan variabel-variabel dari cabang lain dapat mengakibatkan perilaku yang tidak terduga.

Keadaan `Parallel` bergerak ke keadaan berikutnya hanya setelah keadaan tersebut menjalankan semua cabang state machine. Setiap keadaan yang memerlukan perangkat akan menunggu untuk berjalan hingga perangkat tersebut tersedia. Jika beberapa perangkat tersedia, keadaan ini akan menjalankan uji kasus dari beberapa grup secara paralel. Jika tidak tersedia perangkat yang memadai, uji kasus akan berjalan secara berurutan. Karena uji kasus dijalankan dalam urutan acak ketika berjalan secara paralel, perangkat yang berbeda mungkin digunakan untuk menjalankan tes dari grup tes yang sama. 

**Penanganan kesalahan**

Pastikan bahwa baik state machine cabang dan state machine induk bertransisi ke keadaan `Fail` untuk menangani kesalahan eksekusi. 

Karena state machine cabang tidak mengirimkan kesalahan eksekusi ke state machine induk, Anda tidak dapat menggunakan blok `Catch` untuk menangani kesalahan eksekusi di state machine cabang. Sebagai gantinya, gunakan nilai `hasExecutionErrors` dalam konteks state machine bersama. Untuk contoh cara bekerjanya, lihat [Contoh state machine: Jalankan dua grup uji secara paralel](#run-in-parallel).

### AddProductFeatures
<a name="state-addproductfeatures"></a>

Keadaan `AddProductFeatures` memungkinkan Anda menambahkan fitur produk ke file `awsiotdevicetester_report.xml` yang dihasilkan oleh IDT. 

Fitur produk adalah informasi yang ditetapkan pengguna tentang kriteria spesifik yang mungkin dipenuhi oleh perangkat. Misalnya, fitur produk `MQTT` dapat menetapkan bahwa perangkat akan menerbitkan pesan MQTT dengan benar. Dalam laporan tersebut, fitur produk ditetapkan sebagai `supported`, `not-supported`, atau nilai kustom, berdasarkan apakah tes yang ditentukan berhasil dilalui.



**catatan**  
Keadaan `AddProductFeatures` tidak menghasilkan laporan dengan sendirinya. Keadaan ini harus bertransisi ke [keadaan `Report`](#state-report) untuk menghasilkan laporan.

```
{
    "Type": "Parallel",
    "Next": "<state-name>",
    "Features": [
        {
            "Feature": "<feature-name>", 
            "Groups": [
                "<group-id>"
            ],
            "OneOfGroups": [
                "<group-id>"
            ],
            "TestCases": [
                "<test-id>"
            ],
            "IsRequired": true | false,
            "ExecutionMethods": [
                "<execution-method>"
            ]
        }
    ]
}
```

Semua kolom yang berisi nilai wajib diisi seperti yang dijelaskan di sini:

`Next`  
Nama keadaan yang akan ditransisi setelah melaksanakan tindakan dalam keadaan saat ini.

`Features`  
Serangkaian fitur produk yang akan ditampilkan di file `awsiotdevicetester_report.xml`.    
`Feature`  
Nama fitur  
`FeatureValue`  
Tidak wajib. Nilai kustom yang akan digunakan dalam laporan, dan bukan `supported`. Jika nilai ini tidak ditentukan, maka berdasarkan hasil tes, nilai fitur akan diatur ke `supported` atau `not-supported`.   
Jika Anda menggunakan nilai kustom untuk `FeatureValue`, Anda dapat menguji fitur yang sama dengan kondisi yang berbeda, dan IDT akan menggabungkan nilai fitur untuk kondisi yang didukung. Misalnya, petikan berikut menunjukkan fitur `MyFeature` dengan dua nilai fitur yang terpisah:  

```
...
{
    "Feature": "MyFeature",
    "FeatureValue": "first-feature-supported",
    "Groups": ["first-feature-group"]
},
{
    "Feature": "MyFeature",
    "FeatureValue": "second-feature-supported",
    "Groups": ["second-feature-group"]
},
...
```
Jika kedua grup uji itu lulus, nilai fitur akan diatur ke `first-feature-supported, second-feature-supported`.   
`Groups`  
Tidak wajib. Array kelompok uji IDs. Semua tes dalam setiap kelompok uji yang ditentukan harus lulus pada fitur yang akan didukung.  
`OneOfGroups`  
Tidak wajib. Array kelompok uji IDs. Semua tes dalam setidaknya satu kelompok uji yang ditentukan harus lulus pada fitur yang akan didukung.   
`TestCases`  
Tidak wajib. Sebuah array kasus uji IDs. Jika Anda menentukan nilai ini, maka hal berikut ini akan berlaku:  
+ Semua uji kasus yang ditentukan harus lulus pada fitur yang akan didukung.
+ `Groups` harus berisi hanya satu ID grup uji.
+ `OneOfGroups` tidak boleh ditentukan.  
`IsRequired`  
Tidak wajib. Atur ke `false` untuk menandai fitur ini sebagai fitur opsional dalam laporan. Nilai default adalah `true`.  
`ExecutionMethods`  
Tidak wajib. Serangkaian metode eksekusi yang sesuai dengan nilai `protocol` yang ditentukan dalam file `device.json`. Jika nilai ini ditentukan, test runner harus menentukan nilai `protocol` yang cocok dengan salah satu nilai dalam rangkaian ini untuk menyertakan fitur tersebut dalam laporan. Jika nilai ini tidak ditentukan, maka fitur itu akan selalu disertakan dalam laporan.

Untuk menggunakan keadaan `AddProductFeatures`, Anda harus menetapkan nilai `ResultVar` di keadaan `RunTask` ke salah satu nilai berikut:
+ Jika Anda menentukan kasus uji individual IDs, maka atur `ResultVar` ke`group-id_test-id_passed`.
+ Jika Anda tidak menentukan kasus uji individual IDs, maka setel `ResultVar` ke`group-id_passed`.

Keadaan `AddProductFeatures` akan mengecek hasil tes dengan cara berikut: 
+ Jika Anda tidak menentukan kasus uji apa pun IDs, maka hasil untuk setiap kelompok uji ditentukan dari nilai `group-id_passed` variabel dalam konteks mesin negara.
+ Jika Anda memang menentukan kasus uji IDs, maka hasil untuk masing-masing pengujian ditentukan dari nilai `group-id_test-id_passed` variabel dalam konteks mesin negara.

**Penanganan kesalahan**

Jika ID grup yang disediakan dalam keadaan ini bukan ID grup yang valid, maka keadaan ini akan menghasilkan kesalahan eksekusi `AddProductFeaturesError`. Jika keadaan ini menemukan kesalahan eksekusi, ia juga akan menetapkan variabel `hasExecutionErrors` dalam konteks state machine ke `true`.

### Laporan
<a name="state-report"></a>

Keadaan `Report` menghasilkan file `suite-name_Report.xml` dan `awsiotdevicetester_report.xml`. Keadaan ini juga mengalirkan laporan ke konsol.

```
{
    "Type": "Report",
    "Next": "<state-name>"
}
```

Semua kolom yang berisi nilai wajib diisi seperti yang dijelaskan di sini:

`Next`  
Nama keadaan yang akan ditransisi setelah melaksanakan tindakan dalam keadaan saat ini.

Anda harus selalu beralih ke keadaan `Report` menjelang akhir aliran eksekusi tes agar test runner dapat melihat hasil tes. Biasanya, keadaan berikutnya setelah keadaan ini adalah `Succeed`. 

**Penanganan kesalahan**

Jika keadaan ini mengalami masalah dalam menghasilkan laporan, keadaan tersebut akan mengeluarkan kesalahan eksekusi `ReportError`. 

### LogMessage
<a name="state-logmessage"></a>

Keadaan `LogMessage` akan menghasilkan file `test_manager.log` dan mengalirkan pesan log ke konsol.

```
{
    "Type": "LogMessage",
    "Next": "<state-name>"
    "Level": "info | warn | error"
    "Message": "<message>"
}
```

Semua kolom yang berisi nilai wajib diisi seperti yang dijelaskan di sini:

`Next`  
Nama keadaan yang akan ditransisi setelah melaksanakan tindakan dalam keadaan saat ini.

`Level`  
Tingkat kesalahan tempat membuat pesan log. Jika Anda menentukan tingkat yang tidak valid, keadaan ini akan menghasilkan pesan kesalahan dan membuangnya. 

`Message`  
Pesan yang akan dicatat.

### SelectGroup
<a name="state-selectgroup"></a>

Keadaan `SelectGroup` memperbarui konteks state machine untuk menunjukkan grup mana yang dipilih. Nilai-nilai yang ditetapkan oleh keadaan ini digunakan oleh setiap kondisi `Choice` berikutnya.

```
{
    "Type": "SelectGroup",
    "Next": "<state-name>"
    "TestGroups": [
        <group-id>"
    ]
}
```

Semua kolom yang berisi nilai wajib diisi seperti yang dijelaskan di sini:

`Next`  
Nama keadaan yang akan ditransisi setelah melaksanakan tindakan dalam keadaan saat ini.

`TestGroups`  
Serangkaian grup uji yang akan ditandai sudah dipilih. Untuk setiap ID grup uji dalam rangkaian ini, variabel `group-id_selected` akan diatur ke `true` dalam konteks. Pastikan Anda menyediakan grup pengujian yang valid IDs karena IDT tidak memvalidasi apakah grup yang ditentukan ada.

### Gagal
<a name="state-fail"></a>

Keadaan `Fail` menunjukkan bahwa state machine tidak mengeksekusi dengan benar. Ini adalah keadaan akhir untuk state machine, dan setiap definisi state machine harus mencakup keadaan ini.

```
{
    "Type": "Fail"
}
```

### Berhasil
<a name="state-succeed"></a>

Keadaan `Succeed` menunjukkan bahwa state machine mengeksekusi dengan benar. Ini adalah keadaan akhir untuk state machine, dan setiap definisi state machine harus mencakup keadaan ini.

```
{
    "Type": "Succeed"
}
```

## Konteks mesin keadaan
<a name="state-machine-context"></a>

Konteks state machine adalah dokumen JSON baca-saja yang berisi data yang tersedia untuk state machine selama eksekusi. Konteks state machine hanya dapat diakses dari state machine, dan berisi informasi yang menentukan aliran uji. Misalnya, Anda dapat menggunakan informasi yang dikonfigurasi oleh test runner di file `userdata.json` untuk menentukan apakah pengujian tertentu wajib dijalankan.

Konteks state machine menggunakan format berikut:

```
{
    "pool": {
        <device-json-pool-element>
    },
    "userData": {
        <userdata-json-content>
    },
    "config": {
        <config-json-content>
    },
    "suiteFailed": true | false,
    "specificTestGroups": [
        "<group-id>"
    ],
    "specificTestCases": [
        "<test-id>"
    ],
    "hasExecutionErrors": true
}
```

`pool`  
Informasi tentang kolam perangkat yang dipilih untuk uji coba. Untuk kolam perangkat yang dipilih, informasi ini diambil dari elemen rangkaian perangkat tingkat atas yang sesuai yang ditentukan dalam file `device.json`.

`userData`  
Informasi di file `userdata.json`.

`config`  
Informasi menyematkan file `config.json`.

`suiteFailed`  
Nilai diatur ke `false` ketika state machine dimulai. Jika grup uji gagal dalam keadaan `RunTask`, maka nilai ini akan ditetapkan ke `true` untuk durasi sisa eksekusi state machine.

`specificTestGroups`  
Jika test runner memilih grup pengujian tertentu untuk dijalankan, bukan seluruh rangkaian pengujian, kunci ini dibuat dan berisi daftar grup pengujian tertentu. IDs

`specificTestCases`  
Jika test runner memilih kasus pengujian tertentu untuk dijalankan, bukan seluruh rangkaian pengujian, kunci ini dibuat dan berisi daftar kasus uji tertentu. IDs

`hasExecutionErrors`  
Tidak keluar saat state machine dimulai. Jika keadaan apa pun menemukan kesalahan eksekusi, variabel ini akan dibuat dan diatur ke `true` selama durasi sisa eksekusi state machine.

Anda dapat menanyakan konteks menggunakan JSONPath notasi. Sintaks untuk JSONPath kueri dalam definisi negara adalah. `{{$.query}}` Anda dapat menggunakan JSONPath kueri sebagai string placeholder di beberapa negara bagian. IDT menggantikan string placeholder dengan nilai kueri yang dievaluasi JSONPath dari konteks. Anda dapat menggunakan placeholder untuk nilai-nilai berikut:
+ Nilai `TestCases` dalam keadaan `RunTask`. 
+ Nilai `Expression` keadaan `Choice`.

Ketika Anda mengakses data dari konteks state machine, pastikan keadaan berikut dipenuhi: 
+ Jalur JSON Anda harus dimulai dengan `$.`
+ Setiap nilai harus dievaluasi pada string, angka, atau boolean.

Untuk informasi selengkapnya tentang penggunaan JSONPath notasi untuk mengakses data dari konteks, lihat[Gunakan konteks IDT](idt-context.md).

## Kesalahan eksekusi
<a name="execution-errors"></a>

Kesalahan eksekusi adalah kesalahan dalam definisi state machine yang ditemui oleh state machine mesin ketika mengeksekusi keadaan. IDT mencatat informasi tentang setiap kesalahan dalam file `test_manager.log` dan mengalirkan pesan log ke konsol.

Anda dapat menggunakan metode berikut untuk menangani kesalahan eksekusi:
+ Tambahkan [blok `Catch`](#catch) dalam definisi keadaan.
+ Periksa nilai dari [nilai `hasExecutionErrors`](#context) dalam konteks state machine.

### Tangkap
<a name="catch"></a>

Untuk menggunakan `Catch`, tambahkan hal berikut ini ke definisi keadaan Anda:

```
"Catch": [
    {    
        "ErrorEquals": [
            "<error-type>"
        ]
        "Next": "<state-name>" 
    }
]
```

Semua kolom yang berisi nilai wajib diisi seperti yang dijelaskan di sini:

`Catch.ErrorEquals`  
Serangkaian jenis kesalahan yang akan ditangkap. Jika kesalahan eksekusi cocok dengan salah satu nilai yang ditentukan, maka state machine akan bertransisi ke keadaan yang ditentukan dalam `Catch.Next`. Lihat setiap definisi keadaan untuk informasi tentang jenis kesalahan yang dihasilkannya.

`Catch.Next`  
Keadaan berikutnya yang akan ditransisikan jika keadaan saat ini menemukan kesalahan eksekusi yang cocok dengan salah satu nilai yang ditentukan dalam `Catch.ErrorEquals`.

Blok tangkapan ditangani secara berurutan hingga salah satunya cocok. Jika tidak ada kesalahan yang cocok dengan yang tercantum dalam blok Tangkapan, maka state machine akan terus mengeksekusi. Karena kesalahan eksekusi adalah akibat dari definisi keadaan yang salah, kami sarankan Anda beralih ke keadaan gagal ketika suatu keadaan mengalami kesalahan eksekusi.

### hasExecutionError
<a name="context"></a>

Ketika beberapa keadaan mengalami kesalahan eksekusi, selain mengeluarkan kesalahan, keaadaan itu juga mengatur nilai `hasExecutionError` ke `true` dalam konteks state machine. Anda dapat menggunakan nilai ini untuk mendeteksi ketika terjadi kesalahan, dan kemudian menggunakan keadaan `Choice` untuk mengalihkan state machine ke keadaan `Fail`.

Metode ini memiliki karakteristik sebagai berikut.
+ State machine tidak dimulai dengan nilai yang ditugaskan pada `hasExecutionError`, dan nilai ini tidak tersedia sampai keadaan tertentu menetapkannya. Ini berarti bahwa Anda harus secara tegas mengatur `FallthroughOnError` ke `false` untuk keadaan `Choice` yang mengakses nilai ini untuk mencegah state machine berhenti jika tidak ada kesalahan eksekusi yang terjadi. 
+ Setelah ditetapkan ke `true`, `hasExecutionError` tidak pernah ditetapkan menjadi salah atau dihapus dari konteks. Ini berarti bahwa nilai ini berguna hanya pertama kalinya ketika nilai tersebut ditetapkan ke `true`, dan untuk semua keadaan berikutnya, nilai itu tidak memberikan nilai yang berarti.
+ Nilai `hasExecutionError` dibagi dengan semua cabang state machine pada keadaan `Parallel`, yang dapat mengakibatkan hasil yang tidak diharapkan tergantung pada urutan yang diakses.

Karena karakteristik ini, kami tidak menyarankan Anda menggunakan metode ini jika Anda dapat menggunakan blok Catch sebagai gantinya. 

## Contoh mesin keadaan
<a name="state-machine-examples"></a>

Bagian ini menyediakan beberapa contoh konfigurasi state machine.

**Topics**
+ [

### Contoh state machine: Jalankan grup uji tunggal
](#single-test-group)
+ [

### State machine contoh: Jalankan grup uji yang dipilih pengguna
](#allow-specific-groups)
+ [

### Contoh state machine: Jalankan grup uji tunggal dengan fitur produk
](#run-with-product-features)
+ [

### Contoh state machine: Jalankan dua grup uji secara paralel
](#run-in-parallel)

### Contoh state machine: Jalankan grup uji tunggal
<a name="single-test-group"></a>

State machine ini:
+ Menjalankan grup uji dengan id `GroupA`, yang harus ada dalam rangkaian pada file `group.json`.
+ Memeriksa kesalahan eksekusi dan bertransisi ke `Fail` jika ada yang ditemukan.
+ Menghasilkan laporan dan bertransisi ke `Succeed` jika tidak ada kesalahan, dan `Fail` bila sebaliknya.

```
{
    "Comment": "Runs a single group and then generates a report.",
    "StartAt": "RunGroupA",
    "States": {
        "RunGroupA": {
            "Type": "RunTask",
            "Next": "Report",
            "TestGroup": "GroupA",
            "Catch": [
                {
                    "ErrorEquals": [
                        "RunTaskError"
                    ],
                    "Next": "Fail"
                }
            ]
        },
        "Report": {
            "Type": "Report",
            "Next": "Succeed",
            "Catch": [
                {
                    "ErrorEquals": [
                        "ReportError"
                    ],
                    "Next": "Fail"
                }
            ]
        },
        "Succeed": {
            "Type": "Succeed"
        },
        "Fail": {
            "Type": "Fail"
        }
    }
}
```

### State machine contoh: Jalankan grup uji yang dipilih pengguna
<a name="allow-specific-groups"></a>

State machine ini:
+ Memeriksa apakah test runner telah memilih grup uji tertentu. State machine tidak memeriksa uji kasus tertentu karena test runner tidak dapat memilih uji kasus tanpa sekaligus memilih grup uji.
+ Jika grup uji sudah dipilih: 
  + Jalankan uji kasus dalam grup uji yang dipilih. Untuk melakukannya, state machine tidak secara tegas menentukan grup uji atau uji kasus di keadaan `RunTask`
  + Buat laporan setelah menjalankan semua tes dan keluar.
+ Jika grup uji tidak dipilih:
  + Jalankan tes dalam grup uji `GroupA`.
  + Buat laporan dan keluar.

```
{
    "Comment": "Runs specific groups if the test runner chose to do that, otherwise runs GroupA.",
    "StartAt": "SpecificGroupsCheck",
    "States": {
        "SpecificGroupsCheck": {
            "Type": "Choice",
            "Default": "RunGroupA",
            "FallthroughOnError": true,
            "Choices": [
                {
                    "Expression": "{{$.specificTestGroups[0]}} != ''",
                    "Next": "RunSpecificGroups"
                }
            ]
        },
        "RunSpecificGroups": {
            "Type": "RunTask",
            "Next": "Report",
            "Catch": [
                {
                    "ErrorEquals": [
                        "RunTaskError"
                    ],
                    "Next": "Fail"
                }
            ]
        },
        "RunGroupA": {
            "Type": "RunTask",
            "Next": "Report",
            "TestGroup": "GroupA",
            "Catch": [
                {
                    "ErrorEquals": [
                        "RunTaskError"
                    ],
                    "Next": "Fail"
                }
            ]
        },
        "Report": {
            "Type": "Report",
            "Next": "Succeed",
            "Catch": [
                {
                    "ErrorEquals": [
                        "ReportError"
                    ],
                    "Next": "Fail"
                }
            ]
        },
        "Succeed": {
            "Type": "Succeed"
        },
        "Fail": {
            "Type": "Fail"
        }
    }
}
```

### Contoh state machine: Jalankan grup uji tunggal dengan fitur produk
<a name="run-with-product-features"></a>

State machine ini:
+ Menjalankan grup uji `GroupA`.
+ Memeriksa kesalahan eksekusi dan bertransisi ke `Fail` jika ada yang ditemukan.
+ Menambahkan fitur `FeatureThatDependsOnGroupA` pada file `awsiotdevicetester_report.xml`:
  + Jika `GroupA` lulus, fitur tersebut diatur ke `supported`.
  + Fitur ini tidak ditandai opsional dalam laporan.
+ Menghasilkan laporan dan bertransisi ke `Succeed` jika tidak ada kesalahan, dan `Fail` bila sebaliknya.

```
{
    "Comment": "Runs GroupA and adds product features based on GroupA",
    "StartAt": "RunGroupA",
    "States": {
        "RunGroupA": {
            "Type": "RunTask",
            "Next": "AddProductFeatures",
            "TestGroup": "GroupA",
            "ResultVar": "GroupA_passed",
            "Catch": [
                {
                    "ErrorEquals": [
                        "RunTaskError"
                    ],
                    "Next": "Fail"
                }
            ]
        },
        "AddProductFeatures": {
            "Type": "AddProductFeatures",
            "Next": "Report",
            "Features": [
                {
                    "Feature": "FeatureThatDependsOnGroupA",
                    "Groups": [
                        "GroupA"
                    ],
                    "IsRequired": true
                }
            ]
        },
        "Report": {
            "Type": "Report",
            "Next": "Succeed",
            "Catch": [
                {
                    "ErrorEquals": [
                        "ReportError"
                    ],
                    "Next": "Fail"
                }
            ]
        },
        "Succeed": {
            "Type": "Succeed"
        },
        "Fail": {
            "Type": "Fail"
        }
    }
}
```

### Contoh state machine: Jalankan dua grup uji secara paralel
<a name="run-in-parallel"></a>

State machine ini:
+ Menjalankan grup tes `GroupA` dan `GroupB` secara paralel. Variabel `ResultVar` yang disimpan dalam konteks tersebut oleh keadaan `RunTask` dalam state machine cabang yang tersedia pada keadaan `AddProductFeatures`
+ Memeriksa kesalahan eksekusi dan bertransisi ke `Fail` jika ada yang ditemukan. State machine ini tidak menggunakan blok `Catch` karena metode itu tidak mendeteksi kesalahan eksekusi di state machine cabang.
+ Menambahkan fitur ke file `awsiotdevicetester_report.xml` berdasarkan grup-grup yang lulus
  + Jika `GroupA` lulus, fitur tersebut diatur ke `supported`.
  + Fitur ini tidak ditandai opsional dalam laporan.
+ Menghasilkan laporan dan bertransisi ke `Succeed` jika tidak ada kesalahan, dan `Fail` bila sebaliknya.

Jika dua perangkat dikonfigurasi di kolam perangkat, baik `GroupA` maupun `GroupB` dapat berjalan pada saat yang sama. Namun, jika `GroupA` atau `GroupB` memiliki beberapa tes di dalamnya, maka kedua perangkat dapat dialokasikan pada tes tersebut. Jika hanya satu perangkat yang dikonfigurasi, grup uji akan berjalan secara berurutan.

```
{
    "Comment": "Runs GroupA and GroupB in parallel",
    "StartAt": "RunGroupAAndB",
    "States": {
        "RunGroupAAndB": {
            "Type": "Parallel",
            "Next": "CheckForErrors",
            "Branches": [
                {
                    "Comment": "Run GroupA state machine",
                    "StartAt": "RunGroupA",
                    "States": {
                        "RunGroupA": {
                            "Type": "RunTask",
                            "Next": "Succeed",
                            "TestGroup": "GroupA",
                            "ResultVar": "GroupA_passed",
                            "Catch": [
                                {
                                    "ErrorEquals": [
                                        "RunTaskError"
                                    ],
                                    "Next": "Fail"
                                }
                            ]
                        },
                        "Succeed": {
                            "Type": "Succeed"
                        },
                        "Fail": {
                            "Type": "Fail"
                        }
                    }
                },
                {
                    "Comment": "Run GroupB state machine",
                    "StartAt": "RunGroupB",
                    "States": {
                        "RunGroupA": {
                            "Type": "RunTask",
                            "Next": "Succeed",
                            "TestGroup": "GroupB",
                            "ResultVar": "GroupB_passed",
                            "Catch": [
                                {
                                    "ErrorEquals": [
                                        "RunTaskError"
                                    ],
                                    "Next": "Fail"
                                }
                            ]
                        },
                        "Succeed": {
                            "Type": "Succeed"
                        },
                        "Fail": {
                            "Type": "Fail"
                        }
                    }
                }
            ]
        },
        "CheckForErrors": {
            "Type": "Choice",
            "Default": "AddProductFeatures",
            "FallthroughOnError": true,
            "Choices": [
                {
                    "Expression": "{{$.hasExecutionErrors}} == true",
                    "Next": "Fail"
                }
            ]
        },
        "AddProductFeatures": {
            "Type": "AddProductFeatures",
            "Next": "Report",
            "Features": [
                {
                    "Feature": "FeatureThatDependsOnGroupA",
                    "Groups": [
                        "GroupA"
                    ],
                    "IsRequired": true
                },
                {
                    "Feature": "FeatureThatDependsOnGroupB",
                    "Groups": [
                        "GroupB"
                    ],
                    "IsRequired": true
                }
            ]
        },
        "Report": {
            "Type": "Report",
            "Next": "Succeed",
            "Catch": [
                {
                    "ErrorEquals": [
                        "ReportError"
                    ],
                    "Next": "Fail"
                }
            ]
        },
        "Succeed": {
            "Type": "Succeed"
        },
        "Fail": {
            "Type": "Fail"
        }
    }
}
```

# Buat executable uji kasus IDT
<a name="test-executables"></a>

Anda dapat membuat dan menempatkan executable uji kasus dalam folder rangkaian tes dengan cara berikut:
+ Untuk rangkaian tes yang menggunakan argumen atau variabel lingkungan dari file `test.json` untuk menentukan tes mana yang akan dijalankan, Anda dapat membuat uji kasus tunggal yang dapat dieksekusi untuk seluruh rangkaian tes, atau tes yang dapat dijalankan untuk setiap grup uji di rangkaian tes.
+ Untuk rangkaian tes di mana Anda ingin menjalankan tes tertentu berdasarkan perintah tertentu, Anda membuat satu executable uji kasus untuk setiap uji kasus di rangkaian tes.

Sebagai penyusun tes, Anda dapat menentukan pendekatan yang sesuai untuk kasus penggunaan Anda dan menyusun executable uji kasus yang sesuai. Pastikan bahwa Anda menyediakan jalur eksekusi uji kasus yang benar di setiap file `test.json`, dan bahwa executable yang ditentukan berjalan dengan benar. 

Ketika semua perangkat siap untuk dijalankan oleh uji kasus, IDT akan membaca file-file berikut:
+ `test.json` untuk uji kasus yang dipilih menentukan proses yang akan dimulai dan variabel lingkungan yang akan diatur.
+ `suite.json` untuk rangkaian uji tersebut menentukan variabel lingkungan yang akan diatur. 

IDT memulai proses executable pengujian yang diperlukan berdasarkan perintah dan argumen yang ditentukan dalam file `test.json`, dan melewati variabel lingkungan yang diperlukan untuk proses tersebut. 

## Gunakan IDT Client SDK
<a name="idt-client-sdk"></a>

Klien IDT SDKs memungkinkan Anda menyederhanakan cara Anda menulis logika pengujian dalam pengujian yang dapat dieksekusi dengan perintah API yang dapat Anda gunakan berinteraksi dengan IDT dan perangkat yang sedang diuji. IDT saat ini menyediakan yang berikut: SDKs 
+ IDT Client SDK for Python
+ IDT Client SDK for Go

Ini SDKs terletak di `<device-tester-extract-location>/sdks` folder. Ketika Anda membuat executable uji kasus yang baru, Anda harus menyalin SDK yang ingin Anda gunakan ke folder yang berisi executable uji kasus dan mengacu pada SDK dalam kode Anda. Bagian ini memberikan penjelasan singkat tentang perintah API yang tersedia yang dapat Anda gunakan dalam executable uji kasus Anda. 

**Topics**
+ [

### Interaksi perangkat
](#api-device-interaction)
+ [

### Interaksi IDT
](#api-idt-interaction)
+ [

### Interaksi host
](#api-host-interaction)

### Interaksi perangkat
<a name="api-device-interaction"></a>

Perintah berikut memungkinkan Anda untuk berkomunikasi dengan perangkat yang diuji tanpa harus menerapkan interaksi perangkat tambahan dan fungsi manajemen konektivitas apa pun.

`ExecuteOnDevice`  
Memungkinkan rangkaian tes untuk menjalankan perintah shell pada perangkat yang mendukung SSH atau koneksi Docker shell.

`CopyToDevice`  
Memungkinkan rangkaian tes untuk menyalin file lokal dari mesin host yang menjalankan IDT ke lokasi yang ditentukan pada perangkat yang mendukung SSH atau koneksi Docker shell.

`ReadFromDevice`  
Memungkinkan rangkaian tes untuk membaca dari port serial perangkat yang mendukung koneksi UART.

**catatan**  
Karena IDT tidak mengelola koneksi langsung ke perangkat yang dibuat menggunakan informasi akses perangkat dari konteks, sebaiknya gunakan perintah API interaksi perangkat ini di executable uji kasus. Namun, jika perintah ini tidak memenuhi persyaratan uji kasus Anda, maka Anda dapat mengambil informasi akses perangkat dari konteks IDT dan menggunakannya untuk membuat koneksi langsung ke perangkat dari rangkaian tes.   
Untuk membuat sambungan langsung, ambil informasi di `device.connectivity` dan `resource.devices.connectivity` masing-masing untuk perangkat Anda yang sedang diuji dan untuk perangkat sumber daya. Untuk informasi lebih lanjut mengenai penggunaan konteks IDT, lihat [Gunakan konteks IDT](idt-context.md). 

### Interaksi IDT
<a name="api-idt-interaction"></a>

Perintah berikut memungkinkan rangkaian tes Anda untuk berkomunikasi dengan IDT.

`PollForNotifications`  
Memungkinkan rangkaian tes untuk memeriksa notifikasi dari IDT.

`GetContextValue ` dan `GetContextString`  
Memungkinkan rangkaian tes untuk mengambil nilai-nilai dari konteks IDT. Untuk informasi selengkapnya, lihat [Gunakan konteks IDT](idt-context.md).

`SendResult`  
Memungkinkan rangkaian tes untuk melaporkan hasil uji kasus ke IDT. Perintah ini harus dipanggil pada akhir setiap uji kasus di rangkaian tes.

### Interaksi host
<a name="api-host-interaction"></a>

Perintah berikut memungkinkan rangkaian tes Anda untuk berkomunikasi dengan mesin host.

`PollForNotifications`  
Memungkinkan rangkaian tes untuk memeriksa notifikasi dari IDT.

`GetContextValue ` dan `GetContextString`  
Memungkinkan rangkaian tes untuk mengambil nilai-nilai dari konteks IDT. Untuk informasi selengkapnya, lihat [Gunakan konteks IDT](idt-context.md).

`ExecuteOnHost`  
Memungkinkan rangkaian tes untuk menjalankan perintah pada mesin lokal dan memungkinkan IDT untuk mengelola siklus hidup executable uji kasus.

## Aktifkan perintah IDT CLI
<a name="idt-cli-coop"></a>

Perintah `run-suite` IDT CLI menyediakan beberapa pilihan yang membiarkan test runner untuk mengkustomisasi pelaksanaan tes. Untuk memungkinkan test runner menggunakan opsi ini untuk menjalankan rangkaian tes kustom Anda, Anda menerapkan dukungan untuk IDT CLI. Jika Anda tidak menerapkan dukungan, test runner masih akan dapat menjalankan tes, tetapi beberapa opsi CLI tidak akan berfungsi dengan benar. Untuk memberikan pengalaman pelanggan yang ideal, kami merekomendasikan agar Anda menerapkan dukungan untuk argumen berikut untuk perintah `run-suite` dalam IDT CLI:

`timeout-multiplier`  
Menentukan nilai yang lebih besar dari 1,0 yang akan diterapkan pada semua batas waktu saat menjalankan tes.   
Test runner dapat menggunakan argumen ini untuk meningkatkan batas waktu untuk uji kasus yang ingin dijalankannya. Ketika test runner menentukan argumen ini pada perintah `run-suite`, IDT akan menggunakannya untuk menghitung nilai variabel lingkungan IDT\$1TEST\$1TIMEOUT dan menetapkan kolom `config.timeoutMultiplier` dalam konteks IDT. Untuk mendukung argumen ini, Anda harus melakukan hal berikut:  
+ Alih-alih langsung menggunakan nilai batas waktu dari file `test.json`, baca variabel lingkungan IDT\$1TEST\$1TIMEOUT untuk mendapatkan nilai batas waktu yang dihitung dengan benar.
+ Ambil nilai `config.timeoutMultiplier` dari konteks IDT dan terapkan ia pada batas waktu yang panjang.
Untuk informasi selengkapnya tentang keluar lebih awal karena peristiwa habis waktu, lihat [Tentukan perilaku keluar](#test-exec-exiting).

`stop-on-first-failure`  
Tentukan bahwa IDT harus berhenti menjalankan semua tes jika menemui kegagalan.   
Ketika test runner menentukan argumen ini pada perintah `run-suite`, IDT akan berhenti menjalankan pengujian tersebut segera setelah menemui kegagalan. Namun, jika uji kasus berjalan secara paralel, hal ini dapat menyebabkan hasil yang tidak terduga. Untuk menerapkan dukungan, pastikan bahwa jika IDT menemui peristiwa ini, logika pengujian Anda akan menginstruksikan semua uji kasus yang sedang berjalan untuk berhenti, membersihkan sumber daya sementara, dan melaporkan hasil tes ke IDT. Untuk informasi selengkapnya tentang keluar lebih awal karena menemui kegagalan, lihat [Tentukan perilaku keluar](#test-exec-exiting).

`group-id` dan `test-id`  
Menentukan bahwa IDT harus menjalankan hanya grup uji atau uji kasus yang dipilih.   
Test runner dapat menggunakan argumen ini dengan perintah `run-suite` untuk menentukan perilaku eksekusi tes berikut:   
+ Jalankan semua tes di dalam grup uji yang ditentukan.
+ Jalankan pilihan tes dari dalam grup uji tertentu.
Untuk mendukung argumen ini, state machine untuk rangkaian tes Anda harus menyertakan serangkaian keadaan `RunTask` dan `Choice` tertentu pada state machine Anda. Jika Anda tidak menggunakan state machine kustom, maka state machine IDT default akan meliputi keadaan yang diperlukan untuk Anda dan Anda tidak perlu melakukan tindakan tambahan. Namun, jika Anda menggunakan state machine kustom, gunakan [State machine contoh: Jalankan grup uji yang dipilih pengguna](idt-state-machine.md#allow-specific-groups) sebagai contoh untuk menambahkan keadaan yang diperlukan dalam state machine Anda.

Untuk informasi selengkapnya tentang perintah IDT CLI, lihat [Debug dan jalankan rangkaian tes kustom](run-tests-custom.md).

## Menulis log peristiwa
<a name="test-exec-logs"></a>

Saat tes berjalan, Anda mengirim data ke `stdout` dan `stderr` untuk menuliskan log peristiwa dan pesan kesalahan pada konsol. Untuk informasi lebih lanjut tentang format pesan konsol, lihat [Format pesan konsol](idt-review-results-logs.md#idt-console-format).

Ketika IDT selesai menjalankan rangkaian tes tersebut, informasi ini juga tersedia di file `test_manager.log` yang terletak di `<devicetester-extract-location>/results/<execution-id>/logs`.

Anda dapat mengonfigurasi setiap uji kasus untuk menuliskan log dari pengujiannya yang dijalankan, termasuk log dari perangkat yang diuji, ke file `<group-id>_<test-id>` yang terletak di `<device-tester-extract-location>/results/execution-id/logs`. Untuk melakukan ini, ambil path ke berkas log dari konteks IDT dengan kueri `testData.logFilePath`, buat file di path itu, dan tuliskan konten yang Anda inginkan padanya. IDT secara otomatis memperbarui jalur berdasarkan uji kasus yang berjalan. Jika Anda memilih untuk tidak membuat file log untuk uji kasus, maka tidak ada file yang akan dibuat untuk uji kasus itu.

Anda juga dapat mengatur executable teks Anda untuk membuat berkas log tambahan yang diperlukan dalam folder `<device-tester-extract-location>/logs`. Kami menyarankan Anda untuk menentukan prefiks yang unik untuk nama file log sehingga file Anda tidak akan ditimpa.

## Laporkan hasil ke IDT
<a name="test-exec-results"></a>

IDT menuliskan hasil tes ke file `awsiotdevicetester_report.xml` dan `suite-name_report.xml`. File laporan ini terletak di `<device-tester-extract-location>/results/<execution-id>/`. Kedua laporan tersebut menangkap hasil dari eksekusi rangkaian tes. Untuk informasi selengkapnya tentang skema yang menggunakan IDT untuk laporan ini, lihat [Tinjau hasil tes dan log IDT](idt-review-results-logs.md)

Untuk mengisi konten file `suite-name_report.xml`, Anda harus menggunakan perintah `SendResult` untuk melaporkan hasil tes ke IDT sebelum eksekusi tes itu selesai. Jika IDT tidak dapat menemukan hasil tes, ia akan mengeluarkan kesalahan untuk uji kasus tersebut. Kutipan Python berikut menunjukkan perintah yang akan mengirimkan hasil tes ke IDT:

```
request-variable = SendResultRequest(TestResult(result))
client.send_result(request-variable)
```

Jika Anda tidak melaporkan hasil melalui API, IDT akan mencari hasil tes di folder artefak tes. Path ke folder ini disimpan dalam `testData.testArtifactsPath` yang disimpan dalam konteks IDT. Dalam folder ini, IDT menggunakan file XML yang diurutkan menurut abjad pertama yang ditempatkannya sebagai hasil tes. 

Jika logika pengujian Anda menghasilkan hasil JUnit XHTML, Anda dapat menulis hasil pengujian ke file XHTML di folder artefak untuk langsung memberikan hasil ke IDT alih-alih mengurai hasil dan kemudian menggunakan API untuk mengirimkannya ke IDT. 

Jika Anda menggunakan metode ini, pastikan bahwa logika pengujian Anda secara akurat merangkum hasil pengujian dan memformat file hasil Anda dalam format yang sama seperti file `suite-name_report.xml`. IDT tidak melakukan validasi data yang Anda berikan, dengan pengecualian berikut:
+ IDT mengabaikan semua properti dari tanda `testsuites`. Sebaliknya, IDT menghitung properti tag dari hasil grup pengujian lainnya yang dilaporkan.
+ Setidaknya satu `testsuite` tag harus ada dalam `testsuites`.

Karena IDT menggunakan folder artefak yang sama untuk semua uji kasus dan tidak menghapus file hasil antara pengujian yang berjalan, metode ini mungkin juga akan menyebabkan pelaporan yang salah jika IDT membaca file yang salah. Kami menyarankan Anda menggunakan nama yang sama untuk file hasil XML yang dihasilkan di semua uji kasus untuk menimpa hasil untuk setiap uji kasus dan pastikan bahwa hasil yang benar tersedia untuk digunakan oleh IDT. Meskipun Anda dapat menggunakan pendekatan campuran untuk pelaporan di rangkaian pengujian Anda, yaitu menggunakan file hasil XML untuk beberapa uji kasus dan mengirimkan hasil melalui API untuk uji kasus lainnya, kami tidak merekomendasikan pendekatan ini.

## Tentukan perilaku keluar
<a name="test-exec-exiting"></a>

Konfigurasikan executable teks Anda agar selalu keluar dengan kode keluar 0, meskipun uji kasus melaporkan kegagalan atau hasil kesalahan. Gunakan kode keluar bukan nol hanya untuk menunjukkan bahwa suatu uji kasus tidak berjalan atau jika executable uji kasus tidak dapat menyampaikan hasil apapun ke IDT. Ketika IDT menerima kode keluar bukan nol, IDT akan menandai uji kasus tersebut telah mengalami kesalahan yang mencegahnya berjalan.

IDT mungkin meminta atau mengharapkan uji kasus untuk berhenti berjalan sebelum selesai dalam peristiwa berikut. Gunakan informasi ini untuk mengonfigurasi executable uji kasus untuk mendeteksi setiap peristiwa ini dari uji kasus:

**Batas waktu**  
Terjadi ketika uji kasus berjalan lebih lama daripada nilai batas waktu yang ditentukan dalam file `test.json`. Jika test runner menggunakan argumen `timeout-multiplier` untuk menentukan pengali batas waktu, IDT akan menghitung nilai batas waktu dengan pengali tersebut.   
Untuk mendeteksi peristiwa ini, gunakan variabel lingkungan IDT\$1TEST\$1TIMEOUT. Ketika test runner meluncurkan tes, IDT akan menetapkan nilai variabel lingkungan IDT\$1TEST\$1TIMEOUT pada nilai batas waktu yang dihitung (dalam detik) dan melewati variabel pada executable uji kasus. Anda dapat membaca nilai variabel untuk menetapkan penghitung waktu yang sesuai.

**Menginterupsi**  
Terjadi ketika test runner menginterupsi IDT. Misalnya, dengan menekan Ctrl\$1C.  
Karena terminal menyebarkan sinyal ke semua proses anak, Anda cukup mengonfigurasi bagian yang menangani sinyal dalam uji kasus Anda untuk mendeteksi sinyal yang terinterupsi.   
Atau, Anda dapat secara berkala mengumpulkan API untuk memeriksa nilai boolean `CancellationRequested` di respons API `PollForNotifications`. Ketika IDT menerima sinyal terinterupsi, ia akan menetapkan nilai boolean `CancellationRequested` untuk `true`.

**Berhenti pada kegagalan pertama**  
Terjadi ketika uji kasus yang berjalan secara paralel dengan uji kasus gagal dan test runner menggunakan argumen `stop-on-first-failure` untuk menentukan bahwa IDT harus berhenti ketika menemui kegagalan apa pun.  
Untuk mendeteksi peristiwa ini, Anda dapat secara berkala mengumpulkan API untuk memeriksa nilai boolean `CancellationRequested` di respons API `PollForNotifications`. Ketika IDT menemui kegagalan dan dikonfigurasi untuk berhenti pada kegagalan pertama, tetapkan nilai boolean `CancellationRequested` untuk `true`.

Ketika salah satu peristiwa ini terjadi, IDT akan menunggu selama 5 menit untuk setiap uji kasus yang sedang berjalan saat ini untuk menyelesaikan prosesnya. Jika semua uji kasus yang berjalan tidak keluar dalam waktu 5 menit, IDT akan memaksa masing-masing proses untuk berhenti. Jika IDT belum menerima hasil tes sebelum proses berakhir, ia akan menandai uji kasus telah habis waktu. Sebagai praktik terbaik, Anda harus memastikan bahwa uji kasus Anda melakukan tindakan berikut ketika menghadapi salah satu peristiwa berikut:

1. Berhenti menjalankan logika uji normal.

1. Bersihkan sumber daya sementara apa pun, seperti uji artefak pada perangkat yang sedang diuji.

1. Laporkan hasil tes ke IDT, seperti kegagalan uji atau kesalahan. 

1. Keluar

# 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](gg-core.md#config-json). 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-config-custom.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-config-custom.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 `statemachine.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. 

# Mengonfigurasi pengaturan untuk test runner
<a name="set-config-custom"></a>

Untuk menjalankan rangkaian tes kustom, test runner harus mengonfigurasi pengaturannya berdasarkan rangkaia tes yang ingin dijalankannya. Pengaturan ditentukan berdasarkan templat file konfigurasi JSON yang terletak di folder `<device-tester-extract-location>/configs/`. Jika diperlukan, pelari uji juga harus menyiapkan AWS kredensional yang akan digunakan IDT untuk terhubung ke cloud. AWS 

Sebagai penyusun tes, Anda perlu mengonfigurasi file-file ini untuk [men-debug rangkaian tes](run-tests-custom.md). Anda harus memberikan petunjuk kepada test runner agar dapat mengonfigurasi pengaturan berikut yang diperlukan untuk menjalankan rangkaian tes Anda. 

## Konfigurasikan device.json
<a name="device-config-custom"></a>

File `device.json` berisi informasi tentang perangkat tempat uji dijalankan (misalnya, alamat IP, informasi login, sistem operasi, dan arsitektur CPU). 

Test runner dapat memberikan informasi ini dengan menggunakan file `device.json` templat berikut yang terletak di folder `<device-tester-extract-location>/configs/`.

```
[
    {
        "id": "<pool-id>",
        "sku": "<pool-sku>",
        "features": [
            {
                "name": "<feature-name>",             
                "value": "<feature-value>",                
                "configs": [
                    {
                        "name": "<config-name>",                    
                        "value": "<config-value>"
                    }
                ],
            }
        ],     
        "devices": [
            {
                "id": "<device-id>",              
                "connectivity": {
                    "protocol": "ssh | uart | docker",                   
                    // ssh
                    "ip": "<ip-address>",
                    "port": <port-number>,
                    "auth": {
                        "method": "pki | password",
                        "credentials": {
                            "user": "<user-name>", 
                            // pki
                            "privKeyPath": "/path/to/private/key",
                                         
                            // password
                            "password": "<password>",
                        }
                    },
                    
                    // uart
                    "serialPort": "<serial-port>",
                    
                    // docker
                    "containerId": "<container-id>",
                    "containerUser": "<container-user-name>",
                }
            }
        ]
    }
]
```

Semua kolom yang berisi nilai wajib diisi seperti yang dijelaskan di sini:

`id`  
ID alfanumerik yang ditetapkan pengguna secara unik mengidentifikasi kumpulan perangkat yang disebut *kolam perangkat*. Perangkat yang termasuk dalam suatu kolam harus memiliki perangkat keras yang identik. Ketika Anda menjalankan serangkaian tes, perangkat di kolam tersebut digunakan untuk memparalelkan beban kerja. Beberapa perangkat digunakan untuk menjalankan tes yang berbeda.

`sku`  
Nilai alfanumerik secara unik mengidentifikasi perangkat yang sedang diuji. SKU digunakan untuk melacak perangkat yang berkualitas.  
Jika Anda ingin mencantumkan papan Anda di Katalog AWS Partner Perangkat, SKU yang Anda tentukan di sini harus cocok dengan SKU yang Anda gunakan dalam proses daftar.

`features`  
Tidak wajib. Rangkaian yang berisi fitur perangkat yang didukung. Fitur perangkat adalah nilai-nilai yang ditetapkan pengguna yang Anda konfigurasikan di rangkaian tes Anda. Anda harus memberikan informasi kepada test runner tentang nama fitur dan nilai-nilai yang akan disertakan dalam file `device.json`. Misalnya, jika Anda ingin menguji perangkat yang berfungsi sebagai server MQTT untuk perangkat lain, maka Anda dapat mengonfigurasi logika uji Anda untuk memvalidasi tingkat tertentu yang didukung untuk fitur bernama `MQTT_QOS`. Test runner memberikan nama fitur ini dan menetapkan nilai fitur ke tingkat QOS yang didukung oleh perangkatnya. Anda dapat mengambil informasi yang diberikan dari [konteks IDT](idt-context.md) dengan kueri `devicePool.features`, atau dari [konteks state machine](idt-state-machine.md#state-machine-context) dengan kueri `pool.features`.    
`features.name`  
Nama fitur.  
`features.value`  
Nilai fitur yang didukung.  
`features.configs`  
Pengaturan konfigurasi, jika diperlukan, untuk fitur.    
`features.config.name`  
Nama pengaturan konfigurasi.  
`features.config.value`  
Nilai pengaturan yang didukung.

`devices`  
Rangkaian perangkat di kolam yang akan diuji. Setidaknya diperlukan satu perangkat.  <a name="device-array-fields"></a>  
`devices.id`  
Pengenal unik yang ditetapkan pengguna untuk perangkat yang sedang diuji.  
`connectivity.protocol`  
Protokol komunikasi yang digunakan untuk berkomunikasi dengan perangkat ini. Setiap perangkat di kolam harus menggunakan protokol yang sama.  
Saat ini, satu-satunya nilai yang didukung adalah `ssh` dan `uart` untuk perangkat fisik, dan `docker` untuk kontainer Docker.  
`connectivity.ip`  
Alamat IP perangkat yang sedang diuji.  
<a name="connectivity-protocol-ssh-only"></a>Properti ini hanya berlaku jika `connectivity.protocol` diatur ke `ssh`.  
`connectivity.port`  
Tidak wajib. Jumlah port yang akan digunakan untuk koneksi SSH.  
Nilai default-nya adalah 22.  
<a name="connectivity-protocol-ssh-only"></a>Properti ini hanya berlaku jika `connectivity.protocol` diatur ke `ssh`.  
`connectivity.auth`  
Informasi autentikasi untuk koneksi tersebut.  
<a name="connectivity-protocol-ssh-only"></a>Properti ini hanya berlaku jika `connectivity.protocol` diatur ke `ssh`.    
`connectivity.auth.method`  
Metode autentikasi yang digunakan untuk mengakses perangkat melalui protokol konektivitas yang diberikan.  
Nilai yang didukung adalah:  
+ `pki`
+ `password`  
`connectivity.auth.credentials`  
Kredensial yang digunakan untuk autentikasi.    
`connectivity.auth.credentials.password`  
Kata sandi yang digunakan untuk masuk ke perangkat yang sedang diuji.  
Nilai ini hanya berlaku jika `connectivity.auth.method` diatur ke `password`.  
`connectivity.auth.credentials.privKeyPath`  
Jalur lengkap ke kunci privat yang digunakan untuk masuk ke perangkat yang sedang diuji.  
Nilai ini hanya berlaku jika `connectivity.auth.method` diatur ke `pki`.  
`connectivity.auth.credentials.user`  
Nama pengguna untuk masuk ke perangkat yang sedang diuji.  
`connectivity.serialPort`  
Tidak wajib. Port serial tempat perangkat itu terhubung.  
Properti ini hanya berlaku jika `connectivity.protocol` diatur ke `uart`.  
`connectivity.containerId`  
ID kontainer atau nama kontainer Docker yang sedang diuji.  
<a name="connectivity-protocol-docker-only"></a>Properti ini hanya berlaku jika `connectivity.protocol` diatur ke `docker`.  
`connectivity.containerUser`  
Tidak wajib. Nama pengguna untuk pengguna di dalam kontainer. Nilai default adalah pengguna yang disediakan di Dockerfile.  
Nilai default-nya adalah 22.  
<a name="connectivity-protocol-docker-only"></a>Properti ini hanya berlaku jika `connectivity.protocol` diatur ke `docker`.
Untuk memeriksa apakah test runner mengonfigurasi koneksi perangkat yang salah untuk suatu pengujian, Anda dapat mengambil `pool.Devices[0].Connectivity.Protocol` dari konteks state machine dan membandingkannya dengan nilai yang diharapkan pada keadaan `Choice`. Jika protokol yang salah digunakan, cetak pesan dengan menggunakan keadaan `LogMessage` dan beralihlah ke keadaan `Fail`.  
Atau, Anda dapat menggunakan kode penanganan kesalahan untuk melaporkan kegagalan pengujian untuk jenis perangkat yang salah.

## (Opsional) Konfigurasikan userdata.json
<a name="userdata-config-custom"></a>

File `userdata.json` berisi informasi tambahan yang diperlukan oleh rangkaian tes tetapi tidak ditentukan dalam file `device.json`. Format file ini tergantung pada [file `userdata_scheme.json`](idt-json-config.md#userdata-schema-json) yang ditentukan dalam rangkaian uji tersebut. Jika Anda seorang penyusun tes, pastikan Anda memberikan informasi ini kepada pengguna yang akan menjalankan rangkaian tes yang Anda susun.

## (Opsional) Konfigurasikan resource.json
<a name="resource-config-custom"></a>

File `resource.json` berisi informasi tentang perangkat apa pun yang akan digunakan sebagai perangkat sumber daya. Perangkat sumber daya adalah perangkat yang diperlukan untuk menguji kemampuan tertentu dari perangkat yang diuji. Misalnya, untuk menguji kemampuan Bluetooth perangkat, Anda mungkin menggunakan perangkat sumber daya untuk menguji apakah perangkat Anda dapat berhasil tersambung. Perangkat sumber daya bersifat opsional, dan Anda dapat memerlukan perangkat sumber daya sebanyak yang Anda butuhkan. Sebagai penyusun tes, Anda menggunakan [file test.json](idt-json-config.md#test-json) untuk menentukan fitur perangkat sumber daya yang diperlukan untuk tes. Test runner kemudian akan menggunakan file `resource.json` untuk menyediakan kolam perangkat sumber daya yang memiliki fitur yang diperlukan. Pastikan Anda memberikan informasi ini kepada pengguna yang akan menjalankan rangkaian tes yang Anda tulis. 

Test runner dapat memberikan informasi ini dengan menggunakan file `resource.json` templat berikut yang terletak di folder `<device-tester-extract-location>/configs/`.

```
[
    {
        "id": "<pool-id>",
        "features": [
            {
                "name": "<feature-name>",             
                "version": "<feature-value>",                
                "jobSlots": <job-slots>
            }
        ],     
        "devices": [
            {
                "id": "<device-id>",              
                "connectivity": {
                    "protocol": "ssh | uart | docker",                   
                    // ssh
                    "ip": "<ip-address>",
                    "port": <port-number>,
                    "auth": {
                        "method": "pki | password",
                        "credentials": {
                            "user": "<user-name>", 
                            // pki
                            "privKeyPath": "/path/to/private/key",
                                         
                            // password
                            "password": "<password>",
                        }
                    },
                    
                    // uart
                    "serialPort": "<serial-port>",
                    
                    // docker
                    "containerId": "<container-id>",
                    "containerUser": "<container-user-name>",
                }
            }
        ]
    }
]
```

Semua kolom yang berisi nilai wajib diisi seperti yang dijelaskan di sini:

`id`  
ID alfanumerik yang ditetapkan pengguna secara unik mengidentifikasi kumpulan perangkat yang disebut *kolam perangkat*. Perangkat yang termasuk dalam suatu kolam harus memiliki perangkat keras yang identik. Ketika Anda menjalankan serangkaian tes, perangkat di kolam tersebut digunakan untuk memparalelkan beban kerja. Beberapa perangkat digunakan untuk menjalankan tes yang berbeda.

`features`  
Tidak wajib. Rangkaian yang berisi fitur perangkat yang didukung. Informasi yang diperlukan dalam kolom ini ditentukan dalam [file test.json](idt-json-config.md#test-json) di rangkaian tes dan menentukan tes mana yang akan dijalankan dan bagaimana menjalankan tes tersebut. Jika rangkaian tes tidak memerlukan fitur apa pun, kolom ini tidak wajib diisi.    
`features.name`  
Nama fitur.  
`features.version`  
Versi fitur.  
`features.jobSlots`  
Pengaturan untuk menunjukkan berapa banyak tes yang dapat secara bersamaan menggunakan perangkat. Nilai default-nya adalah `1`.

`devices`  <a name="device-array"></a>
Rangkaian perangkat di kolam yang akan diuji. Setidaknya diperlukan satu perangkat.  <a name="device-array-fields"></a>  
`devices.id`  
Pengenal unik yang ditetapkan pengguna untuk perangkat yang sedang diuji.  
`connectivity.protocol`  
Protokol komunikasi yang digunakan untuk berkomunikasi dengan perangkat ini. Setiap perangkat di kolam harus menggunakan protokol yang sama.  
Saat ini, satu-satunya nilai yang didukung adalah `ssh` dan `uart` untuk perangkat fisik, dan `docker` untuk kontainer Docker.  
`connectivity.ip`  
Alamat IP perangkat yang sedang diuji.  
<a name="connectivity-protocol-ssh-only"></a>Properti ini hanya berlaku jika `connectivity.protocol` diatur ke `ssh`.  
`connectivity.port`  
Tidak wajib. Jumlah port yang akan digunakan untuk koneksi SSH.  
Nilai default-nya adalah 22.  
<a name="connectivity-protocol-ssh-only"></a>Properti ini hanya berlaku jika `connectivity.protocol` diatur ke `ssh`.  
`connectivity.auth`  
Informasi autentikasi untuk koneksi tersebut.  
<a name="connectivity-protocol-ssh-only"></a>Properti ini hanya berlaku jika `connectivity.protocol` diatur ke `ssh`.    
`connectivity.auth.method`  
Metode autentikasi yang digunakan untuk mengakses perangkat melalui protokol konektivitas yang diberikan.  
Nilai yang didukung adalah:  
+ `pki`
+ `password`  
`connectivity.auth.credentials`  
Kredensial yang digunakan untuk autentikasi.    
`connectivity.auth.credentials.password`  
Kata sandi yang digunakan untuk masuk ke perangkat yang sedang diuji.  
Nilai ini hanya berlaku jika `connectivity.auth.method` diatur ke `password`.  
`connectivity.auth.credentials.privKeyPath`  
Jalur lengkap ke kunci privat yang digunakan untuk masuk ke perangkat yang sedang diuji.  
Nilai ini hanya berlaku jika `connectivity.auth.method` diatur ke `pki`.  
`connectivity.auth.credentials.user`  
Nama pengguna untuk masuk ke perangkat yang sedang diuji.  
`connectivity.serialPort`  
Tidak wajib. Port serial tempat perangkat itu terhubung.  
Properti ini hanya berlaku jika `connectivity.protocol` diatur ke `uart`.  
`connectivity.containerId`  
ID kontainer atau nama kontainer Docker yang sedang diuji.  
<a name="connectivity-protocol-docker-only"></a>Properti ini hanya berlaku jika `connectivity.protocol` diatur ke `docker`.  
`connectivity.containerUser`  
Tidak wajib. Nama pengguna untuk pengguna di dalam kontainer. Nilai default adalah pengguna yang disediakan di Dockerfile.  
Nilai default-nya adalah 22.  
<a name="connectivity-protocol-docker-only"></a>Properti ini hanya berlaku jika `connectivity.protocol` diatur ke `docker`.

## (Opsional) Konfigurasikan config.json
<a name="config-json-custom"></a>

File `config.json` berisi informasi konfigurasi untuk IDT. Biasanya, pelari uji tidak perlu memodifikasi file ini kecuali untuk memberikan kredensi AWS pengguna mereka untuk IDT, dan secara opsional, suatu wilayah. AWS Jika AWS kredensional dengan izin yang diperlukan disediakan Penguji AWS IoT Perangkat mengumpulkan dan mengirimkan metrik penggunaan ke. AWS Ini adalah fitur opt-in dan digunakan untuk meningkatkan fungsi IDT. Untuk informasi selengkapnya, lihat [Metrik penggunaan IDT](idt-usage-metrics.md).

Pelari uji dapat mengonfigurasi AWS kredensialnya dengan salah satu cara berikut:
+ **File kredensional**

  IDT menggunakan file kredensial yang sama sebagai AWS CLI. Untuk informasi selengkapnya, lihat [File konfigurasi dan kredensial](https://docs.aws.amazon.com/cli/latest/userguide/cli-config-files.html).

  Lokasi file kredensial itu bervariasi, tergantung pada sistem operasi yang Anda gunakan:
  + macOS, Linux: `~/.aws/credentials`
  + Windows: `C:\Users\UserName\.aws\credentials`
+ **Variabel lingkungan**

  Variabel lingkungan adalah variabel yang dikelola oleh sistem operasi dan digunakan oleh perintah sistem. Variabel yang ditentukan selama sesi SSH tidak akan tersedia setelah sesi itu ditutup. IDT dapat menggunakan variabel `AWS_ACCESS_KEY_ID` dan `AWS_SECRET_ACCESS_KEY` lingkungan untuk menyimpan AWS kredensional

  Untuk mengatur variabel ini di Linux, macOS, atau Unix, gunakan **export**:

  ```
  export AWS_ACCESS_KEY_ID=<your_access_key_id>
  export AWS_SECRET_ACCESS_KEY=<your_secret_access_key>
  ```

  Untuk menetapkan variabel ini di Windows, gunakan **set**:

  ```
  set AWS_ACCESS_KEY_ID=<your_access_key_id>
  set AWS_SECRET_ACCESS_KEY=<your_secret_access_key>
  ```

Untuk mengonfigurasi AWS kredensi IDT, pelari uji mengedit `auth` bagian dalam `config.json` file yang terletak di folder. `<device-tester-extract-location>/configs/`

```
{
    "log": {
        "location": "logs"
    },
    "configFiles": {
        "root": "configs",
        "device": "configs/device.json"
    },
    "testPath": "tests",
    "reportPath": "results",
    "awsRegion": "<region>",
    "auth": {
        "method": "file | environment",
        "credentials": {
            "profile": "<profile-name>"
        }
    }
}
]
```

Semua kolom yang berisi nilai wajib diisi seperti yang dijelaskan di sini:

**catatan**  
Semua jalur dalam file ini didefinisikan relatif terhadap file*<device-tester-extract-location>*.

`log.location`  
Jalur ke folder log di file*<device-tester-extract-location>*.

`configFiles.root`  
Path ke folder yang berisi file konfigurasi.

`configFiles.device`  
Jalur ke file `device.json`.

`testPath`  
Path ke folder yang berisi rangkaian tes.

`reportPath`  
Path ke folder yang akan berisi hasil tes setelah IDT menjalankan rangkaian tes.

`awsRegion`  
Tidak wajib. AWS Wilayah yang akan digunakan test suite. Jika tidak ditetapkan, rangkaian tes akan menggunakan wilayah default yang ditentukan dalam setiap rangkaian tes.

`auth.method`  
Metode yang digunakan IDT untuk mengambil kredensional AWS . Nilai yang didukung adalah `file` untuk mengambil kredensial dari file kredensial, dan `environment` untuk mengambil klredensial dengan menggunakan variabel lingkungan.

`auth.credentials.profile`  
Profil kredensial yang akan digunakan dari file kredensial. Properti ini hanya berlaku jika `auth.method` diatur ke `file`.

# Debug dan jalankan rangkaian tes kustom
<a name="run-tests-custom"></a>

Setelah [konfigurasi yang diperlukan](set-config-custom.md) diatur, IDT dapat menjalankan rangkaian tes Anda. Waktu aktif dari rangkaian tes penuh akan tergantung pada perangkat keras dan komposisi rangkaian tes. Untuk referensi, dibutuhkan sekitar 30 menit untuk menyelesaikan rangkaian tes AWS IoT Greengrass kualifikasi lengkap pada Raspberry Pi 3B.

Ketika Anda menyusun rangkaian tes Anda, Anda dapat menggunakan IDT untuk menjalankan rangkaian tes dalam mode debug untuk memeriksa kode Anda sebelum Anda menjalankannya atau memberikannya kepada test runner.

## Jalankan IDT dalam mode debug
<a name="idt-debug-mode"></a>

Karena rangkaian tes tergantung pada IDT untuk berinteraksi dengan perangkat, menyediakan konteks, dan menerima hasil, Anda tidak bisa hanya men-debug rangkaian tes Anda di IDE tanpa berinteraksi dengan IDT. Untuk melakukannya, IDT CLI menyediakan perintah `debug-test-suite` yang memungkinkan Anda menjalankan IDT dalam mode debug. Jalankan perintah berikut untuk menampilkan opsi yang tersedia untuk `debug-test-suite`:

```
devicetester_[linux | mac | win_x86-64] debug-test-suite -h
```

Ketika Anda menjalankan IDT dalam mode debug, IDT tidak benar-benar meluncurkan rangkaian tes atau menjalankan state machine; sebaliknya, IDT berinteraksi dengan IDE Anda untuk menanggapi permintaan yang dibuat dari rangkaian tes yang berjalan di IDE dan mencetak log ke konsol. IDT tidak melakukan timeout dan menunggu untuk keluar hingga secara manual terinterupsi. Dalam mode debug, IDT juga tidak menjalankan state machine dan tidak akan menghasilkan file laporan. Untuk men-debug rangkaian tes Anda, Anda harus menggunakan IDE Anda untuk memberikan beberapa informasi yang biasanya diperoleh IDT dari file JSON konfigurasi. Pastikan Anda memberikan informasi berikut:
+ Variabel lingkungan dan argumen untuk setiap tes. IDT tidak akan membaca informasi ini dari `test.json` atau `suite.json`.
+ Argumen untuk memilih perangkat sumber daya. IDT tidak akan membaca informasi ini dari `test.json`.

Untuk men-debug rangkaian tes Anda, selesaikan langkah berikut:

1.  Buat file konfigurasi pengaturan yang diperlukan untuk menjalankan rangkaian tes. Misalnya, jika rangkaian tes Anda memerlukan `device.json`, `resource.json`, dan `user data.json`, pastikan Anda mengonfigurasi semuanya sesuai kebutuhan. 

1. Jalankan perintah berikut untuk menempatkan IDT dalam mode debug dan pilih perangkat yang diperlukan untuk menjalankan tes.

   ```
   devicetester_[linux | mac | win_x86-64] debug-test-suite [options]
   ```

   Setelah Anda menjalankan perintah ini, IDT akan menunggu permintaan dari rangkaian tes dan kemudian menanggapinya. IDT juga akan menghasilkan variabel lingkungan yang diperlukan untuk proses kasus untuk IDT Client SDK. 

1. Dalam IDE Anda, gunakan konfigurasi `run` atau `debug` untuk melakukan hal berikut:

   1. Menetapkan nilai-nilai variabel lingkungan yang dihasilkan IDT.

   1. Tetapkan nilai dari setiap variabel lingkungan atau argumen yang Anda tentukan dalam file `test.json` dan `suite.json` Anda.

   1. Menetapkan breakpoint sesuai kebutuhan.

1. Menjalankan rangkaian tes di IDE Anda. 

   Anda dapat men-debug dan kembali menjalankan rangkaain tes sebanyak mungkin yang diperlukan. IDT tidak melakukan timeout dalam mode debug.

1.  Setelah Anda menyelesaikan debugging, interupsi IDT untuk keluar dari mode debug.

## Perintah IDT CLI untuk menjalankan percobaan
<a name="idt-cli-commands"></a>

Bagian berikut menjelaskan perintah IDT CLI:

------
#### [ IDT v4.0.0 ]

`help`  <a name="idt-command-help"></a>
Mendaftar informasi tentang perintah yang ditentukan.

`list-groups`  <a name="idt-command-list-groups"></a>
Mendaftar grup dalam rangkaian tes yang diberikan.

`list-suites`  <a name="idt-command-list-suites"></a>
Mencantumkan rangkaian tes yang tersedia.

`list-supported-products`  
Daftar produk yang didukung untuk versi IDT Anda, dalam hal ini AWS IoT Greengrass versi, dan versi rangkaian pengujian AWS IoT Greengrass kualifikasi yang tersedia untuk versi IDT saat ini.

`list-test-cases`  
Mencantumkan uji kasus dalam grup uji yang diberikan. Opsi berikut didukung:  
+ `group-id`. Grup uji yang harus dicari. Opsi ini diperlukan dan harus menentukan satu grup.

`run-suite`  
Menjalankan serangkaian tes pada kolam perangkat. Berikut ini adalah beberapa opsi yang umum digunakan:  
+ `suite-id`. Versi rangkaian tes yang akan dijalankan. Jika tidak ditentukan, IDT akan menggunakan versi terbaru dalam folder `tests`.
+ `group-id`. Grup uji yang akan jalankan, sebagai daftar yang dipisahkan koma. Jika tidak ditentukan, IDT akan menjalankan semua grup uji di rangkaian tes.
+ `test-id`. Uji kasus yang akan dijalankan, sebagai daftar yang dipisahkan koma. Ketika ditentukan, `group-id` harus menentukan satu grup.
+ `pool-id`. Kolam perangkat yang akan diuji. Test runner harus menentukan kolam jika memiliki beberapa perangkat kolam yang ditentukan dalam file `device.json`.
+ `timeout-multiplier`. Mengkonfigurasi IDT untuk mengubah batas waktu eksekusi tes yang ditentukan dalam file `test.json` untuk tes dengan pengganda yang ditetapkan pengguna.
+ `stop-on-first-failure`. Mengkonfigurasi IDT untuk menghentikan eksekusi pada kegagalan pertama. Pilihan ini harus digunakan dengan `group-id` untuk men-debug grup uji yang ditentukan.
+ `userdata`. Menetapkan file yang berisi informasi data pengguna yang diperlukan untuk menjalankan rangkaian tes. Hal ini hanya diperlukan jika `userdataRequired` diatur ke BETUL di file `suite.json`untuk rangkaian uji itu.
Untuk informasi lebih lanjut tentang opsi `run-suite`, gunakan opsi `help`:  

```
devicetester_[linux | mac | win_x86-64] run-suite -h
```

`debug-test-suite`  
Jalankan rangkaian tes dalam mode debug. Untuk informasi selengkapnya, lihat [Jalankan IDT dalam mode debug](#idt-debug-mode).

------

# Tinjau hasil tes dan log IDT
<a name="idt-review-results-logs"></a>

Bagian ini menjelaskan format di mana IDT menghasilkan log konsol dan laporan uji.

## Format pesan konsol
<a name="idt-console-format"></a>

AWS IoT Device Tester menggunakan format standar untuk mencetak pesan ke konsol saat memulai rangkaian pengujian. Kutipan berikut menunjukkan contoh pesan konsol yang dihasilkan oleh IDT.

```
time="2000-01-02T03:04:05-07:00" level=info msg=Using suite: MyTestSuite_1.0.0 
executionId=9a52f362-1227-11eb-86c9-8c8590419f30
```

Sebagian besar pesan konsol terdiri dari kolom berikut:

`time`  
Sebuah cap waktu ISO 8601 penuh untuk peristiwa yang tercatat.

`level`  
Tingkat pesan untuk peristiwa yang tercatat. Biasanya, tingkat pesan yang tercatat adalah salah satu dari `info`, `warn`, atau `error`. IDT mengeluarkan pesan `fatal` atau `panic` jika bertemu dengan peristiwa yang diharapkan yang menyebabkannya keluar lebih awal.

`msg`  
Pesan yang dicatat. 

`executionId`  
Sebuah string ID yang unik untuk proses IDT saat ini. ID ini digunakan untuk membedakan antara IDT individual yang berjalan.

Pesan konsol yang dihasilkan dari rangkaian tes memberikan informasi tambahan tentang perangkat yang diuji berikut rangkaian uji, grup uji, dan uji kasus yang dijalankan oleh IDT. Kutipan berikut menunjukkan contoh pesan konsol yang dihasilkan dari rangkaian tes.

```
time="2000-01-02T03:04:05-07:00" level=info msg=Hello world! suiteId=MyTestSuite
groupId=myTestGroup testCaseId=myTestCase deviceId=my-device
executionId=9a52f362-1227-11eb-86c9-8c8590419f30
```

Bagian tertentu dari rangkaian tes pada pesan konsol berisi kolom-kolom berikut:

`suiteId`  
Nama rangkaian tes yang sedang berjalan saat ini.

`groupId`  
ID grup uji yang sedang berjalan saat ini.

`testCaseId`  
ID uji kasus yang berjalan saat ini. 

`deviceId`  
ID dari perangkat yang diuji yang sedang digunakan oleh uji kasus saat ini.

Untuk mencetak ringkasan tes ke konsol tersebut ketika IDT selesai menjalankan pengujian, Anda harus menyertakan [keadaan `Report`](idt-state-machine.md#state-report) pada state machine Anda. Ringkasan uji berisi informasi tentang rangkaian uji, hasil uji untuk setiap grup yang dijalankan, dan lokasi log dan file laporan yang dihasilkan. Contoh berikut menunjukkan pesan ringkasan tes.

```
========== Test Summary ==========
Execution Time:     5m00s
Tests Completed:    4
Tests Passed:       3
Tests Failed:       1
Tests Skipped:      0
----------------------------------
Test Groups:
    GroupA:         PASSED
    GroupB:         FAILED
----------------------------------
Failed Tests:
    Group Name: GroupB
        Test Name: TestB1
            Reason: Something bad happened
----------------------------------
Path to IoT Device Tester Report: /path/to/awsiotdevicetester_report.xml
Path to Test Execution Logs: /path/to/logs
Path to Aggregated JUnit Report: /path/to/MyTestSuite_Report.xml
```

## AWS IoT Skema laporan Penguji Perangkat
<a name="idt-report"></a>

 `awsiotdevicetester_report.xml` adalah laporan bertanda tangan yang berisi informasi berikut: 
+ Versi IDT.
+ Versi rangkaian tes.
+ Tanda tangan laporan dan kunci yang digunakan untuk menandatangani laporan.
+ SKU Perangkat dan nama kolam perangkat yang ditentukan dalam file `device.json`.
+ Versi produk dan fitur perangkat yang diuji.
+ Ringkasan agregat hasil tes. Informasi ini sama dengan yang terkandung dalam file `suite-name_report.xml`.

```
<apnreport>
    <awsiotdevicetesterversion>idt-version</awsiotdevicetesterversion>
    <testsuiteversion>test-suite-version</testsuiteversion>
    <signature>signature</signature>
    <keyname>keyname</keyname>
    <session>
        <testsession>execution-id</testsession>
        <starttime>start-time</starttime>
        <endtime>end-time</endtime>
    </session>
    <awsproduct>
        <name>product-name</name>
        <version>product-version</version>
        <features>
            <feature name="<feature-name>" value="supported | not-supported | <feature-value>" type="optional | required"/>
        </features>
    </awsproduct>
    <device>
        <sku>device-sku</sku>
        <name>device-name</name>
        <features>
            <feature name="<feature-name>" value="<feature-value>"/>
        </features>
        <executionMethod>ssh | uart | docker</executionMethod>
    </device>
    <devenvironment>
        <os name="<os-name>"/>
    </devenvironment>
    <report>
        <suite-name-report-contents>
    </report>
</apnreport>
```

File `awsiotdevicetester_report.xml` berisi tanda `<awsproduct>` yang berisi informasi tentang produk yang sedang diuji dan fitur produk yang divalidasi setelah menjalankan serangkaian pengujian.Atribut yang digunakan dalam tanda `<awsproduct>`

`name`  
Nama produk yang sedang diuji.

`version`  
Versi produk yang sedang diuji.

`features`  
Fitur divalidasi. Fitur yang ditandai sebagai `required` diperlukan bagi rangkaian tes untuk memvalidasi perangkat. Potongan berikut menunjukkan bagaimana informasi ini muncul di file `awsiotdevicetester_report.xml`.  

```
<feature name="ssh" value="supported" type="required"></feature>
```
Fitur yang ditandai sebagai `optional` tidak diperlukan untuk validasi. Potongan berikut menunjukkan fitur opsional.  

```
<feature name="hsi" value="supported" type="optional"></feature> 
<feature name="mqtt" value="not-supported" type="optional"></feature>
```

## Skema laporan rangkaian uji
<a name="suite-report"></a>

`suite-name_Result.xml`Laporan ini dalam [format JUnit XHTML](https://llg.cubic.org/docs/junit/). Anda dapat mengintegrasikannya ke dalam platform integrasi dan deployment berkelanjutan seperti [Jenkins](https://jenkins.io/), [Bamboo](https://www.atlassian.com/software/bamboo), dan sebagainya. Laporan ini berisi ringkasan agregat hasil tes.

```
<testsuites name="<suite-name> results" time="<run-duration>" tests="<number-of-test>" failures="<number-of-tests>" skipped="<number-of-tests>" errors="<number-of-tests>" disabled="0">
    <testsuite name="<test-group-id>" package="" tests="<number-of-tests>" failures="<number-of-tests>" skipped="<number-of-tests>" errors="<number-of-tests>" disabled="0">
        <!--success-->
        <testcase classname="<classname>" name="<name>" time="<run-duration>"/>
        <!--failure-->
        <testcase classname="<classname>" name="<name>" time="<run-duration>">
            <failure type="<failure-type>">
                reason
            </failure>
        </testcase>
        <!--skipped-->
        <testcase classname="<classname>" name="<name>" time="<run-duration>">
            <skipped>
                reason
            </skipped>
        </testcase>
        <!--error-->
        <testcase classname="<classname>" name="<name>" time="<run-duration>">
            <error>
                reason
            </error>
        </testcase>
    </testsuite>
</testsuites>
```

Bagian laporan baik di `awsiotdevicetester_report.xml` maupun `suite-name_report.xml` mendaftar tes yang dijalankan dan hasilnya.

Tag XML pertama `<testsuites>` berisi ringkasan pelaksanaan tes. Sebagai contoh:

```
<testsuites name="MyTestSuite results" time="2299" tests="28" failures="0" errors="0" disabled="0">
```Atribut yang digunakan dalam tanda `<testsuites>`

`name`  
Nama rangkaian tes.

`time`  
Waktu, dalam hitungan detik, yang dibutuhkannya untuk menjalankan rangkaian tes.

`tests`  
Jumlah tes yang dilaksanakan.

`failures`  
Jumlah tes yang dijalankan, tetapi tidak lulus.

`errors`  
Jumlah tes yang tidak dapat dilaksanakan oelh IDT.

`disabled`  
Atribut ini tidak digunakan dan bisa diabaikan.

Jika pengujian gagal atau salah, Anda dapat mengidentifikasi pengujian yang gagal dengan meninjau tanda XML `<testsuites>`. Tag XML `<testsuite>` di dalam tag `<testsuites>` menunjukkan ringkasan hasil tes untuk grup uji. Sebagai contoh:

```
<testsuite name="combination" package="" tests="1" failures="0" time="161" disabled="0" errors="0" skipped="0">
```

Format ini serupa dengan tanda `<testsuites>`, tetapi dengan atribut `skipped` yang tidak digunakan dan dapat diabaikan. Di dalam masing-masing tanda XML `<testsuite>`, terdapat tanda `<testcase>` untuk setiap tes yang dieksekusi untuk suatu grup uji. Sebagai contoh:

```
<testcase classname="Security Test" name="IP Change Tests" attempts="1"></testcase>>
```Atribut yang digunakan dalam tanda `<testcase>`

`name`  
Nama tes.

`attempts`  
Berapa kali IDT mengeksekusi uji kasus.

Ketika tes gagal atau kesalahan terjadi, tag `<failure>` atau `<error>` akan ditambahkan ke tag `<testcase>` dengan informasi untuk pemecahan masalah. Sebagai contoh:

```
<testcase classname="mcu.Full_MQTT" name="MQTT_TestCase" attempts="1">
	<failure type="Failure">Reason for the test failure</failure>
	<error>Reason for the test execution error</error>
</testcase>
```

# Metrik penggunaan IDT
<a name="idt-usage-metrics"></a>

Jika Anda memberikan AWS kredensil dengan izin yang diperlukan, Penguji AWS IoT Perangkat mengumpulkan dan mengirimkan metrik penggunaan ke. AWS Ini adalah fitur opt-in dan digunakan untuk meningkatkan fungsi IDT. IDT mengumpulkan informasi seperti berikut: 
+  Akun AWS ID yang digunakan untuk menjalankan IDT
+  Perintah IDT CLI yang digunakan untuk menjalankan tes
+ Rangkaian tes yang dijalankan
+ Suite pengujian di *<device-tester-extract-location>* folder
+ Jumlah perangkat yang dikonfigurasi dalam kolam perangkat
+ Nama uji kasus dan waktu aktif
+ Informasi hasil tes, seperti apakah tes berhasil dilalui, gagal, mengalami kesalahan, atau dilewati
+ Fitur produk yang diuji
+ Perilaku keluar IDT, seperti keluar tak terduga atau lebih awal 

 Semua informasi yang dikirimkan IDT juga dicatat pada file `metrics.log` di folder `<device-tester-extract-location>/results/<execution-id>/`. Anda dapat melihat file log untuk melihat informasi yang dikumpulkan ketika tes dijalankan. File ini dibuat hanya jika Anda memilih untuk mengumpulkan metrik penggunaan. 

Untuk menonaktifkan pengumpulam metrik, Anda tidak perlu melakukan tindakan tambahan. Cukup jangan menyimpan AWS kredensil Anda, dan jika Anda memiliki AWS kredensil yang disimpan, jangan mengkonfigurasi file `config.jso` n untuk mengaksesnya.

## Konfigurasikan AWS kredensil Anda
<a name="configure-aws-creds-for-metrics"></a>

Jika Anda belum memiliki Akun AWS, Anda harus [membuatnya](#idt-metrics-aws-account). Jika Anda sudah memiliki Akun AWS, Anda hanya perlu [mengonfigurasi izin yang diperlukan](#idt-metrics-permissions) untuk akun Anda yang memungkinkan IDT mengirim metrik penggunaan AWS atas nama Anda.

### Langkah 1: Buat Akun AWS
<a name="idt-metrics-aws-account"></a>

Pada langkah ini, buat dan konfigurasikan Akun AWS. Jika Anda sudah memiliki Akun AWS, lompat ke[Langkah 2: Konfigurasikan izin untuk IDT](#idt-metrics-permissions).

#### Mendaftar untuk Akun AWS
<a name="sign-up-for-aws"></a>

Jika Anda tidak memiliki Akun AWS, selesaikan langkah-langkah berikut untuk membuatnya.

**Untuk mendaftar untuk Akun AWS**

1. Buka [https://portal.aws.amazon.com/billing/pendaftaran.](https://portal.aws.amazon.com/billing/signup)

1. Ikuti petunjuk online.

   Bagian dari prosedur pendaftaran melibatkan menerima panggilan telepon atau pesan teks dan memasukkan kode verifikasi pada keypad telepon.

   Saat Anda mendaftar untuk sebuah Akun AWS, sebuah *Pengguna root akun AWS*dibuat. Pengguna root memiliki akses ke semua Layanan AWS dan sumber daya di akun. Sebagai praktik keamanan terbaik, tetapkan akses administratif ke pengguna, dan gunakan hanya pengguna root untuk melakukan [tugas yang memerlukan akses pengguna root](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_root-user.html#root-user-tasks).

AWS mengirimi Anda email konfirmasi setelah proses pendaftaran selesai. Kapan saja, Anda dapat melihat aktivitas akun Anda saat ini dan mengelola akun Anda dengan masuk [https://aws.amazon.com.rproxy.govskope.cake/](https://aws.amazon.com/) dan memilih **Akun Saya**.

#### Buat pengguna dengan akses administratif
<a name="create-an-admin"></a>

Setelah Anda mendaftar Akun AWS, amankan Pengguna root akun AWS, aktifkan AWS IAM Identity Center, dan buat pengguna administratif sehingga Anda tidak menggunakan pengguna root untuk tugas sehari-hari.

**Amankan Anda Pengguna root akun AWS**

1.  Masuk ke [Konsol Manajemen AWS](https://console.aws.amazon.com/)sebagai pemilik akun dengan memilih **pengguna Root** dan memasukkan alamat Akun AWS email Anda. Di laman berikutnya, masukkan kata sandi.

   Untuk bantuan masuk dengan menggunakan pengguna root, lihat [Masuk sebagai pengguna root](https://docs.aws.amazon.com/signin/latest/userguide/console-sign-in-tutorials.html#introduction-to-root-user-sign-in-tutorial) di *AWS Sign-In Panduan Pengguna*.

1. Mengaktifkan autentikasi multi-faktor (MFA) untuk pengguna root Anda.

   Untuk petunjuk, lihat [Mengaktifkan perangkat MFA virtual untuk pengguna Akun AWS root (konsol) Anda](https://docs.aws.amazon.com/IAM/latest/UserGuide/enable-virt-mfa-for-root.html) di Panduan Pengguna *IAM*.

**Buat pengguna dengan akses administratif**

1. Aktifkan Pusat Identitas IAM.

   Untuk mendapatkan petunjuk, silakan lihat [Mengaktifkan AWS IAM Identity Center](https://docs.aws.amazon.com//singlesignon/latest/userguide/get-set-up-for-idc.html) di *Panduan Pengguna AWS IAM Identity Center *.

1. Di Pusat Identitas IAM, berikan akses administratif ke pengguna.

   Untuk tutorial tentang menggunakan Direktori Pusat Identitas IAM sebagai sumber identitas Anda, lihat [Mengkonfigurasi akses pengguna dengan default Direktori Pusat Identitas IAM](https://docs.aws.amazon.com//singlesignon/latest/userguide/quick-start-default-idc.html) di *Panduan AWS IAM Identity Center Pengguna*.

**Masuk sebagai pengguna dengan akses administratif**
+ Untuk masuk dengan pengguna Pusat Identitas IAM, gunakan URL masuk yang dikirim ke alamat email saat Anda membuat pengguna Pusat Identitas IAM.

  Untuk bantuan masuk menggunakan pengguna Pusat Identitas IAM, lihat [Masuk ke portal AWS akses](https://docs.aws.amazon.com/signin/latest/userguide/iam-id-center-sign-in-tutorial.html) di *Panduan AWS Sign-In Pengguna*.

**Tetapkan akses ke pengguna tambahan**

1. Di Pusat Identitas IAM, buat set izin yang mengikuti praktik terbaik menerapkan izin hak istimewa paling sedikit.

   Untuk petunjuknya, lihat [Membuat set izin](https://docs.aws.amazon.com//singlesignon/latest/userguide/get-started-create-a-permission-set.html) di *Panduan AWS IAM Identity Center Pengguna*.

1. Tetapkan pengguna ke grup, lalu tetapkan akses masuk tunggal ke grup.

   Untuk petunjuk, lihat [Menambahkan grup](https://docs.aws.amazon.com//singlesignon/latest/userguide/addgroups.html) di *Panduan AWS IAM Identity Center Pengguna*.

### Langkah 2: Konfigurasikan izin untuk IDT
<a name="idt-metrics-permissions"></a>

Pada langkah ini, konfigurasikan izin yang menggunakan IDT untuk menjalankan tes dan mengumpulkan data penggunaan IDT. Anda dapat menggunakan Konsol Manajemen AWS or AWS Command Line Interface (AWS CLI) untuk membuat kebijakan IAM dan pengguna untuk IDT, lalu melampirkan kebijakan ke pengguna.
+ [Untuk Mengkonfigurasi Izin untuk IDT (Konsol)](#idt-metrics-permissions-console)
+ [Untuk Mengkonfigurasi Izin untuk IDT ()AWS CLI](#idt-metrics-permissions-cli)<a name="idt-metrics-permissions-console"></a>

**Untuk mengonfigurasi izin untuk IDT (konsol)**

Ikuti langkah berikut untuk menggunakan konsol untuk mengonfigurasi izin untuk IDT untuk AWS IoT Greengrass.

1. Masuklah ke [konsol IAM](https://console.aws.amazon.com/iam).

1. Buat kebijakan yang dikelola pelanggan yang memberikan izin untuk membuat peran dengan izin tertentu. 

   1. Pada panel navigasi, pilih **Kebijakan**, lalu pilih **Buat kebijakan**.

   1. Pada tab **JSON**, ganti placeholder konten dengan kebijakan berikut.

------
#### [ JSON ]

****  

      ```
      {
          "Version":"2012-10-17",		 	 	 
          "Statement": [
              {
                  "Effect": "Allow",
                  "Action": [
                      "iot-device-tester:SendMetrics"
                  ],
                  "Resource": "*"
              }
          ]
      }
      ```

------

   1. Pilih **Berikutnya: Tanda**.

   1. Pilih **Berikutnya: Tinjau**.

   1. Untuk **Nama**, masukkan **IDTUsageMetricsIAMPermissions**. Di bawah **Ringkasan**, tinjau izin yang diberikan oleh kebijakan Anda.

   1. Pilih **Buat kebijakan**.

1. Buatlah pengguna IAM dan lampirkan izin untuk pengguna.

   1. Buat pengguna IAM. Ikuti langkah 1 hingga 5 di [Membuat pengguna IAM (konsol)](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_users_create.html#id_users_create_console) di *Panduan Pengguna IAM*. Jika Anda sudah membuat pengguna IAM, lewati ke langkah berikutnya. 

   1. Lampirkan izin untuk pengguna IAM Anda:

      1. Pada halaman **Setel izin**, pilih **Lampirkan kebijakan yang ada secara langsung**.

      1. Cari IAMPermissions kebijakan **IDTUsageMetrik** yang Anda buat di langkah sebelumnya. Pilih kotak centang.

   1. Pilih **Selanjutnya: Menandai**.

   1. Pilih **Berikutnya: Tinjauan** untuk melihat ringkasan pilihan Anda.

   1. Pilih **Buat pengguna**.

   1. Untuk melihat kunci akses pengguna (kunci akses IDs dan kunci akses rahasia), pilih **Tampilkan** di sebelah kata sandi dan kunci akses. Untuk menyimpan kunci akses, pilih **Download.csv** lalu simpan file ke lokasi yang aman. Anda menggunakan informasi ini nanti untuk mengonfigurasi file AWS kredensi Anda.

 <a name="idt-metrics-permissions-cli"></a>

**Untuk mengonfigurasi izin untuk IDT (AWS CLI)**

Ikuti langkah-langkah ini untuk menggunakan AWS CLI untuk mengkonfigurasi izin untuk IDT untuk. AWS IoT Greengrass Jika Anda sudah mengonfigurasi izin di konsol, lewati ke [Konfigurasikan perangkat Anda untuk menjalankan tes IDT](device-config-setup.md) atau [Opsional: Mengonfigurasi wadah Docker Anda untuk IDT untuk AWS IoT Greengrass](docker-config-setup.md).

1. Di komputer Anda, instal dan konfigurasikan AWS CLI jika belum diinstal. Ikuti langkah-langkah di [Menginstal AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-install.html) di *Panduan Pengguna AWS Command Line Interface *.
**catatan**  
 AWS CLI Ini adalah alat open source yang dapat Anda gunakan untuk berinteraksi dengan AWS layanan dari shell baris perintah Anda.

1. Buat kebijakan terkelola pelanggan berikut yang memberikan izin untuk mengelola IDT dan peran. AWS IoT Greengrass 

------
#### [ Linux, macOS, or Unix ]

   ```
   aws iam create-policy --policy-name IDTUsageMetricsIAMPermissions --policy-document '{
       "Version": "2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Action": [
                   "iot-device-tester:SendMetrics"
               ],
               "Resource": "*"
           }
       ]
   }'
   ```

------
#### [ Windows command prompt ]

   ```
   aws iam create-policy --policy-name IDTUsageMetricsIAMPermissions --policy-document
                                           '{\"Version\": \"2012-10-17\",		 	 	  \"Statement\": [{\"Effect\": \"Allow\", \"Action\": [\"iot-device-tester:SendMetrics\"], \"Resource": \"*\"}]}'
   ```

**catatan**  
Langkah ini mencakup contoh prompt perintah Windows karena menggunakan sintaks JSON yang berbeda dari perintah terminal Linux, MacOS, atau Unix.

------

1. Buat pengguna IAM dan lampirkan izin yang diperlukan oleh IDT untuk AWS IoT Greengrass.

   1. Buat pengguna IAM. 

      ```
      aws iam create-user --user-name user-name
      ```

   1. Lampirkan kebijakan `IDTUsageMetricsIAMPermissions` yang Anda buat ke pengguna IAM Anda. Ganti *user-name* dengan nama pengguna IAM Anda dan *<account-id>* dalam perintah dengan ID Anda Akun AWS.

      ```
      aws iam attach-user-policy --user-name user-name --policy-arn arn:aws:iam::<account-id>:policy/IDTGreengrassIAMPermissions
      ```

1. Buat secret access key untuk pengguna tersebut.

   ```
   aws iam create-access-key --user-name user-name
   ```

   Simpan output tersebut di lokasi yang aman. Anda menggunakan informasi ini nanti untuk mengonfigurasi file AWS kredensi Anda.

## Memberikan AWS kredensi ke IDT
<a name="idt-metrics-creds"></a>

Untuk mengizinkan IDT mengakses AWS kredensil Anda dan mengirimkan metrik AWS, lakukan hal berikut:

1. Simpan AWS kredensil untuk pengguna IAM Anda sebagai variabel lingkungan atau dalam file kredensil:

   1. Untuk menggunakan variabel lingkungan, jalankan perintah berikut:

      ```
      AWS_ACCESS_KEY_ID=access-key
      AWS_SECRET_ACCESS_KEY=secret-access-key
      ```

   1. Untuk menggunakan file kredensial, tambahkan informasi berikut ke `.aws/credentials file:`

      ```
      [profile-name]
      aws_access_key_id=access-key
      aws_secret_access_key=secret-access-key
      ```

1. Konfigurasikan bagian `auth` dari file `config.json`. Lihat informasi yang lebih lengkap di [(Opsional) Konfigurasikan config.json](set-config-custom.md#config-json-custom).

# IDT untuk AWS IoT Greengrass pemecahan masalah
<a name="idt-troubleshooting"></a>

IDT untuk AWS IoT Greengrass menulis kesalahan ini ke berbagai lokasi berdasarkan jenis kesalahan. Eror ditulis ke konsol tersebut, berkas log, dan laporan tes.

## Kode eror
<a name="bk-error-codes"></a>

Tabel berikut mencantumkan kode eror yang dihasilkan oleh IDT untuk AWS IoT Greengrass.


| Kode eror | Nama kode eror | Kemungkinan akar masalah | Pemecahan Masalah | 
| --- | --- | --- | --- | 
|  101  |  InternalError  |  Terjadi eror internal.  |  Periksa log di bawah `<device-tester-extract-location>/results` direktori. Jika Anda tidak dapat men-debug masalah, hubungi [ Support Developer AWS](https://aws.amazon.com/premiumsupport/plans/developers/).  | 
|  102  |  TimeoutError  |  Tes tidak dapat diselesaikan dalam rentang waktu yang terbatas. Hal ini dapat terjadi jika: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/greengrass/v1/developerguide/idt-troubleshooting.html)  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/greengrass/v1/developerguide/idt-troubleshooting.html)  | 
|  103  |  PlatformNotSupportError  |  Kombinasi OS/arsitektur salah yang ditentukan dalam `device.json`.  |  Ubah konfigurasi Anda ke salah satu kombinasi yang didukung: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/greengrass/v1/developerguide/idt-troubleshooting.html) Untuk informasi selengkapnya, lihat [Konfigurasikan device.json](set-config.md#device-config).  | 
|  104  |  VersionNotSupportError  |  Versi perangkat lunak AWS IoT Greengrass Core tidak didukung oleh versi IDT yang Anda gunakan.  |  Gunakan **device\$1tester\$1bin version** perintah untuk menemukan versi perangkat lunak AWS IoT Greengrass Core yang didukung. Sebagai contoh, jika Anda menggunakan macOS, gunakan **./devicetester\$1mac\$1x86\$164 version**. Untuk menemukan versi perangkat lunak AWS IoT Greengrass Core yang Anda gunakan: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/greengrass/v1/developerguide/idt-troubleshooting.html) Anda dapat menguji versi perangkat lunak AWS IoT Greengrass Core yang berbeda. Untuk informasi selengkapnya, lihat [Memulai dengan AWS IoT Greengrass](gg-gs.md).  | 
|  105  |  LanguageNotSupportError  |  IDT mendukung Python AWS IoT Greengrass untuk perpustakaan SDKs dan hanya.  |  Pastikan: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/greengrass/v1/developerguide/idt-troubleshooting.html)  | 
|  106  |  ValidationError  |  Beberapa bidang di `device.json` atau `config.json` tidak valid.  |  Periksa pesan eror di sisi kanan kode eror dalam laporan.  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/greengrass/v1/developerguide/idt-troubleshooting.html)  | 
|  107  |  SSHConnectionGagal  |  Mesin tes tidak dapat terhubung ke perangkat yang dikonfigurasi.  |  Verifikasi bahwa kolom berikut di file `device.json` Anda adalah benar: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/greengrass/v1/developerguide/idt-troubleshooting.html) Untuk informasi selengkapnya, lihat [Konfigurasikan device.json](set-config.md#device-config).  | 
|  108  |  RunCommandError  |  Tes gagal untuk menjalankan perintah pada perangkat yang dites.  |  Verifikasi bahwa akses root diizinkan untuk pengguna terkonfigurasi di `device.json`. Kata sandi diperlukan oleh beberapa perangkat saat menjalankan perintah dengan akses root. Pastikan akses root diperbolehkan tanpa kata sandi. Untuk informasi lebih lanjut, lihat dokumentasi untuk perangkat Anda. Coba jalankan perintah gagal secara manual di perangkat Anda untuk melihat jika terjadi eror.  | 
|  109  |  PermissionDeniedError  |  Tidak ada akses root.  |  Atur akses root untuk pengguna yang dikonfigurasi di perangkat Anda.  | 
|  110  |  CreateFileError  |  Tidak dapat membuat file.  |  Periksa ruang disk dan izin direktori perangkat Anda.  | 
|  111  |  CreateDirError  |  Tidak dapat membuat sebuah direktori.  |  Periksa ruang disk dan izin direktori perangkat Anda.  | 
|  112  |  InvalidPathError  |  Jalur ke perangkat lunak AWS IoT Greengrass Core tidak benar.  |  Verifikasi bahwa jalur dalam pesan eror adalah valid. Jangan mengedit file apa pun di bawah direktori `devicetester_greengrass_<os>` ini.  | 
|  113  |  InvalidFileError  |  Sebuah file tidak valid.  |  Verifikasi bahwa file dalam pesan eror adalah valid.  | 
|  114  |  ReadFileError  |  File yang ditentukan tidak dapat dibaca.  |  Verifikasi hal berikut: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/greengrass/v1/developerguide/idt-troubleshooting.html) Jika Anda mengetes di macOS, tingkatkan batas file yang terbuka. Batas default adalah 256, yang cukup untuk pengujian.  | 
|  115  |  FileNotFoundError  |  File yang diperlukan tidak ditemukan.  |  Verifikasi hal berikut: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/greengrass/v1/developerguide/idt-troubleshooting.html)  | 
|  116  |  OpenFileFailed  |  Tak dapat membuka file yang ditentukan.  |  Verifikasi hal berikut: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/greengrass/v1/developerguide/idt-troubleshooting.html) Jika Anda mengetes di macOS, tingkatkan batas file yang terbuka. Batas default adalah 256, yang cukup untuk pengujian.  | 
|  117  |  WriteFileFailed  |  Gagal menulis file (dapat berupa DUT atau mesin tes).  |  Verifikasi bahwa direktori yang ditentukan dalam pesan eror yang ada dan bahwa Anda memiliki izin menulis.   | 
|  118  |  FileCleanUpError  |  Sebuah tes gagal untuk menghapus file tertentu atau direktori atau untuk menjumlah file tertentu pada perangkat remote.  |  Jika file biner masih berjalan, file mungkin terkunci. Akhiri proses dan hapus file yang ditentukan.  | 
|  119  |  InvalidInputError  |  Konfigurasi tidak valid.  |  Verifikasi bahwa `suite.json` file valid.  | 
|  120  |  InvalidCredentialError  |  Kredensi tidak valid AWS .  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/greengrass/v1/developerguide/idt-troubleshooting.html)  | 
|  121  |  AWSSessionKesalahan  |  Gagal membuat AWS sesi.  |  Kesalahan ini dapat terjadi jika AWS kredensialnya tidak valid atau koneksi internet tidak stabil. Coba gunakan AWS CLI untuk memanggil operasi AWS API.  | 
|  122  |  AWSApiCallError  |  Terjadi kesalahan AWS API.  |  Eror ini mungkin terjadi karena masalah jaringan. Periksa jaringan Anda sebelum mencoba kembali grup tes.  | 
|  123  |  IpNotExistError  |  Alamat IP tidak termasuk dalam informasi konektivitas.  |  Periksa koneksi internet Anda. Anda dapat menggunakan AWS IoT Greengrass konsol untuk memeriksa informasi konektivitas untuk hal AWS IoT Greengrass inti yang sedang digunakan oleh pengujian. Jika ada 10 titik akhir yang disertakan dalam informasi konektivitas, Anda dapat menghapus beberapa atau semua dari mereka dan jalankan kembali tes. Untuk informasi selengkapnya, lihat [informasi Konektivitas](https://docs.aws.amazon.com/cli/latest/reference/greengrass/get-connectivity-info.html).  | 
|  124  |  OTAJobNotCompleteError  |  Pekerjaan OTA tidak selesai.  |  Periksa koneksi internet Anda dan coba lagi grup tes OTA.  | 
|  125  |  CreateGreengrassServiceRoleError  |  Salah satu dari hal berikut terjadi: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/greengrass/v1/developerguide/idt-troubleshooting.html)  |  Konfigurasikan peran AWS IoT Greengrass layanan. Untuk informasi selengkapnya, lihat [Peran layanan Greengrass](service-role.md).  | 
|  126  |  DependenciesNotPresentError  |  Satu atau lebih dependensi yang diperlukan untuk tes tertentu tidak ada pada perangkat.  |  Periksa log tes untuk melihat dependensi yang hilang di perangkat Anda: `<device-tester-extract-location>/results/<execution-id>/logs/<test-case-name.log>`  | 
|  127  |  Tidak valid HSMConfiguration  |  Konfigurasi HSM/PKCS yang disediakan tidak benar.  |  Di file `device.json` Anda, menyediakan konfigurasi yang diperlukan untuk berinteraksi dengan HSM menggunakan PKCS \$111.  | 
|  128  |  OTAJobNotSuccededError  |  Tugas OTA tidak berhasil.  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/greengrass/v1/developerguide/idt-troubleshooting.html)  | 
|  129  |  NoConnectivityError  |  Agen host gagal untuk terhubung ke internet.  |  Periksa koneksi jaringan dan pengaturan firewall Anda. Coba lagi grup tes setelah masalah konektivitas teratasi.  | 
|  130  |  NoPermissionError  |  Pengguna IAM yang Anda gunakan untuk menjalankan IDT AWS IoT Greengrass tidak memiliki izin untuk membuat AWS sumber daya yang diperlukan untuk menjalankan IDT.  |  Lihat [Templat kebijakan izin](https://docs.aws.amazon.com/greengrass/latest/developerguide/policy-template.html) untuk templat kebijakan yang memberikan izin yang diperlukan untuk menjalankan IDT AWS IoT Greengrass.  | 
|  131  |  LeftoverAgentExistError  |  Perangkat Anda menjalankan AWS IoT Greengrass proses saat Anda mencoba memulai IDT. AWS IoT Greengrass  |  Pastikan tidak ada daemon Greengrass yang ada yang berjalan di perangkat Anda. [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/greengrass/v1/developerguide/idt-troubleshooting.html)  Jika Anda menggunakan instalasi yang sudah AWS IoT Greengrass dikonfigurasi untuk memulai secara otomatis setelah reboot, Anda harus menghentikan daemon setelah reboot dan sebelum menjalankan test suite.   | 
|  132  |  DeviceTimeOffsetError  |  Perangkat ini mempunyai waktu yang salah.  |  Atur perangkat Anda ke waktu yang benar.  | 
|  133  |  Tidak valid MLConfiguration  |  Konfigurasi ML yang disediakan tidak benar.  |  Di file `device.json` Anda, sediakan konfigurasi yang benar yang diperlukan untuk menjalankan tes inferensi ML. Untuk informasi selengkapnya, lihat [Opsional: Mengonfigurasi perangkat Anda untuk kualifikasi ML](idt-ml-qualification.md).  | 

## Menyelesaikan IDT untuk kesalahan AWS IoT Greengrass
<a name="idt-gg-resolve-errors"></a>

Ketika Anda menggunakan IDT, Anda harus mendapatkan file konfigurasi yang benar di tempat sebelum Anda menjalankan IDT untuk. AWS IoT Greengrass Jika Anda mendapatkan eror penguraian dan konfigurasi, langkah pertama Anda adalah menemukan dan menggunakan templat konfigurasi yang sesuai untuk lingkungan Anda.

Jika Anda masih mengalami masalah, lihat proses debugging berikut.

**Topics**
+ [

### Di mana saya mencari eror?
](#where-to-look)
+ [

### Penguraian eror
](#parse-error)
+ [

### Parameter yang diperlukan tidak ada eror
](#param-missing)
+ [

### Tidak dapat memulai eror pengetesan
](#could-not-start-test)
+ [

### Tidak diotorisasi untuk mengakses eror sumber daya
](#not-authorized-to-access-resource)
+ [

### Izin ditolak eror
](#pwd-sudo)
+ [

### Eror koneksi SSH
](#ssh-connect-errors)
+ [

### Eror waktu habis
](#test-timeout)
+ [

### Perintah tidak ditemukan eror saat pengetesan
](#cmd-not-found)
+ [

### Pengecualian keamanan di macOS
](#macos-notarization-exception)

### Di mana saya mencari eror?
<a name="where-to-look"></a>

Eror tingkat tinggi ditampilkan di konsol selama pelaksanaan, dan ringkasan tes gagal dengan eror ditampilkan ketika semua tes selesai. `awsiotdevicetester_report.xml` berisi ringkasan dari semua eror yang menyebabkan tes gagal. Berkas log untuk setiap tes dilakukan akan disimpan dalam direktori yang bernama dengan UUID untuk pelaksanaan tes yang ditampilkan pada konsol tersebut selama tes dilakukan.

Direktori log tes terletak di `<device-tester-extract-location>/results/<execution-id>/logs/`. Direktori ini berisi file-file berikut, yang berguna untuk debugging.


| File | Deskripsi | 
| --- | --- | 
| test\$1manager.log |  Semua log yang ditulis ke konsol tersebut selama pelaksanaan tes. Ringkasan hasil terletak di akhir file ini, yang mencakup daftar tes yang gagal. Log peringatan dan eror dalam file ini dapat memberikan beberapa informasi tentang kegagalan.   | 
| <test-group-id>\$1\$1<test-name>.log | Log terperinci untuk tes tertentu. | 
| <test-name>\$1ggc\$1logs.tar.gz | Koleksi terkompresi dari semua log daemon AWS IoT Greengrass inti yang dihasilkan selama pengujian. Untuk informasi selengkapnya, lihat [Pemecahan Masalah AWS IoT Greengrass](https://docs.aws.amazon.com/greengrass/latest/developerguide/gg-troubleshooting.html). | 
| <test-name>\$1ota\$1logs.tar.gz | Kumpulan log terkompresi yang dihasilkan oleh agen AWS IoT Greengrass OTA selama pengujian. Untuk tes OTA saja. | 
| <test-name>\$1basic\$1assertion\$1publisher\$1ggad\$1logs.tar.gz | Koleksi terkompresi log yang dihasilkan oleh AWS IoT perangkat penerbit selama pengetesan. | 
| <test-name>\$1basic\$1assertion\$1subscriber\$1ggad\$1logs.tar.gz | Koleksi terkompresi log yang dihasilkan oleh AWS IoT perangkat pelanggan selama pengetesan. | 

### Penguraian eror
<a name="parse-error"></a>

Kadang-kadang, eror ketik dalam konfigurasi JSON dapat menyebabkan penguraian eror. Sebagian besar waktu, masalah adalah hasil dari menghilangkan braket, koma, atau tanda kutip dari file JSON Anda. IDT melakukan validasi JSON dan mencetak informasi debugging. IDT mencetak garis di mana kesalahan terjadi, nomor baris, dan nomor kolom kesalahan sintaks. Informasi ini seharusnya cukup untuk membantu Anda memperbaiki kesalahan, tetapi jika Anda masih tidak dapat menemukan kesalahan, Anda dapat melakukan validasi secara manual di IDE Anda, editor teks seperti Atom atau Sublime, atau melalui alat online seperti. JSONLint

### Parameter yang diperlukan tidak ada eror
<a name="param-missing"></a>

Karena fitur baru sedang ditambahkan ke IDT, perubahan pada file konfigurasi mungkin akan diperkenalkan. Menggunakan file konfigurasi lama mungkin merusak konfigurasi Anda. Jika hal ini terjadi, `<test_case_id>.log` file di bawah `/results/<execution-id>/logs` secara eksplisit mencantumkan semua parameter yang hilang. IDT juga memvalidasi skema file konfigurasi JSON Anda untuk memastikan bahwa versi terbaru yang didukung telah digunakan.

### Tidak dapat memulai eror pengetesan
<a name="could-not-start-test"></a>

Anda mungkin mengalami eror yang mengarah ke kegagalan selama tes dimulai. Ada beberapa kemungkinan penyebabnya, jadi lakukan hal berikut:
+ Pastikan bahwa nama kolam Anda termasuk dalam perintah pelaksanaan Anda benar-benar ada. Nama kolam direferensikan langsung dari `device.json` file.
+ Pastikan bahwa perangkat di kolam renang Anda memiliki parameter konfigurasi yang benar.

### Tidak diotorisasi untuk mengakses eror sumber daya
<a name="not-authorized-to-access-resource"></a>

Anda mungkin melihat `<user or role> is not authorized to access this resource` pesan eror dalam output terminal atau di `test_manager.log` file di bawah `/results/<execution-id>/logs`. Untuk mengatasi masalah ini, lampirkan `AWSIoTDeviceTesterForGreengrassFullAccess` kebijakan terkelola untuk pengguna pengetesan Anda. Untuk informasi selengkapnya, lihat [Buat dan konfigurasikan Akun AWS](dev-tst-prereqs.md#config-aws-account-for-idt).

### Izin ditolak eror
<a name="pwd-sudo"></a>

IDT melakukan operasi pada berbagai direktori dan file dalam perangkat yang diuji. Beberapa operasi ini memerlukan akses akar. Untuk mengotomatisasi operasi ini, IDT harus dapat menjalankan perintah dengan sudo tanpa memasukkan kata sandi. 

Ikuti langkah-langkah ini untuk mengizinkan akses sudo tanpa mengetikkan kata sandi.

**catatan**  
`user` dan `username` mengacu pada pengguna SSH yang digunakan oleh IDT untuk mengakses perangkat yang diuji.

1. Gunakan **sudo usermod -aG sudo *<ssh-username>*** untuk menambahkan pengguna SSH Anda ke grup sudo.

1. Keluar, lalu masuk agar perubahan diterapkan.

1. Buka file `/etc/sudoers` dan tambahkan baris berikut ke akhir file: `<ssh-username> ALL=(ALL) NOPASSWD: ALL`
**catatan**  
Sebagai praktik terbaik, kami merekomendasikan Anda menggunakan **sudo visudo** ketika Anda mengedit `/etc/sudoers`.

### Eror koneksi SSH
<a name="ssh-connect-errors"></a>

Ketika IDT tidak dapat terhubung ke perangkat yang dites, kegagalan koneksi dicatat di `/results/<execution-id>/logs/<test-case-id>.log`. Pesan kegagalan SSH muncul di bagian atas berkas log ini karena menghubungkan ke perangkat yang sedang dites adalah salah satu operasi pertama yang dilakukan IDT.

Sebagian besar pengaturan Windows menggunakan aplikasi TTy terminal Pu untuk terhubung ke host Linux. Aplikasi ini mengharuskan file kunci privat PEM standar diubah menjadi format Windows berpemilik yang disebut PPK. Ketika IDT dikonfigurasi di file `device.json` Anda, gunakan file PEM saja. Jika Anda menggunakan file PPK, IDT tidak dapat membuat koneksi SSH dengan AWS IoT Greengrass perangkat dan tidak dapat menjalankan pengujian.

### Eror waktu habis
<a name="test-timeout"></a>

Anda dapat meningkatkan waktu habis untuk setiap tes dengan menentukan pengganda waktu habis, yang diterapkan ke nilai default dari waktu habis setiap tes. Nilai apa pun yang dikonfigurasi untuk bendera ini harus lebih besar dari atau sama dengan 1.0.

Untuk menggunakan pengganda batas waktu, gunakan bendera `--timeout-multiplier` saat menjalankan tes. Sebagai contoh:

```
./devicetester_linux run-suite --suite-id GGQ_1.0.0 --pool-id DevicePool1 --timeout-multiplier 2.5
```

Untuk informasi lebih lanjut, jalankan `run-suite --help`.

### Perintah tidak ditemukan eror saat pengetesan
<a name="cmd-not-found"></a>

Anda memerlukan pustaka OpenSSL versi lama (libssl1.0.0) untuk menjalankan pengujian pada perangkat. AWS IoT Greengrass Sebagian besar distribusi Linux menggunakan libssl versi 1.0.2 atau yang lebih baru (v1.1.0).

Sebagai contoh, pada Raspberry Pi, jalankan perintah berikut untuk menginstal versi libssl yang diperlukan:

1. 

   ```
   wget http://ftp.us.debian.org/debian/pool/main/o/openssl/libssl1.0.0_1.0.2l-1~bpo8+1_armhf.deb
   ```

1. 

   ```
   sudo dpkg -i libssl1.0.0_1.0.2l-1~bpo8+1_armhf.deb
   ```

### Pengecualian keamanan di macOS
<a name="macos-notarization-exception"></a>

Saat Anda menjalankan IDT di mesin host yang menggunakan macOS 10.15, tiket notaris untuk IDT tidak terdeteksi dengan benar dan IDT diblokir agar tidak dijalankan. Untuk menjalankan IDT, Anda akan perlu untuk memberikan pengecualian keamanan untuk `devicetester_mac_x86-64` dilaksanakan. 

**Untuk memberikan pengecualian keamanan ke IDT yang dapat dieksekusi**

1. Luncurkan **Sistem Preferensi** dari menu Apple.

1. Pilih **Keamanan & Privasi**, kemudian pada **tab** Umum, klik ikon kunci untuk membuat perubahan pada pengaturan keamanan.

1. Cari pesan `"devicetester_mac_x86-64" was blocked from use because it is not from an identified developer.` dan pilih **Mengizinkan Bagaimanapun**.

1. Menerima peringatan keamanan.

Jika Anda memiliki pertanyaan tentang kebijakan dukungan IDT, hubungi [AWS Dukungan Pelanggan](https://aws.amazon.com/contact-us/).

# Kebijakan Support untuk AWS IoT Device Tester untuk AWS IoT Greengrass V1
<a name="idt-support-policy"></a>

AWS IoT [Device Tester (IDT) for AWS IoT Greengrass adalah kerangka pengujian yang dapat diunduh yang memungkinkan Anda memvalidasi dan [memenuhi syarat](https://aws.amazon.com/partners/dqp/)AWS IoT Greengrass perangkat Anda untuk dimasukkan dalam Katalog Perangkat.AWS Partner](https://devices.amazonaws.com/) Kami menyarankan Anda menggunakan versi terbaru AWS IoT Greengrass dan IDT untuk menguji atau memenuhi syarat perangkat Anda. Untuk informasi selengkapnya, lihat [Versi IDT yang didukung untuk AWS IoT Greengrass V2](https://docs.aws.amazon.com/greengrass/v2/developerguide/dev-test-versions.html) di *Panduan AWS IoT Greengrass Version 2 Pengembang*.

Anda juga dapat menggunakan salah satu versi AWS IoT Greengrass dan IDT yang didukung untuk menguji atau memenuhi syarat perangkat Anda. Meskipun Anda dapat terus menggunakan [versi IDT yang tidak didukung](dev-test-versions.md#idt-unsupported-versions), versi tersebut tidak menerima perbaikan bug atau pembaruan.

**penting**  
Per 4 April 2022, AWS IoT Device Tester (IDT) AWS IoT Greengrass V1 tidak lagi menghasilkan laporan kualifikasi yang ditandatangani. Anda tidak dapat lagi memenuhi syarat AWS IoT Greengrass V1 perangkat baru untuk dicantumkan di [Katalog AWS Partner Perangkat](https://devices.amazonaws.com/) melalui [Program Kualifikasi AWS Perangkat](https://aws.amazon.com/partners/programs/dqp/). Meskipun Anda tidak dapat memenuhi syarat perangkat Greengrass V1, Anda dapat terus menggunakan IDT untuk menguji perangkat Greengrass V1 Anda. AWS IoT Greengrass V1 [Kami menyarankan Anda menggunakan [IDT AWS IoT Greengrass V2 untuk](https://docs.aws.amazon.com/greengrass/v2/developerguide/device-tester-for-greengrass-ug.html) memenuhi syarat dan daftar perangkat Greengrass di Katalog Perangkat.AWS Partner](https://devices.amazonaws.com/)

Jika Anda memiliki pertanyaan tentang kebijakan support, kontak [AWS Dukungan Pelanggan](https://aws.amazon.com/contact-us/).