教學課程:開發簡單的 IDT 測試套件 - AWS IoT Greengrass

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

教學課程:開發簡單的 IDT 測試套件

測試套件結合了以下內容:

  • 測試包含測試邏輯的可執行文件

  • 描述測試套件的配置文件

本教程向您展示如何使用 IDT AWS IoT Greengrass 來開發包含單個測試用例的 Python 測試套件。在本教學課程中,您將完成以下步驟:

必要條件

為了完成本教學,您需要以下項目:

  • 主機電腦需求
    • AWS IoT Device Tester 的最新版本

    • Python 3.7 或更高版本

      若要檢查電腦上安裝的 Python 版本,請執行下列命令:

      python3 --version

      在 Windows 上,如果使用此命令返回錯誤,則使用python --version代替。如果傳回的版本號碼為 3.7 或更高版本,請在 PowerShell 終端機中執行下列命令,以設定python3python命令的別名。

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

      如果沒有傳回任何版本資訊,或是版本號碼小於 3.7,請依照下載 Python 中的指示安裝 Python 3.7+。如需詳細資訊,請參閱 Python 文件

    • urllib3

      若要確認urllib3是否已正確安裝,請執行下列命令:

      python3 -c 'import urllib3'

      如果urllib3未安裝,請執行下列命令進行安裝:

      python3 -m pip install urllib3
  • 裝置要求
    • 具有 Linux 作業系統以及與主機電腦相同網路的網路連線的裝置。

      我們建議您使用樹莓派與樹莓派操作系統. 確保您在樹莓派上設置了 SSH 以遠程連接到它。

創建測試套件目錄

IDT 邏輯上將測試用例分離為每個測試套件中的測試組。每個測試用例必須位於測試組內。在本教學課程中,請建立名為的資料夾,MyTestSuite_1.0.0並在此資料夾中建立下列目錄樹:

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

建立組態檔

您的測試套件必須包含以下必要的配置文件

必要的組態檔
suite.json

包含測試套件的相關資訊。請參閱 設定套件

group.json

包含測試群組的相關資訊。您必須為測試套group.json件中的每個測試組創建一個文件。請參閱 設定群組

test.json

包含有關測試用例的信息。您必須為測試套test.json件中的每個測試用例創建一個文件。請參閱 配置測試

  1. MyTestSuite_1.0.0/suite資料夾中,建立具有下列結構的suite.json檔案:

    { "id": "MyTestSuite_1.0.0", "title": "My Test Suite", "details": "This is my test suite.", "userDataRequired": false }
  2. MyTestSuite_1.0.0/myTestGroup資料夾中,建立具有下列結構的group.json檔案:

    { "id": "MyTestGroup", "title": "My Test Group", "details": "This is my test group.", "optional": false }
  3. MyTestSuite_1.0.0/myTestGroup/myTestCase資料夾中,建立具有下列結構的test.json檔案:

    { "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" ] } } }

MyTestSuite_1.0.0資料夾的目錄樹現在應該如下所示:

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

取得 IDT 用戶端開發套件

您可以使用 IDT 用戶端 SDK 來啟用 IDT 與待測裝置互動,並報告測試結果。在本教程中,您將使用 Python 版本的 SDK。

<device-tester-extract-location>/sdks/python/資料夾中,將資idt_client料夾複製到您的MyTestSuite_1.0.0/suite/myTestGroup/myTestCase資料夾。

若要驗證 SDK 是否已成功複製,請執行下列命令。

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

創建測試用例可執行文件

測試用例可執行文件包含要運行的測試邏輯。一個測試套件可以包含多個測試用例可執行文件。在本教程中,您將只創建一個測試用例可執行文件。

  1. 建立測試套件檔案。

    MyTestSuite_1.0.0/suite/myTestGroup/myTestCase資料夾中,建立包含下列內容的myTestCase.py檔案:

    from idt_client import * def main(): # Use the client SDK to communicate with IDT client = Client() if __name__ == "__main__": main()
  2. 使用客戶端 SDK 函數將以下測試邏輯添加到您的myTestCase.py文件中:

    1. 在被測設備上運行 SSH 命令。

      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()
    2. 將測試結果發送給 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()

設定 IDT 的裝置資訊

配置 IDT 的設備信息以運行測試。您必須使用下列資訊更新位於資<device-tester-extract-location>/configs料夾中的device.json範本。

[ { "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>" } } } } ] } ]

devices物件中,提供下列資訊:

id

您裝置的使用者定義唯一識別碼。

connectivity.ip

您裝置的 IP 位址。

connectivity.port

選用。用於連線至裝置的 SSH 連線的連接埠號碼。

connectivity.auth

連線的驗證資訊。

只有當 connectivity.protocol 設為 ssh 時,才會套用此屬性。

connectivity.auth.method

用來透過指定的連線通訊協定存取裝置的驗證方法。

支援的值如下:

  • pki

  • password

connectivity.auth.credentials

用於驗證的燈入資料。

connectivity.auth.credentials.user

用於登入裝置的使用者名稱。

connectivity.auth.credentials.privKeyPath

用於登入裝置之私密金鑰的完整路徑。

只有當 connectivity.auth.method 設為 pki 時,才會套用此值。

devices.connectivity.auth.credentials.password

用於登入裝置的密碼。

只有當 connectivity.auth.method 設為 password 時,才會套用此值。

注意

如果 method 是設定為 pki,則指定 privKeyPath

如果 method 是設定為 password,則指定 password

運行測試套件

創建測試套件後,要確保它按預期運行。完成以下步驟以使用現有設備池運行測試套件以執行此操作。

  1. 將您的資MyTestSuite_1.0.0料夾複製到<device-tester-extract-location>/tests

  2. 執行下列命令:

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

IDT 運行您的測試套件並將結果流式傳輸到控制台。測試執行完成後,您會看到下列資訊:

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

故障診斷

使用下列資訊可協助解決完成自學課程時的任何問題。

測試用例未成功運行

如果測試未成功運行,IDT 將錯誤日誌流式傳輸到控制台,以幫助您對測試運行進行故障排除。檢查錯誤記錄檔之前,請先確認下列事項:

  • IDT 用戶端 SDK 位於正確的資料夾中,如此步驟所述。

  • 您符合本教學課程的所有先決條件

無法連接到被測設備

請確認下列內容:

  • 您的device.json檔案包含正確的 IP 位址、連接埠和驗證資訊。

  • 您可以通過 SSH 從主機連接到設備。