Partilhar via


Reproduzir a falha de teste executando o teste na linha de comando

Às vezes, é conveniente reproduzir falhas de teste executando os testes da linha de comando. A documentação a seguir pressupõe que o HLK (Hardware Lab Kit) já foi instalado no computador do controlador.

Executar um teste de Conceitos Básicos do Dispositivo na linha de comando

Para executar um teste de Conceitos básicos do dispositivo na linha de comando:

  1. Crie uma pasta c:\temp no sistema em teste (SUT).

  2. Copie todos os arquivos da \\< pasta hckcontroller>\taefbinaries\<arch> para c:\temp no SUT.

    Em <que hckcontroller é o nome do controlador do Windows HLK (Hardware Lab Kit) do Windows e <arch> é a plataforma SUT.

  3. Para instalar e iniciar o serviço TAEF , digite os seguintes comandos em um prompt de comando:

    1. Vá para a pasta 'temp' criada acima:

      Em X86 ou X64: cd c:\temp

      Em Arm ou Arm64: cd c:\temp\MinTe

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

    3. sc start Te.Service

  4. Copie todos os arquivos do \\<diretório hckcontroller>\tests\<arch>\DevFund\ para c:\temp.

  5. Altere o diretório para c:\temp e execute o seguinte comando (observe que Te.exe reside em c:\temp\MinTe no Arm e arm64):

    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
    

    Em <que nome> do caso de teste é o nome do teste no binário de teste.

    A opção /name é opcional. Como alguns binários de teste contêm vários testes, a opção /name especifica quais testes devem ser executados. Se não for especificado, todos os testes contidos no binário de teste serão executados em sequência. A lista de testes em um binário de teste pode ser obtida executando o seguinte comando:

    Te.exe Devfund_<testname>.dll /list
    

    Por exemplo, o Devfund_PnPDTest.dll contém a maioria dos testes relacionados ao 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
    

    O comando para executar um único teste desse binário de teste pode ter esta aparência:

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

    O nome do teste no binário de teste não será exatamente o mesmo que o título do teste. Para obter um mapeamento de nomes binários de teste para nomes de teste HLK, consulte Testes Device.DevFund.


Como usar /BreakOnError para invadir o depurador

Se a tarefa "Executar Teste" em um teste de Conceitos Básicos do Dispositivo falhar e você quiser examinar o estado do sistema no depurador de kernel ao mesmo tempo em que o teste registra uma falha, você pode executar o teste manualmente em um prompt de comando junto com o depurador de kernel e passar a opção de linha de comando /BreakOnError para Te.exe.

Executar Te.exe com a opção /BreakOnError faz com que o sistema interrompa o depurador de kernel quando o teste estiver pronto para registrar um erro. Para obter mais informações sobre como configurar um depurador de kernel, consulte Configurando Kernel-Mode depuração manualmente.

Para executar um teste de Conceitos básicos do dispositivo com a opção /BreakOnError , adicione a opção conforme mostrado abaixo:

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>*"

Em <que nome> do caso de teste é o nome do teste.

Cenário de depuração de exemplo

Você pode investigar a falha a seguir executando novamente o teste e fazendo com que o sistema interrompa o depurador quando o teste registra a falha na nova execução.

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.

Você pode definir um ponto de interrupção no depurador usando o seguinte comando:

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*"

Os testes de Conceitos Básicos do Dispositivo são executados como Te.ProcessHost.exe (se existirem) ou como Te.exe (se Te.ProcessHost.exe não existir). A revisão de threads em execução nesses processos de teste pode ajudar na triagem de travamentos e/ou falhas de teste.

Você pode obter a ID do processo de Te.ProcessHost.exe executando o seguinte comando:

!process 0 0 Te.ProcessHost.exe

Alterne o contexto do processo no depurador para o processo de teste:

.process /p /r <process id>

Informações do processo de despejo:

!process <process id>

Solução de problemas de testes de confiabilidade de conceitos básicos do dispositivo usando o Windows HLK