

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

# 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 yang menjelaskan rangkaian pengujian

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](#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><a name="prereqs-list"></a>

Untuk menyelesaikan tutorial ini, Anda memerlukan hal berikut ini: 
+ 

**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
<a name="test-suite-json"></a>

Test suite Anda harus berisi [file konfigurasi](idt-json-config.md) wajib berikut:<a name="required-json"></a>File konfigurasi yang diperlukan

`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](create-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.