本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
教學課程:開發簡單的 IDT 測試套件
測試套件結合了以下內容:
-
測試包含測試邏輯的可執行文件
-
描述測試套件的配置文件
本教程向您展示如何使用 IDT AWS IoT Greengrass 來開發包含單個測試用例的 Python 測試套件。在本教學課程中,您將完成以下步驟:
必要條件
為了完成本教學,您需要以下項目:
-
主機電腦需求
-
AWS IoT Device Tester 的最新版本
-
Python
3.7 或更高版本 若要檢查電腦上安裝的 Python 版本,請執行下列命令:
python3 --version
在 Windows 上,如果使用此命令返回錯誤,則使用
python --version
代替。如果傳回的版本號碼為 3.7 或更高版本,請在 PowerShell 終端機中執行下列命令,以設定python3
為python
命令的別名。Set-Alias -Name "python3" -Value "python"
如果沒有傳回任何版本資訊,或是版本號碼小於 3.7,請依照下載 Python
中的指示安裝 Python 3.7+。如需詳細資訊,請參閱 Python 文件 。 -
若要確認
urllib3
是否已正確安裝,請執行下列命令:python3 -c 'import urllib3'
如果
urllib3
未安裝,請執行下列命令進行安裝:python3 -m pip install urllib3
-
創建測試套件目錄
IDT 邏輯上將測試用例分離為每個測試套件中的測試組。每個測試用例必須位於測試組內。在本教學課程中,請建立名為的資料夾,MyTestSuite_1.0.0
並在此資料夾中建立下列目錄樹:
MyTestSuite_1.0.0 └── suite └── myTestGroup └── myTestCase
建立組態檔
您的測試套件必須包含以下必要的配置文件:
必要的組態檔
-
在
MyTestSuite_1.0.0/suite
資料夾中,建立具有下列結構的suite.json
檔案:{ "id": "MyTestSuite_1.0.0", "title": "My Test Suite", "details": "This is my test suite.", "userDataRequired": false }
-
在
MyTestSuite_1.0.0/myTestGroup
資料夾中,建立具有下列結構的group.json
檔案:{ "id": "MyTestGroup", "title": "My Test Group", "details": "This is my test group.", "optional": false }
-
在
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'
創建測試用例可執行文件
測試用例可執行文件包含要運行的測試邏輯。一個測試套件可以包含多個測試用例可執行文件。在本教程中,您將只創建一個測試用例可執行文件。
-
建立測試套件檔案。
在
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()
-
使用客戶端 SDK 函數將以下測試邏輯添加到您的
myTestCase.py
文件中:-
在被測設備上運行 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() -
將測試結果發送給 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>
/configsdevice.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
運行測試套件
創建測試套件後,要確保它按預期運行。完成以下步驟以使用現有設備池運行測試套件以執行此操作。
-
將您的資
MyTestSuite_1.0.0
料夾複製到
。<device-tester-extract-location>
/tests -
執行下列命令:
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 將錯誤日誌流式傳輸到控制台,以幫助您對測試運行進行故障排除。檢查錯誤記錄檔之前,請先確認下列事項:
無法連接到被測設備
請確認下列內容:
-
您的
device.json
檔案包含正確的 IP 位址、連接埠和驗證資訊。 -
您可以通過 SSH 從主機連接到設備。