IDT 테스트 사례 실행 파일 생성 - 무료 RTOS

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

IDT 테스트 사례 실행 파일 생성

다음과 같은 방법으로 테스트 제품군 폴더에 테스트 사례 실행 파일을 생성하고 배치할 수 있습니다.

  • test.json 파일의 인수 또는 환경 변수를 사용하여 실행할 테스트를 결정하는 테스트 제품군의 경우, 전체 테스트 제품군에 대해 단일 테스트 사례 실행 파일을 생성하거나 테스트 제품군의 각 테스트 그룹에 대해 테스트 실행 파일을 생성할 수 있습니다.

  • 지정된 명령을 기반으로 특정 테스트를 실행하려는 테스트 세트의 경우, 테스트 세트의 각 테스트 사례에 대해 테스트 사례 실행 파일을 하나씩 만듭니다.

테스트 작성자는 사용 사례에 적합한 접근 방식을 결정하고 그에 따라 테스트 사례 실행 파일을 구성할 수 있습니다. 각 test.json 파일에 올바른 테스트 케이스 실행 파일 경로를 제공하고 지정된 실행 파일이 올바르게 실행되는지 확인합니다.

모든 장치에서 테스트 케이스를 실행할 준비가 되면 IDT는 다음 파일을 읽습니다.

  • 선택한 테스트 사례에 대한 test.json에 따라 시작할 프로세스와 설정할 환경 변수가 결정됩니다.

  • 테스트 제품군용 suite.json에 따라 설정할 환경 변수가 결정됩니다.

IDT는 test.json 파일에 지정된 명령과 인수를 기반으로 필수 테스트 실행 파일 프로세스를 시작하고 필요한 환경 변수를 프로세스에 전달합니다.

IDT 클라이언트 SDK 사용

IDT 클라이언트 SDK를 사용하면 IDT 및 테스트 대상 장치와 상호 작용하는 데 사용할 수 있는 API 명령을 사용하여 테스트 실행 파일에 테스트 로직을 작성하는 방법을 간소화할 수 있습니다. IDT는 현재 다음과 같은 SDK를 제공합니다.

  • Python용 IDT 클라이언트 SDK

  • Go용 IDT 클라이언트 SDK

  • Java용 IDT 클라이언트 SDK

이러한 SDK는 <device-tester-extract-location>/sdks 폴더에 있습니다. 새 테스트 케이스 실행 파일을 만들 때는 사용할 SDK를 테스트 케이스 실행 파일이 들어 있는 폴더에 복사하고 코드에서 SDK를 참조해야 합니다. 이 섹션에서는 테스트 케이스 실행 파일에서 사용할 수 있는 사용 가능한 API 명령에 대한 간략한 설명을 제공합니다.

장치 상호작용

다음 명령을 사용하면 추가 장치 상호 작용 및 연결 관리 기능을 구현하지 않고도 테스트 중인 장치와 통신할 수 있습니다.

ExecuteOnDevice

테스트 세트가 SSH 또는 Docker 셸 연결을 지원하는 장치에서 셸 명령을 실행할 수 있습니다.

CopyToDevice

테스트 세트가 IDT를 실행하는 호스트 컴퓨터의 로컬 파일을 SSH 또는 Docker 셸 연결을 지원하는 장치의 지정된 위치로 복사할 수 있습니다.

ReadFromDevice

테스트 세트가 UART 연결을 지원하는 장치의 직렬 포트에서 읽을 수 있도록 허용합니다.

참고

IDT는 컨텍스트의 장치 액세스 정보를 사용하여 만든 장치에 대한 직접 연결을 관리하지 않으므로 테스트 사례 실행 파일에서 이러한 장치 상호 작용 API 명령을 사용하는 것이 좋습니다. 하지만 이러한 명령이 테스트 사례 요구 사항을 충족하지 않는 경우, IDT 컨텍스트에서 장치 액세스 정보를 검색하고 이를 사용하여 테스트 세트에서 장치에 직접 연결할 수 있습니다.

직접 연결하려면 테스트 중인 장치와 리소스 장치에 대해 각각 device.connectivityresource.devices.connectivity 필드에서 정보를 검색합니다. IDT 컨텍스트 사용에 관한 자세한 내용은 IDT 컨텍스트 사용 섹션을 참조합니다.

IDT 상호 작용

다음 명령을 사용하면 테스트 세트가 IDT와 통신할 수 있습니다.

PollForNotifications

테스트 세트에서 IDT의 알림을 확인할 수 있습니다.

GetContextValue GetContextString

테스트 세트가 IDT 컨텍스트에서 값을 검색할 수 있도록 합니다. 자세한 정보는 IDT 컨텍스트 사용을 참조하세요.

SendResult

테스트 세트에서 테스트 사례 결과를 IDT에 보고할 수 있습니다. 이 명령은 테스트 세트의 각 테스트 케이스 끝에서 직접적으로 호출해야 합니다.

호스트 상호작용

다음 명령을 사용하면 테스트 세트가 호스트 머신과 통신할 수 있습니다.

PollForNotifications

테스트 세트에서 IDT의 알림을 확인할 수 있습니다.

GetContextValue GetContextString

테스트 세트가 IDT 컨텍스트에서 값을 검색할 수 있도록 합니다. 자세한 정보는 IDT 컨텍스트 사용을 참조하세요.

ExecuteOnHost

테스트 세트가 로컬 머신에서 명령을 실행할 수 있도록 하고 IDT가 테스트 케이스 실행 수명 주기를 관리할 수 있도록 합니다.

IDT CLI 명령을 활성화합니다.

run-suite 명령 IDT CLI는 테스트 실행기가 테스트 실행을 사용자 지정할 수 있는 몇 가지 옵션을 제공합니다. 테스트 실행기가 이러한 옵션을 사용하여 사용자 지정 테스트 세트를 실행할 수 있도록 하려면 IDT CLI에 대한 지원을 구현해야 합니다. 지원을 구현하지 않는 경우, 테스트 실행기는 여전히 테스트를 실행할 수 있지만 일부 CLI 옵션은 제대로 작동하지 않습니다. 이상적인 고객 경험을 제공하려면 IDT CLI에서 run-suite 명령에 대한 다음 인수에 대한 지원을 구현하는 것이 좋습니다.

timeout-multiplier

테스트를 실행하는 동안 모든 제한 시간에 적용할 1.0보다 큰 값을 지정합니다.

테스트 실행기는 이 인수를 사용하여 실행하려는 테스트 사례의 제한 시간을 늘릴 수 있습니다. 테스트 실행기가 run-suite 명령에서 이 인수를 지정하면 IDT는 이 인수를 사용하여 IDT_TEST_TIMEOUT 환경 변수의 값을 계산하고 IDT 컨텍스트에서 config.timeoutMultiplier 필드를 설정합니다. 이 인수를 뒷받침하려면 다음을 수행하여야 합니다.

  • test.json 파일의 제한 시간 값을 직접 사용하는 대신 IDT_TEST_TIMEOUT 환경 변수를 읽고 올바르게 계산된 제한 시간 값을 구합니다.

  • IDT 컨텍스트에서 config.timeoutMultiplier 값을 검색하여 장기 실행 제한 시간에 적용합니다.

제한 시간 이벤트로 인한 조기 종료에 대한 자세한 내용은 종료 동작을 지정합니다.을(를) 참조하세요.

stop-on-first-failure

장애가 발생할 경우, IDT에서 모든 테스트 실행을 중지하도록 지정합니다.

테스트 실행기가 run-suite 명령에 이 인수를 지정하면 IDT는 장애가 발생하는 즉시 테스트 실행을 중단합니다. 그러나 테스트 케이스가 병렬로 실행되는 경우, 예상치 못한 결과가 발생할 수 있습니다. 지원을 구현하려면 IDT에서 이 이벤트가 발생할 경우, 테스트 로직에서 실행 중인 모든 테스트 사례를 중지하고, 임시 리소스를 정리하고, 테스트 결과를 IDT에 보고하도록 지시해야 합니다. 실패 시 조기 종료에 대한 자세한 내용은 종료 동작을 지정합니다. 섹션을 참조하세요.

group-idtest-id

IDT가 선택한 테스트 그룹 또는 테스트 케이스만 실행하도록 지정합니다.

테스트 실행기는 run-suite 명령과 함께 이러한 인수를 사용하여 다음과 같은 테스트 실행 동작을 지정할 수 있습니다.

  • 지정된 테스트 제품군에 있는 모든 테스트 그룹을 실행합니다.

  • 지정된 테스트 그룹 내에서 엄선된 테스트를 실행합니다.

이러한 인수를 지원하려면 테스트 세트의 상태 머신이 상태 머신의 특정 RunTaskChoice 상태 세트를 포함해야 합니다. 사용자 지정 상태 머신을 사용하지 않는 경우, 기본 IDT 상태 머신에 필요한 상태가 포함되므로 추가 조치를 취할 필요가 없습니다. 하지만 사용자 지정 상태 머신을 사용하는 경우에는 상태 머신 예제: 사용자가 선택한 테스트 그룹 실행을(를) 샘플로 사용하여 상태 머신에 필요한 상태를 추가합니다.

IDT CLI 명령에 대한 자세한 내용은 사용자 지정 테스트 제품군 디버그 및 실행 단원을 참조합니다.

이벤트 로그 작성

테스트가 실행되는 동안 stdoutstderr에 데이터를 보내 콘솔에 이벤트 로그와 오류 메시지를 기록합니다. 콘솔 메시지의 형식에 대한 자세한 정보는 콘솔 메시지 형식에서 확인하세요.

IDT가 테스트 세트 실행을 마치면 <devicetester-extract-location>/results/<execution-id>/logs 폴더에 있는 test_manager.log 파일에서도 이 정보를 확인할 수 있습니다.

테스트 대상 장치의 로그를 포함하여 테스트 실행의 로그를 <device-tester-extract-location>/results/execution-id/logs 폴더에 있는 <group-id>_<test-id> 파일에 기록하도록 각 테스트 사례를 구성할 수 있습니다. 이렇게 하려면 testData.logFilePath 쿼리를 사용하여 IDT 컨텍스트에서 로그 파일의 경로를 검색하고 해당 경로에 파일을 만든 다음 원하는 콘텐츠를 작성해야 합니다. IDT는 실행 중인 테스트 케이스를 기반으로 경로를 자동으로 업데이트합니다. 테스트 사례에 대한 로그 파일을 만들지 않기로 선택하면 해당 테스트 사례에 대한 파일이 생성되지 않습니다.

필요에 따라 <device-tester-extract-location>/logs 폴더에 추가 로그 파일을 생성하도록 텍스트 실행 파일을 설정할 수도 있습니다. 파일을 덮어쓰지 않도록 로그 파일 이름에 고유한 접두사를 지정하는 것이 좋습니다.

결과를 IDT에 보고합니다.

IDT는 테스트 결과를 awsiotdevicetester_report.xmlsuite-name_report.xml 파일에 기록합니다. 이 보고서 파일은 <device-tester-extract-location>/results/<execution-id>/에 위치합니다. 두 보고서 모두 테스트 세트의 실행 결과를 캡처합니다. IDT에서 이러한 보고서에 사용하는 스키마에 대한 자세한 내용은 IDT 테스트 결과 및 로그 검토을(를) 참조합니다.

suite-name_report.xml 파일 내용을 채우려면 테스트 실행이 완료되기 전에 SendResult 명령을 사용하여 테스트 결과를 IDT에 보고해야 합니다. IDT에서 테스트 결과를 찾을 수 없는 경우, 테스트 사례에 오류가 발생합니다. 다음 Python 발췌문은 테스트 결과를 IDT로 보내는 명령을 보여줍니다.

request-variable = SendResultRequest(TestResult(result)) client.send_result(request-variable)

API를 통해 결과를 보고하지 않는 경우, IDT는 테스트 아티팩트 폴더에서 테스트 결과를 찾습니다. 이 폴더의 경로는 IDT 컨텍스트의 testData.testArtifactsPath 파일에 저장됩니다. 이 폴더에서 IDT는 찾은 첫 번째 알파벳순으로 정렬된 XML 파일을 테스트 결과로 사용합니다.

테스트 로직이 JUnit XML 결과를 생성하는 경우, 결과를 파싱한 다음 API를 사용하여 IDT에 제출하는 대신 아티팩트 폴더의 XML 파일에 테스트 결과를 기록하여 결과를 IDT에 직접 제공할 수 있습니다.

이 방법을 사용하는 경우, 테스트 로직이 테스트 결과를 정확하게 요약하고 결과 파일의 형식을 suite-name_report.xml 파일과 동일한 형식으로 지정해야 합니다. IDT는 제공된 데이터에 대한 검증을 수행하지 않습니다. 단, 다음과 같은 경우는 예외입니다.

  • IDT는 testsuites 태그의 모든 속성을 무시합니다. 대신 보고된 다른 테스트 그룹 결과에서 태그 속성을 계산합니다.

  • 하나 이상의 testsuite 태그가 testsuites 내에 있어야 합니다.

IDT는 모든 테스트 사례에 동일한 아티팩트 폴더를 사용하고 테스트 실행 사이에 결과 파일을 삭제하지 않기 때문에 IDT에서 잘못된 파일을 읽을 경우, 이 방법을 사용하면 잘못된 보고가 발생할 수도 있습니다. 생성된 XML 결과 파일은 모든 테스트 사례에서 동일한 이름을 사용하여 각 테스트 사례의 결과를 덮어쓰고 IDT에서 사용할 수 있는 올바른 결과가 있는지 확인하는 것이 좋습니다. 테스트 세트의 보고에는 혼합된 접근 방식을 사용할 수 있습니다. 즉, 일부 테스트 사례에는 XML 결과 파일을 사용하고 다른 테스트 사례에는 API를 통해 결과를 제출하는 등 혼합된 접근 방식을 사용할 수 있지만 이 방법은 권장되지 않습니다.

종료 동작을 지정합니다.

테스트 케이스에서 실패 또는 오류 결과가 보고되더라도 텍스트 실행 파일이 항상 종료 코드 0으로 종료되도록 구성합니다. 0이 아닌 종료 코드는 테스트 케이스가 실행되지 않았음을 나타내거나 테스트 케이스 실행 파일이 IDT에 결과를 전달할 수 없는 경우에만 사용합니다. IDT가 0이 아닌 종료 코드를 받으면 테스트 케이스에 오류가 발생하여 테스트 케이스를 실행할 수 없게 된 것으로 표시합니다.

IDT는 다음 이벤트에서 테스트 케이스가 완료되기 전에 테스트 케이스의 실행을 중단하도록 요청하거나 예상할 수 있습니다. 이 정보를 사용하여 테스트 케이스에서 이러한 각 이벤트를 감지하도록 테스트 케이스 실행 파일을 구성합니다.

제한 시간

테스트 케이스가 test.json 파일에 지정된 제한 시간 값보다 오래 실행될 때 발생합니다. 테스트 실행기가 timeout-multiplier 인수를 사용하여 제한 시간 승수를 지정한 경우, IDT는 승수로 제한 시간 값을 계산합니다.

이 이벤트를 탐지하려면 IDT_TEST_TIMEOUT 환경 변수를 사용합니다. 테스트 실행기가 테스트를 시작하면 IDT는 IDT_TEST_TIMEOUT 환경 변수의 값을 계산된 제한 시간 값(초)으로 설정하고 변수를 테스트 케이스 실행 파일로 전달합니다. 변수 값을 읽어 적절한 타이머를 설정할 수 있습니다.

인터럽트

테스트 러너가 IDT를 인터럽트할 때 발생합니다. 예를 들어, Ctrl+C 키를 누르면 됩니다.

터미널은 신호를 모든 하위 프로세스에 전파하므로 인터럽트 신호를 감지하도록 테스트 케이스에 신호 처리기를 구성하기만 하면 됩니다.

또는 정기적으로 API를 폴링하여 PollForNotifications API 응답의 CancellationRequested 부울 값을 확인할 수도 있습니다. IDT는 인터럽트 신호를 수신하면 CancellationRequested 부울 값을 true(으)로 설정합니다.

첫 번째 실패 시 중지

현재 테스트 케이스와 병렬로 실행 중인 테스트 케이스가 실패하고 테스트 실행기가 stop-on-first-failure 인수를 사용하여 IDT에 오류가 발생할 경우, 중지하도록 지정하는 경우, 발생합니다.

이 이벤트를 탐지하기 위해 주기적으로 API를 폴링하여 PollForNotifications API 응답의 CancellationRequested 부울 값을 확인할 수 있습니다. IDT에서 장애가 발생하고 첫 번째 실패 시 중지되도록 구성된 경우, IDT는 CancellationRequested 부울 값을 true(으)로 설정합니다.

이러한 이벤트가 발생하면 IDT는 현재 실행 중인 테스트 케이스의 실행이 완료될 때까지 5분 동안 기다립니다. 실행 중인 모든 테스트 케이스가 5분 내에 종료되지 않으면 IDT는 각 프로세스를 강제로 중지합니다. 프로세스가 종료되기 전에 IDT에서 테스트 결과를 받지 못한 경우, 테스트 케이스가 제한 시간이 초과된 것으로 표시됩니다. 가장 좋은 방법은 테스트 케이스에서 이벤트 중 하나가 발생할 때 다음 작업을 수행하도록 하는 것입니다.

  1. 일반 테스트 로직 실행을 중단합니다.

  2. 테스트 대상 장치의 테스트 아티팩트와 같은 임시 리소스를 모두 정리합니다.

  3. 테스트 실패 또는 오류와 같은 테스트 결과를 IDT에 보고합니다.

  4. 종료합니다.