

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

# 設定測試執行器的設定
<a name="set-config-custom"></a>

若要執行自訂測試套件，測試執行器必須根據他們想要執行的測試套件來設定其設定。根據位於 `<device-tester-extract-location>/configs/` 資料夾中的組態檔案範本來指定設定。如有需要，測試執行器也必須設定 IDT 用來連線至 AWS 雲端的 AWS 登入資料。

身為測試寫入器，您需要設定這些檔案來[偵錯您的測試套件](run-tests-custom.md)。您必須提供測試執行器的說明，以便他們可以視需要設定下列設定來執行您的測試套件。

## 設定 device.json
<a name="device-config-custom"></a>

`device.json` 檔案包含執行測試之裝置的相關資訊 （例如 IP 地址、登入資訊、作業系統和 CPU 架構）。

測試執行器可以使用位於 `<device-tester-extract-location>/configs/` 資料夾中的下列範本`device.json`檔案提供此資訊。

```
[
    {
        "id": "<pool-id>",
        "sku": "<pool-sku>",
        "features": [
            {
                "name": "<feature-name>",             
                "value": "<feature-value>",                
                "configs": [
                    {
                        "name": "<config-name>",                    
                        "value": "<config-value>"
                    }
                ],
            }
        ],     
        "devices": [
            {
                "id": "<device-id>",    
                "pairedResource": "<device-id>", //used for no-op protocol
                "connectivity": {
                    "protocol": "ssh | uart | docker | no-op",                   
                    // ssh
                    "ip": "<ip-address>",
                    "port": <port-number>,
                    "publicKeyPath": "<public-key-path>",
                    "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>",
                }
            }
        ]
    }
]
```

如下所述，包含值的所有欄位皆為必要：

**`id`**  
使用者定義的英數字元 ID，可唯一識別裝置的集合，稱為「裝置集區」**。屬於同一個集區的裝置必須有相同的硬體。當您執行測試套件，集區中的裝置會用來將工作負載平行化。多個裝置用來執行不同的測試。

**`sku`**  
可唯一識別測試裝置的英數字元值。SKU 用於追蹤合格裝置。  
如果您想要在 AWS 合作夥伴裝置目錄中列出您的電路板，您在此處指定的 SKU 必須符合您在列出程序中使用的 SKU。

**`features`**  
選用。包含裝置支援功能的陣列。裝置功能是您在測試套件中設定的使用者定義值。您必須提供測試執行器有關要包含在 `device.json` 檔案中的功能名稱和值的資訊。例如，如果您想要測試可做為其他裝置的 MQTT 伺服器運作的裝置，則可以設定測試邏輯來驗證名為 之功能的特定支援層級`MQTT_QoS`。測試執行器提供此功能名稱，並將功能值設定為其裝置支援的 QoS 層級。您可以透過`devicePool.features`查詢從 [IDT 內容](idt-context.md)擷取提供的資訊，或透過`pool.features`查詢從[狀態機器內容](idt-state-machine.md#state-machine-context)擷取提供的資訊。    
**`features.name`**  
功能的名稱。  
**`features.value`**  
支援的功能值。  
**`features.configs`**  
如有需要，此功能的組態設定。    
**`features.config.name`**  
組態設定的名稱。  
**`features.config.value`**  
支援的設定值。

**`devices`**  
要測試之集區中的裝置陣列。至少需要一個裝置。    
**`devices.id`**  
使用者定義的唯一識別符，用於識別要測試的裝置。  
**`devices.pairedResource`**  
資源裝置的使用者定義唯一識別符。當您使用`no-op`連線通訊協定測試裝置時，需要此值。  
**`connectivity.protocol`**  
用來與此裝置通訊的通訊協定。集區中的每個裝置都必須使用相同的通訊協定。  
目前，`uart`對於實體裝置、Docker `docker` 容器，以及沒有 IDT 主機機器直接連線但需要資源裝置做為實體中介軟體來與主機機器通訊`no-op`的裝置，唯一支援的值為 `ssh`和 。  
對於無操作裝置，您可以在 中設定資源裝置 ID`devices.pairedResource`。您也必須在 `resource.json` 檔案中指定此 ID。配對的裝置必須是實際與待測裝置配對的裝置。在 IDT 識別並連線至配對的資源裝置後，IDT 將不會根據 `test.json` 檔案中所述的功能連線至其他資源裝置。  
**`connectivity.ip`**  
要測試之裝置的 IP 位址。  
只有當 `connectivity.protocol` 設為 `ssh` 時，才會套用此屬性。  
**`connectivity.port`**  
選用。用於 SSH 連線的連接埠號碼。  
預設值為 22。  
只有當 `connectivity.protocol` 設為 `ssh` 時，才會套用此屬性。  
**`connectivity.publicKeyPath`**  
 選用。用來驗證待測裝置連線之公有金鑰的完整路徑。當您指定 時`publicKeyPath`，IDT 會在建立與待測裝置的 SSH 連線時驗證裝置的公有金鑰。如果未指定此值，IDT 會建立 SSH 連線，但不會驗證裝置的公有金鑰。  
我們強烈建議您指定公有金鑰的路徑，並使用安全方法來擷取此公有金鑰。對於標準命令列型 SSH 用戶端， 檔案中會提供公有金鑰`known_hosts`。如果您指定單獨的公有金鑰檔案，此檔案必須使用與 `known_hosts` 檔案相同的格式，也就是 `ip-address key-type public-key`。  
**`connectivity.auth`**  
連線的驗證資訊。  
只有當 `connectivity.protocol` 設為 `ssh` 時，才會套用此屬性。    
**`connectivity.auth.method`**  
用來透過指定的連線通訊協定存取裝置的驗證方法。  
支援的值如下：  
+ `pki`
+ `password`  
**`connectivity.auth.credentials`**  
用於驗證的燈入資料。    
**`connectivity.auth.credentials.password`**  
用於登入要測試裝置的密碼。  
只有當 `connectivity.auth.method` 設為 `password` 時，才會套用此值。  
**`connectivity.auth.credentials.privKeyPath`**  
用來登入待測裝置之私有金鑰的完整路徑。  
只有當 `connectivity.auth.method` 設為 `pki` 時，才會套用此值。  
**`connectivity.auth.credentials.user`**  
登入要測試之裝置的使用者名稱。  
**`connectivity.serialPort`**  
選用。裝置所連接的序列連接埠。  
只有當 `connectivity.protocol` 設為 `uart` 時，才會套用此屬性。  
**`connectivity.containerId`**  
要測試之 Docker 容器的容器 ID 或名稱。  
只有當 `connectivity.protocol` 設為 `docker` 時，才會套用此屬性。  
**`connectivity.containerUser`**  
選用。容器內使用者的名稱。預設值是 Dockerfile 中提供的使用者。  
預設值為 22。  
只有當 `connectivity.protocol` 設為 `docker` 時，才會套用此屬性。
若要檢查測試執行器是否設定不正確的測試裝置連線，您可以從`pool.Devices[0].Connectivity.Protocol`狀態機器內容擷取，並將其與`Choice`狀態中的預期值進行比較。如果使用不正確的通訊協定，請使用 `LogMessage` 狀態列印訊息並轉換為 `Fail` 狀態。  
或者，您可以使用錯誤處理程式碼來報告不正確裝置類型的測試失敗。

## （選用） 設定 userdata.json
<a name="userdata-config-custom"></a>

`userdata.json` 檔案包含測試套件所需的任何其他資訊，但未在 `device.json` 檔案中指定。此檔案的格式取決於測試套件中定義的[`userdata_scheme.json`檔案](idt-json-config.md#userdata-schema-json)。如果您是測試寫入器，請務必將此資訊提供給將執行您所寫入測試套件的使用者。

## （選用） 設定 resource.json
<a name="resource-config-custom"></a>

`resource.json` 檔案包含將用作資源裝置的任何裝置的相關資訊。資源裝置是測試待測裝置的特定功能所需的裝置。例如，若要測試裝置的藍牙功能，您可以使用資源裝置來測試您的裝置是否可以成功連接到裝置。資源裝置是選用的，您可以視需要要求任意數量的資源裝置。身為測試寫入器，您可以使用 [test.json 檔案](idt-json-config.md#test-json)來定義測試所需的資源裝置功能。然後，測試執行器會使用 `resource.json` 檔案來提供具有所需功能的資源裝置集區。請務必將此資訊提供給將執行您撰寫之測試套件的使用者。

測試執行器可以使用位於 `<device-tester-extract-location>/configs/` 資料夾中的下列範本`resource.json`檔案提供此資訊。

```
[
    {
        "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>,
                    "publicKeyPath": "<public-key-path>",
                    "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>",
                }
            }
        ]
    }
]
```

如下所述，包含值的所有欄位皆為必要：

**`id`**  
使用者定義的英數字元 ID，可唯一識別裝置的集合，稱為「裝置集區」**。屬於同一個集區的裝置必須有相同的硬體。當您執行測試套件，集區中的裝置會用來將工作負載平行化。多個裝置用來執行不同的測試。

**`features`**  
選用。包含裝置支援功能的陣列。此欄位所需的資訊會在測試套件的 [test.json 檔案中](idt-json-config.md#test-json)定義，並決定要執行哪些測試，以及如何執行這些測試。如果測試套件不需要任何功能，則不需要此欄位。    
**`features.name`**  
功能的名稱。  
**`features.version`**  
功能版本。  
**`features.jobSlots`**  
設定 以指出可以同時使用裝置的測試數量。預設值為 `1`。

**`devices`**  <a name="device-array"></a>
要測試之集區中的裝置陣列。至少需要一個裝置。    
**`devices.id`**  
使用者定義的唯一識別符，用於識別要測試的裝置。  
**`connectivity.protocol`**  
用來與此裝置通訊的通訊協定。集區中的每個裝置都必須使用相同的通訊協定。  
目前，唯一支援的值為實體裝置的 `ssh`和 ，以及 `uart` Docker 容器`docker`的 和 。  
**`connectivity.ip`**  
要測試之裝置的 IP 位址。  
只有當 `connectivity.protocol` 設為 `ssh` 時，才會套用此屬性。  
**`connectivity.port`**  
選用。用於 SSH 連線的連接埠號碼。  
預設值為 22。  
只有當 `connectivity.protocol` 設為 `ssh` 時，才會套用此屬性。  
**`connectivity.publicKeyPath`**  
 選用。用來驗證待測裝置連線的公有金鑰完整路徑。當您指定 時`publicKeyPath`，IDT 會在建立與待測裝置的 SSH 連線時驗證裝置的公有金鑰。如果未指定此值，IDT 會建立 SSH 連線，但不會驗證裝置的公有金鑰。  
我們強烈建議您指定公有金鑰的路徑，並使用安全方法來擷取此公有金鑰。對於標準命令列型 SSH 用戶端， `known_hosts`檔案中會提供公有金鑰。如果您指定單獨的公有金鑰檔案，此檔案必須使用與 `known_hosts` 檔案相同的格式，也就是 `ip-address key-type public-key`。  
**`connectivity.auth`**  
連線的驗證資訊。  
只有當 `connectivity.protocol` 設為 `ssh` 時，才會套用此屬性。    
**`connectivity.auth.method`**  
用來透過指定的連線通訊協定存取裝置的驗證方法。  
支援的值如下：  
+ `pki`
+ `password`  
**`connectivity.auth.credentials`**  
用於驗證的燈入資料。    
**`connectivity.auth.credentials.password`**  
用於登入要測試裝置的密碼。  
只有當 `connectivity.auth.method` 設為 `password` 時，才會套用此值。  
**`connectivity.auth.credentials.privKeyPath`**  
用來登入待測裝置之私有金鑰的完整路徑。  
只有當 `connectivity.auth.method` 設為 `pki` 時，才會套用此值。  
**`connectivity.auth.credentials.user`**  
登入要測試之裝置的使用者名稱。  
**`connectivity.serialPort`**  
選用。裝置所連接的序列連接埠。  
只有當 `connectivity.protocol` 設為 `uart` 時，才會套用此屬性。  
**`connectivity.containerId`**  
要測試之 Docker 容器的容器 ID 或名稱。  
只有當 `connectivity.protocol` 設為 `docker` 時，才會套用此屬性。  
**`connectivity.containerUser`**  
選用。容器內使用者的名稱。預設值是 Dockerfile 中提供的使用者。  
預設值為 22。  
只有當 `connectivity.protocol` 設為 `docker` 時，才會套用此屬性。

## （選用） 設定 config.json
<a name="config-json-custom"></a>

`config.json` 檔案包含 IDT 的組態資訊。一般而言，除了提供 IDT AWS 的使用者登入資料，以及選擇性 AWS 的區域之外，測試執行器不需要修改此檔案。如果 AWS 提供具有必要許可的登入資料， 會 AWS IoT Device Tester 收集並提交用量指標給 AWS。這是選擇加入功能，用於改善 IDT 功能。如需詳細資訊，請參閱[提交 IDT 用量指標](idt-usage-metrics.md)。

測試執行器可以透過下列其中一種方式設定其 AWS 登入資料：
+ **憑證檔案**

  IDT 會使用與 AWS CLI相同的登入資料檔案。如需詳細資訊，請參閱[組態與登入資料檔案](https://docs.aws.amazon.com/cli/latest/userguide/cli-config-files.html)。

  登入資料檔案的位置會有所不同，取決於您使用的作業系統：
  + macOS, Linux: `~/.aws/credentials`
  + Windows：`C:\Users\UserName\.aws\credentials`
+ **環境變數**

  環境變數是由作業系統維護且由系統命令使用的變數。在 SSH 工作階段期間定義的變數在該工作階段關閉後無法使用。IDT 可以使用 `AWS_ACCESS_KEY_ID`和 `AWS_SECRET_ACCESS_KEY` 環境變數來存放 AWS 登入資料

  若要在 Linux、macOS 或 Unix 上設定這些變數，請使用 **export**：

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

  若要在 Windows 上設定這些變數，請使用 **set**：

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

若要設定 IDT 的 AWS 登入資料，測試執行器會在 資料夾的 `config.json` 檔案中編輯 `auth`區段`<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>"
        }
    }
}
]
```

如下所述，包含值的所有欄位皆為必要：

**注意**  
此檔案中的所有路徑都是相對於 *<device-tester-extract-location>* 所定義。

**`log.location`**  
<*device-tester-extract-location>* 中日誌資料夾的路徑。

**`configFiles.root`**  
包含組態檔案之資料夾的路徑。

**`configFiles.device`**  
`device.json` 檔案的路徑。

**`testPath`**  
包含測試套件的資料夾路徑。

**`reportPath`**  
IDT 執行測試套件後，將包含測試結果的資料夾路徑。

**`awsRegion`**  
選用。測試套件將使用 AWS 的區域。如果未設定，則測試套件將使用每個測試套件中指定的預設區域。

**`auth.method`**  
IDT 用來擷取 AWS 登入資料的方法。支援的值是從登入資料檔案`file`擷取登入資料，並使用環境變數`environment`擷取登入資料。

**`auth.credentials.profile`**  
從登入資料檔案使用的登入資料設定檔。只有當 `auth.method` 設為 `file` 時，才會套用此屬性。