다음을 통해 공유


명령줄에서 테스트를 실행하여 테스트 실패 재현

명령줄에서 테스트를 실행하여 테스트 실패를 재현하는 것이 편리한 경우도 있습니다. 다음 설명서에서는 HLK(Hardware Lab Kit)가 컨트롤러 머신에 이미 설치되어 있다고 가정합니다.

명령줄에서 디바이스 기본 사항 테스트 실행

명령줄에서 디바이스 기본 사항 테스트를 실행하려면 다음을 수행합니다.

  1. SUT(테스트 대상 시스템)에 c:\temp 폴더를 만듭니다.

  2. \\<hckcontroller>\taefbinaries\<arch> 폴더의 모든 파일을 SUT의 c:\temp에 복사합니다.

    여기서 <hckcontroller는 Windows HLK(Windows Hardware Lab Kit) 컨트롤러의 이름이고 <arch>는 SUT 플랫폼입니다.

  3. TAEF 서비스를 설치하고 시작하려면 명령 프롬프트에서 다음 명령을 입력합니다.

    1. 위에서 만든 'temp' 폴더로 이동합니다.

      X86 또는 X64: cd c:\temp

      Arm 또는 Arm64: cd c:\temp\MinTe

    2. wex.services.exe /install:Te.Service

    3. sc start Te.Service

  4. \\<hckcontroller>\tests\<arch>\DevFund\ 디렉터리의 모든 파일을 c:\temp에 복사합니다.

  5. 디렉터리를 c:\temp로 변경하고 다음 명령을 실행합니다(Te.exe는 Arm 및 Arm64의 c:\temp\MinTe에 있음).

    c:\temp\Te.exe Devfund_<testname>.dll /name:"<test case name>" /p:"DQ=DeviceID='<Device Instance Path of device under test from Device Manager>'" /RebootStateFile:state.xml
    

    여기서 <test case name>은 테스트 이진의 테스트 이름입니다.

    /name 스위치는 선택 사항입니다. 일부 테스트 이진 파일에는 여러 테스트가 포함되어 있으므로 /name 스위치는 실행해야 하는 테스트를 지정합니다. 지정되지 않은 경우 테스트 이진에 포함된 모든 테스트가 순서대로 실행됩니다. 다음 명령을 실행하여 테스트 이진의 테스트 목록을 가져올 수 있습니다.

    Te.exe Devfund_<testname>.dll /list
    

    예를 들어 Devfund_PnPDTest.dll에는 대부분의 PnP 관련 테스트가 포함되어 있습니다.

    c:\temp>Te.exe Devfund_PnPDTest.dll /list
    Test Authoring and Execution Framework v10.21 for x64
    
        c:\temp\Devfund_PnPDTest.dll
            PNPDTest
                PNPDTest::PNPDisableAndEnableDevice
                PNPDTest::PNPRemoveAndRestartDevice
                PNPDTest::PNPCancelRemoveDevice
                PNPDTest::PNPCancelStopDevice
                PNPDTest::PNPTryStopAndRestartDevice
                PNPDTest::PNPTryStopDeviceRequestNewResourcesAndRestartDevice
                PNPDTest::PNPTryStopDeviceAndFailRestart
                PNPDTest::PNPSurpriseRemoveAndRestartDevice
                PNPDTest::PNPDIFRemoveAndRescanParentDevice
                PNPDTest::DisableEnhancedDeviceTestingSupport
    

    이 테스트 이진에서 단일 테스트를 실행하는 명령은 다음과 같습니다.

    c:\temp\Te.exe Devfund_PnPDTest.dll.dll /name:PNPDTest::PNPSurpriseRemoveAndRestartDevice /p:"DQ=DeviceID='my\device\id'" /RebootStateFile:state.xml
    

    테스트 이진의 테스트 이름은 테스트의 제목과 똑같지 않습니다. 테스트 이진 이름을 HLK 테스트 이름에 매핑하려면 Device.DevFund 테스트를 참조하세요.


/BreakOnError를 사용하여 디버거를 실행하는 방법

디바이스 기본 사항 테스트에서 "테스트 실행" 작업이 실패하는 경우 테스트가 실패를 기록하는 동시에 커널 디버거의 시스템 상태를 검토하려면 명령 프롬프트에서 커널 디버거와 함께 수동으로 테스트를 실행하고 /BreakOnError 명령줄 스위치를 Te.exe에 전달합니다.

/BreakOnError 스위치를 사용하여 Te.exe를 실행하면 테스트가 오류를 기록할 준비가 되었을 때 시스템이 커널 디버거를 실행합니다. 커널 디버거를 설정하는 방법에 대한 자세한 내용은 수동으로 커널 모드 디버깅 설정을 참조하세요.

/BreakOnError 스위치를 사용하여 디바이스 기본 사항 테스트를 실행하려면 아래와 같이 스위치를 추가합니다.

Run c:\temp\Te.exe Devfund_<testname>.dll /p:"DQ=DeviceID='<Device Instance Path of device under test from Device Manager>'" /RebootStateFile:state.xml /BreakOnError /name:"*<test case name>*"

여기서 <test case name>은 테스트 이름입니다.

예제 디버그 시나리오

테스트를 다시 실행하고 테스트가 다시 실행 시 실패를 기록할 때 시스템이 디버거를 실행하게 하여 다음 오류를 조사할 수 있습니다.

WDTF_FUZZTEST             : INFO  :    Running IOCTL Fuzzing Test on surface \DosDevices\usb#vid_045e&pid_f0ca&mi_00#7&12099dde&0&0000#{0b9f1048-b94b-dc9a-4ed7-fe4fed3a0deb}\{8de0ff21-6c06-4c27-bfe0-e62612c015ae}. Access Mode=NO SYNC. Open Type=TREE_CONNECT. Opened with access 1201bf 

WDTF_FUZZTEST             : ERROR :    Test thread exceeded timeout limit. Terminating thread

WDTF_FUZZTEST             : ERROR :    Last logged operation: ZwDeviceIoControlFile, CtrlCode=0x22e10b, InBuf=0xfffffc00, 0 OutBuf=0xfffffc00, 0

WDTF_FUZZTEST             : INFO  :    Successfully terminated test thread.

다음 명령을 사용하여 디버거에 중단점을 설정할 수 있습니다.

Te.exe Devfund_FuzzTest_WLK_Certification.dll /p:"DQ=DeviceID='USB\VID_045E&PID_F0CA&MI_00\7&12099DDE&0&0000'" /RebootStateFile:state.xml /BreakOnError /name:"*IOCTLTest*"

디바이스 기본 사항 테스트는 Te.ProcessHost.exe(있는 경우) 또는 Te.exe(Te.ProcessHost.exe가 없는 경우)로 실행됩니다. 이러한 테스트 프로세스에서 실행되는 스레드를 검토하면 중단 및/또는 테스트 실패를 조사하는 데 도움이 될 수 있습니다.

다음 명령을 실행하여 Te.ProcessHost.exe 프로세스 ID를 가져올 수 있습니다.

!process 0 0 Te.ProcessHost.exe

디버거의 프로세스 컨텍스트를 테스트 프로세스로 전환합니다.

.process /p /r <process id>

덤프 프로세스 정보:

!process <process id>

Windows HLK를 사용하여 디바이스 기본 사항 안정성 테스트 문제 해결