자습서: 간단한 IDT 테스트 제품군 개발 - 무료 RTOS

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

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

테스트 제품군은 다음을 결합합니다.

  • 테스트 로직이 포함된 테스트 실행 파일

  • 테스트 제품군을 설명하는 구성 파일

이 자습서에서는 FreeRTOS용 IDT를 사용하여 단일 테스트 사례가 포함된 Python 테스트 제품군을 개발하는 방법을 보여줍니다. 이 자습서에서는 SSH를 사용하지만 FreeRTOS 장치와 AWS IoT Device Tester 함께 사용하는 방법을 익히는 것이 유용합니다.

이 자습서에서는 다음 단계를 완료합니다.

필수 조건

이 튜토리얼을 완료하려면 다음이 필요합니다.

  • 호스트 컴퓨터 요구 사항

    • 최신 버전의 AWS IoT Device Tester

    • Python 3.7 이상

      컴퓨터에 설치된 Python 버전 번호를 확인하려면 인스턴스에서 다음 명령을 실행합니다.

      python3 --version

      Windows에서 이 명령 사용시 오류가 반환되면 python --version을(를) 대신 사용하십시오. 반환된 버전 번호가 3.7 이상인 경우 Powershell 터미널에서 다음 명령을 실행하여 python 명령의 별칭으로 python3을(를) 설정합니다.

      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 운영 체제를 사용하고 호스트 컴퓨터와 동일한 네트워크에 네트워크로 연결된 장치입니다.

      Raspberry Pi OS와 함께 Raspberry Pi를 사용하는 것이 좋습니다. Raspberry Pi에 원격으로 연결하려면 Pi에서 SSH를 설정해야 합니다.

테스트 도구 모음 디렉터리 생성

IDT는 각 테스트 도구 모음 내의 테스트 그룹에 테스트 사례를 논리적으로 분리합니다. 각 테스트 사례는 테스트 그룹 내에 있어야 합니다. 이 자습서에서는 MyTestSuite_1.0.0이라는 폴더를 생성하고 이 폴더 내에 다음 디렉터리 트리를 생성합니다.

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

구성 파일 생성

테스트 제품군에는 다음과 같은 필수 구성 파일이 포함되어야 합니다.

필수 파일

suite.json

테스트 제품군 정보가 포함되어 있습니다. suite.json 구성를 참조하세요.

group.json

테스트 그룹에 대한 정보를 포함합니다. 테스트 도구 모음의 각 테스트 그룹에 대한 group.json 파일을 만들어야 합니다. group.json을 구성하십시오.를 참조하세요.

test.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 클라이언트 SDK 다운로드

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.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 AWS 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를 통해 장치에 연결할 수 있습니다.