Reproduire l’échec du test en exécutant le test à partir de la ligne de commande
Il est parfois pratique de reproduire les échecs de test en exécutant les tests à partir de la ligne de commande. La documentation suivante suppose que le Kit de laboratoire matériel (HLK) a déjà été installé sur l’ordinateur contrôleur.
Exécuter un test Device Fundamentals à partir de la ligne de commande
Pour exécuter un test Device Fundamentals à partir de la ligne de commande :
Créez un dossier c:\temp sur le système en cours de test (SUT).
Copiez tous les fichiers du \\< dossier hckcontroller>\taefbinaries\<arch> vers c:\temp sur le SUT.
Où <hckcontroller est le nom du contrôleur Windows Hardware Lab Kit (Windows HLK) et <arch> est la plateforme SUT.
Pour installer et démarrer le service TAEF , tapez les commandes suivantes à partir d’une invite de commandes :
Accédez au dossier « temp » créé ci-dessus :
Sur X86 ou X64 : cd c:\temp
Sur Arm ou Arm64 : cd c:\temp\MinTe
wex.services.exe /install:Te.Service
sc start Te.Service
Copiez tous les fichiers du \\< répertoire hckcontroller>\tests\<arch>\DevFund\ vers c:\temp.
Remplacez le répertoire par c:\temp et exécutez la commande suivante (notez que Te.exe réside dans c:\temp\MinTe sur Arm et 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
Où <nom> du cas de test est le nom du test dans le binaire de test.
Le commutateur /name est facultatif. Étant donné que certains fichiers binaires de test contiennent plusieurs tests, le commutateur /name spécifie quels tests doivent être exécutés. S’ils ne sont pas spécifiés, tous les tests contenus dans le binaire de test sont exécutés dans l’ordre. La liste des tests d’un fichier binaire de test peut être obtenue en exécutant la commande suivante :
Te.exe Devfund_<testname>.dll /list
Par exemple, le Devfund_PnPDTest.dll contient la plupart des tests 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
La commande permettant d’exécuter un seul test à partir de ce fichier binaire de test peut ressembler à ceci :
c:\temp\Te.exe Devfund_PnPDTest.dll.dll /name:PNPDTest::PNPSurpriseRemoveAndRestartDevice /p:"DQ=DeviceID='my\device\id'" /RebootStateFile:state.xml
Le nom du test dans le binaire de test ne sera pas exactement le même que le titre du test. Pour un mappage des noms binaires de test aux noms de test HLK, consultez Tests Device.DevFund.
Comment utiliser /BreakOnError pour entrer dans le débogueur
Si la tâche « Exécuter le test » dans un test Device Fundamentals échoue et que vous souhaitez examiner l’état du système dans le débogueur du noyau en même temps que le test enregistre un échec, vous pouvez exécuter le test manuellement à partir d’une invite de commandes avec le débogueur du noyau et passer le commutateur de ligne de commande /BreakOnError à Te.exe.
En exécutant Te.exe avec le commutateur /BreakOnError , le système s’interrompt dans le débogueur du noyau lorsque le test est prêt à consigner une erreur. Pour plus d’informations sur la configuration d’un débogueur de noyau, consultez Configuration manuelle Kernel-Mode débogage.
Pour exécuter un test Device Fundamentals avec le commutateur /BreakOnError , ajoutez le commutateur comme indiqué ci-dessous :
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>*"
Où <nom> du cas de test est le nom du test.
Exemple de scénario de débogage
Vous pouvez examiner l’échec suivant en réexécutant le test et en faisant s’interrompre le système dans le débogueur lorsque le test enregistre l’échec à la réexécutation.
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.
Vous pouvez définir un point d’arrêt dans le débogueur à l’aide de la commande suivante :
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*"
Les tests Device Fundamentals s’exécutent comme Te.ProcessHost.exe (s’il existe) ou comme Te.exe (si Te.ProcessHost.exe n’existe pas). L’examen des threads en cours d’exécution dans ces processus de test peut vous aider à trier les blocages et/ou les échecs de test.
Vous pouvez obtenir l’ID de processus de Te.ProcessHost.exe en exécutant la commande suivante :
!process 0 0 Te.ProcessHost.exe
Basculez le contexte de processus dans le débogueur vers le processus de test :
.process /p /r <process id>
Informations sur le processus de vidage :
!process <process id>