IDT 테스트 케이스 실행 파일 생성 - AWS IoT Greengrass

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

IDT 테스트 케이스 실행 파일 생성

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

  • test.json파일의 인수 또는 환경 변수를 사용하여 실행할 테스트를 결정하는 테스트 도구 모음의 경우 전체 테스트 도구 모음에 대해 실행 가능한 단일 테스트 사례 또는 테스트 도구 모음의 각 테스트 그룹에 대한 테스트 실행 파일을 만들 수 있습니다.

  • 지정된 명령을 기반으로 특정 테스트를 실행하려는 테스트 도구 모음의 경우 테스트 도구 모음의 각 테스트 사례에 대해 실행 가능한 테스트 사례를 하나 생성합니다.

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

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

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

  • 테스트 스위트의suite.json 경우 설정할 환경 변수가 결정됩니다.

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

IDT 클라이언트 SDK 사용

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

  • IDT 클라이언트 SDK for

  • IDT 클라이언트 SDK for Go

  • IDT 클라이언트 SDK for Java

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

장치 상호 작용

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

ExecuteOnDevice

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

CopyToDevice

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

ReadFromDevice

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

참고

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

직접 연결하려면 테스트 대상 장치device.connectivity 및 리소스 장치에 대한resource.devices.connectivity 필드 및 필드에서 각각 정보를 검색하십시오. IDT 컨텍스트 사용에 대한 자세한 내용은 단원을 참조하십시오IDT 컨텍스트 사용.

IDT 인터랙션

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

PollForNotifications

테스트 도구 모음에서 IDT의 알림을 확인할 수 있습니다.

GetContextValue GetContextString

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

SendResult

테스트 도구 모음에서 테스트 사례 결과를 IDT에 보고할 수 있습니다. 이 명령은 테스트 스위트의 각 테스트 케이스 끝에서 호출해야 합니다.

호스트 상호작용

다음 명령을 사용하면 테스트 스위트가 호스트 컴퓨터와 통신할 수 있습니다.

PollForNotifications

테스트 도구 모음에서 IDT의 알림을 확인할 수 있습니다.

GetContextValue GetContextString

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

ExecuteOnHost

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

IDT CLI 명령을 활성화합니다

IDT CLIrun-suite 명령은 테스트 실행기가 테스트 실행을 사용자 지정할 수 있는 몇 가지 옵션을 제공합니다. 테스트 실행자가 이러한 옵션을 사용하여 사용자 지정 테스트 도구 모음을 실행할 수 있도록 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는 오류가 발생하는 즉시 테스트 실행을 중지합니다. 그러나 테스트 케이스가 parallel 실행되면 예상치 못한 결과가 발생할 수 있습니다. 지원을 구현하려면 IDT에서 이 이벤트가 발생할 경우 테스트 로직에서 실행 중인 모든 테스트 케이스를 중지하고 임시 리소스를 정리한 다음 테스트 결과를 IDT에 보고하도록 지시해야 합니다. 실패 시 조기 종료에 대한 자세한 내용은 단원을 참조하십시오종료 동작 지정.

group-idtest-id

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

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

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

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

이러한 인수를 뒷받침하려면 테스트 도구 모음의 테스트 오케스트레이터가 테스트 오케스트레이터에 특정RunTaskChoice 상태 집합을 포함해야 합니다. 사용자 지정 상태 머신을 사용하지 않는 경우 기본 IDT 테스트 오케스트레이터에 필요한 상태가 포함되므로 추가 조치를 취할 필요가 없습니다. 그러나 사용자 지정 테스트 오케스트레이터를 사용하는 경우상태 머신 예제: 사용자가 선택한 테스트 그룹 실행 샘플로 사용하여 테스트 오케스트레이터에 필요한 상태를 추가하십시오.

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

이벤트 로그 작성

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

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_TEST_TIMEOUT 환경 변수의 값을 계산된 제한 시간 값 (초 단위) 으로 설정하고 변수를 테스트 케이스 실행 파일로 전달합니다. 변수 값을 읽어 적절한 타이머를 설정할 수 있습니다.

인터럽트

테스트 러너가 IDT를 중단할 때 발생합니다. 예를 들어, 키를 누릅니다Ctrl+C.

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

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

첫 번째 장애 시 중지

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

이 이벤트를 감지하려면 정기적으로 API를 폴링하여PollForNotifications API 응답의CancellationRequested 불리언 값을 확인할 수 있습니다. IDT에서 장애가 발생하고 첫 번째 장애 시 중지하도록 구성된 경우CancellationRequested 부울 값을 로 설정합니다true.

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

  1. 일반 테스트 로직 실행을 중지하세요.

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

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

  4. 출구.