자습서: 간단한 IDT 테스트 제품군 개발 - AWS IoT Greengrass

다음에 대한 설명서를 보고 있습니다.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

    • Python3.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

      확인하려면urllib3이 제대로 설치되었는지 확인하려면 다음 명령을 실행합니다.

      python3 -c 'import urllib3'

      다음의 경우,urllib3이 설치되지 않은 경우에는 다음 명령을 실행하여 설치합니다.

      python3 -m pip install urllib3
  • 디바이스 요구 사항

    • Linux 운영 체제가 있고 호스트 컴퓨터와 동일한 네트워크에 네트워크로 연결되어 있는 장치입니다.

      를 사용할 것을 권장합니다.라즈베리 Pi라즈베리 파이 OS와 함께. 설정하도록 합니다.SSH를 사용하여 원격으로 연결할 수 있습니다.

테스트 스위트 디렉토리 만들기

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 구성 단원을 참조하십시오.

  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 클라이언트 SDK 가져오기

IDT 클라이언트 SDK 클라이언트를 사용하여 IDT가 테스트 중인 장치와 상호 작용하고 테스트 결과를 보고할 수 있습니다. 이 자습서에서는 SDK의 Python 버전을 사용합니다.

에서<device-tester-extract-location>/sdks/python/폴더에 있는idt_client폴더를MyTestSuite_1.0.0/suite/myTestGroup/myTestCasefolder.

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.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.protocolssh로 설정된 경우에만 적용됩니다.

connectivity.auth.method

지정된 연결 프로토콜을 통해 디바이스에 액세스하는 데 사용되는 인증 방법입니다.

지원되는 값은 다음과 같습니다.

  • pki

  • password

connectivity.auth.credentials

인증에 사용되는 자격 증명입니다.

connectivity.auth.credentials.user

디바이스에 로그인하는 데 사용되는 사용자 이름입니다.

connectivity.auth.credentials.privKeyPath

디바이스에 로그인하는 데 사용하는 프라이빗 키의 전체 경로입니다.

이 값은 connectivity.auth.methodpki로 설정된 경우에만 적용됩니다.

devices.connectivity.auth.credentials.password

디바이스에 로그인하기 위해 사용하는 암호입니다.

이 값은 connectivity.auth.methodpassword로 설정된 경우에만 적용됩니다.

참고

methodpki로 설정된 경우에만 privKeyPath를 지정합니다.

methodpassword로 설정된 경우에만 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

Troubleshooting

다음 정보를 사용하면 자습서 완료와 관련된 모든 문제를 해결할 수 있습니다.

테스트 케이스가 성공적으로 실행되지 않습니다.

테스트가 성공적으로 실행되지 않으면 IDT는 테스트 실행 문제를 해결하는 데 도움이 되는 콘솔로 오류 로그를 스트리밍합니다. 오류 로그를 확인하기 전에 다음을 확인하십시오.

  • IDT 클라이언트 SDK는 에 설명된 대로 올바른 폴더에 있습니다.이 단계.

  • 당신은 모든 충족사전 조건을 참조하십시오.

테스트 대상 디바이스에서 연결할 수 없습니다.

다음을 확인합니다.

  • 귀하의device.json파일에는 올바른 IP 주소, 포트 및 인증 정보가 들어 있습니다.

  • 호스트 컴퓨터에서 SSH를 통해 디바이스에 연결할 수 있습니다.