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 테스트 케이스 실행 파일 생성

다음과 같은 방법으로 테스트 케이스 실행 파일을 만들고 테스트 스위트 폴더에 배치 할 수 있습니다.

  • 인수 또는 환경 변수를 사용하는 테스트 스위트의 경우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

이러한 SDK는<device-tester-extract-location>/sdksfolder. 새 테스트 케이스 실행 파일을 만들 때 사용할 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 옵션은 올바르게 작동하지 않습니다. 이상적인 고객 환경을 제공 하려면 다음 인수에 대 한 지원을 구현 하는 것이 좋습니다.run-suite명령을 사용하여 IDT CLI에서

timeout-multiplier

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

테스트 주자는 실행하려는 테스트 케이스의 시간 제한을 늘리려면이 인수를 사용할 수 있습니다. 테스트 러너가이 인수를 지정할 때run-suite명령을 사용하여 IDT에서 IDT_TEST_Timeout 환경 변수의 값을 계산하고config.timeoutMultiplier필드를 IDT 컨텍스트에서. 이 인수를 지원하려면 다음을 수행해야 합니다.

  • 대신 직접 시간 초과 값을 사용하는test.json파일에서 IDT_TEST_Timeout 환경 변수를 읽고 올바르게 계산된 시간 초과 값을 가져옵니다.

  • 를 검색합니다.config.timeoutMultiplier값을 가져 와서 장기 실행 시간 초과에 적용합니다.

시간 초과 이벤트로 인해 일찍 종료하는 방법에 대한 자세한 내용은 단원을 참조하십시오.종료 동작 지정.

stop-on-first-failure

IDT가 실패하면 모든 테스트 실행을 중지하도록 지정합니다.

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

group-idtest-id

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

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

  • 지정된 테스트 그룹 내의 모든 테스트를 실행합니다.

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

이러한 인수를 지원하려면 테스트 스위트의 상태 시스템에RunTaskChoice상태 시스템의 상태를 확인합니다. 사용자 정의 상태 시스템을 사용하지 않는 경우 기본 IDT 상태 시스템에 필요한 상태가 포함되므로 추가 작업을 수행할 필요가 없습니다. 그러나 사용자 정의 상태 시스템을 사용하는 경우상태 시스템의 예제: 사용자가 선택한 테스트 그룹 실행를 샘플로 사용하여 상태 시스템에 필요한 상태를 추가합니다.

IDT CLI 명령에 대한 자세한 내용은 단원을 참조하십시오.사용자 지정 테스트 도구 모음 디버그 및 실행.

이벤트 로그 쓰기

테스트가 실행되는 동안 데이터를stdoutstderr를 사용하여 이벤트 로그와 오류 메시지를 콘솔에 기록할 수 있습니다. 콘솔 메시지의 형식에 대한 자세한 내용은 단원을 참조하십시오.콘솔 메시지 형식.

IDT가 테스트 도구 모음 실행을 마치면 이 정보는test_manager.log에 있는 파일을 확인하십시오.<devicetester-extract-location>/results/<execution-id>/logsfolder.

각 테스트 케이스를 구성하여 테스트 중인 디바이스의 로그를 포함하여 테스트 실행의 로그를<group-id>_<test-id>에 있는 파일을 확인하십시오.<device-tester-extract-location>/results/execution-id/logsfolder. 이렇게 하려면 IDT 컨텍스트에서 로그 파일의 경로를testData.logFilePath쿼리를 만들고 해당 경로에 파일을 만든 다음 원하는 내용을 작성하십시오. IDT는 실행 중인 테스트 케이스에 따라 경로를 자동으로 업데이트합니다. 테스트 사례에 대한 로그 파일을 생성하지 않도록 선택하면 해당 테스트 케이스에 대해 파일이 생성되지 않습니다.

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

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는 테스트 객체 폴더에서 테스트 결과를 찾습니다. 이 폴더의 경로는 폴더에 저장됩니다.testData.testArtifactsPath가 IDT 컨텍스트에 저장됩니다. 이 폴더에서 IDT는 찾은 첫 번째 알파벳순으로 정렬된 XML 파일을 테스트 결과로 사용합니다.

테스트 논리가 JUnit XML 결과를 생성하는 경우 테스트 결과를 아티팩트 폴더의 XML 파일에 작성하여 결과를 구문 분석하는 대신 IDT에 직접 제공 한 다음 API를 사용하여 IDT에 제출할 수 있습니다.

이 방법을 사용하는 경우 테스트 논리가 테스트 결과를 정확하게 요약하고 결과 파일을suite-name_report.xml파일을 생성합니다. IDT는 사용자가 제공한 데이터에 대한 유효성 검사를 수행하지 않습니다. 단, 다음과 같은 경우는 예외입니다.

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

  • 1개 이상testsuite태그는 내에 존재해야합니다testsuites.

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

종료 동작 지정

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

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

Timeout

테스트 케이스에 지정된 시간 초과 값보다 오래 동안 실행될 때 발생test.json파일을 생성합니다. 테스트 러너가timeout-multiplier인수를 사용하여 시간 초과 승수를 지정하면 IDT가 승수로 시간 초과 값을 계산합니다.

이 이벤트를 검색하려면 IDT_TEST_Timeout 환경 변수를 사용합니다. 테스트 러너가 테스트를 시작하면 IDT_TEST_Timeout 환경 변수의 값을 계산된 시간 초과 값 (초) 으로 설정하고 변수를 테스트 사례 실행 파일로 전달합니다. 변수 값을 읽고 적절한 타이머를 설정할 수 있습니다.

인터럽트

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

터미널은 신호를 모든 하위 프로세스로 전파하기 때문에 테스트 케이스에서 신호 처리기를 구성하기만 하면 인터럽트 신호를 감지할 수 있습니다.

또는 주기적으로 API를 폴링하여CancellationRequested의 부울PollForNotificationsAPI 응답. IDT는 인터럽트 신호를 수신 할 때, 상기 값을 설정한다CancellationRequested부울로 변환true.

첫 번째 실패 시 중지

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

이 이벤트를 감지하기 위해 주기적으로 API를 폴링하여CancellationRequested의 부울PollForNotificationsAPI 응답. IDT에서 오류가 발생하고 첫 번째 실패 시 중지하도록 구성된 경우CancellationRequested부울로 변환true.

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

  1. 일반 테스트 로직 실행을 중지하십시오.

  2. 테스트 대상 디바이스의 테스트 아티팩트와 같은 임시 리소스를 정리합니다.

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

  4. 종료합니다.