다음에 대한 설명서를 보고 있습니다.AWS IoT Greengrass Version 1.AWS IoT Greengrass Version 2의 최신 주요 버전입니다AWS IoT Greengrass. 사용에 관한 자세한 내용은 단원을 참조하십시오.AWS IoT Greengrass V2에 대한 자세한 내용은AWS IoT Greengrass Version 2개발자 안내서.
기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
자습서: 간단한 IDT 테스트 제품군 개발
테스트 스위트는 다음을 결합합니다.
-
테스트 로직을 포함하는 테스트 실행 파일
-
테스트 스위트를 설명하는 JSON 구성 파일
이 자습서에서는 IDT를 사용하는 방법을 보여 줍니다.AWS IoT Greengrass를 사용하여 단일 테스트 케이스를 포함하는 Python 테스트 스위트를 개발할 수 있습니다. 이 자습서에서는 다음 단계를 완료합니다.
Prerequisites
이 자습서를 완료하려면 다음이 필요합니다.
-
호스트 컴퓨터 요구 사항
-
의 최신 버전AWS IoTDevice 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
JSON 구성 파일 생성
테스트 스위트에는 다음과 같은 필수 항목이 포함되어야합니다.JSON 구성:
필수 JSON 파일
suite.json
-
테스트 제품군에 대한 정보가 포함됩니다. JSON 제품군을 구성합니다. 단원을 참조하십시오.
group.json
-
테스트 그룹에 대한 정보가 포함됩니다. 다음을 생성해야 합니다.
group.json
파일을 테스트 스위트의 각 테스트 그룹에 대한 JSON 그룹 구성 단원을 참조하십시오. test.json
-
테스트 사례에 관한 정보를 포함합니다. 다음을 생성해야 합니다.
test.json
파일을 테스트 스위트의 각 테스트 케이스에 대한 테스트.JSON 구성 단원을 참조하십시오.
-
에서
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 클라이언트 SDK 가져오기
이IDT 클라이언트 SDK 클라이언트를 사용하여 IDT가 테스트 중인 장치와 상호 작용하고 테스트 결과를 보고할 수 있습니다. 이 자습서에서는 SDK의 Python 버전을 사용합니다.
에서
폴더에 있는<device-tester-extract-location>
/sdks/python/idt_client
폴더를MyTestSuite_1.0.0/suite/myTestGroup/myTestCase
folder.
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.json
템플릿에 있는
폴더에 다음 정보를 입력합니다.<device-tester-extract-location>
/configs
[ { "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
Troubleshooting
다음 정보를 사용하면 자습서 완료와 관련된 모든 문제를 해결할 수 있습니다.
테스트 케이스가 성공적으로 실행되지 않습니다.
테스트가 성공적으로 실행되지 않으면 IDT는 테스트 실행 문제를 해결하는 데 도움이 되는 콘솔로 오류 로그를 스트리밍합니다. 오류 로그를 확인하기 전에 다음을 확인하십시오.
테스트 대상 디바이스에서 연결할 수 없습니다.
다음을 확인합니다.
-
귀하의
device.json
파일에는 올바른 IP 주소, 포트 및 인증 정보가 들어 있습니다. -
호스트 컴퓨터에서 SSH를 통해 디바이스에 연결할 수 있습니다.