藉由從命令列執行測試來重現測試失敗
有時候,從命令列執行測試來重現測試失敗會很方便。 下列檔假設已在控制器電腦上安裝 Hardware Lab Kit (HLK) 。
從命令列執行裝置基本概念測試
若要從命令列執行裝置基本概念測試:
在受測的系統上建立 c:\temp 資料夾, (SUT) 。
將所有檔案從 \\<hckcontroller> \taefbinaries\<arch> 資料夾複製到 SUT 上的c:\temp。
其中 <hckcontroller是 Windows Hardware Lab Kit (Windows HLK) 控制器的名稱,而 <arch> 是 SUT 平臺。
若要安裝並啟動 TAEF 服務,請從命令提示字元輸入下列命令:
移至上面建立的 'temp' 資料夾:
在 X86 或 X64 上:cd c:\temp
在 Arm 或 Arm64 上:cd c:\temp\MinTe
wex.services.exe /install:Te.Service
sc start Te.Service
將所有檔案從 \\<hckcontroller> \tests\arch> \ < DevFund\ 目錄複寫到c:\temp。
將目錄變更為 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
其中 <測試案例名稱> 是測試二進位檔中的測試名稱。
/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,會導致系統在測試準備好記錄錯誤時中斷至核心偵錯工具。 如需設定核心偵錯工具的詳細資訊,請參閱 手動設定Kernel-Mode偵錯。
若要使用 /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>*"
其中 <測試案例名稱> 是測試的名稱。
偵錯案例範例
您可以藉由重新執行測試並讓系統在重新執行時記錄失敗時中斷偵錯工具,來調查下列失敗。
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 的進程識別碼:
!process 0 0 Te.ProcessHost.exe
將偵錯工具中的進程內容切換至測試進程:
.process /p /r <process id>
傾印程式資訊:
!process <process id>