コマンド ラインでのテストの実行による、テスト エラーの再現
コマンド ラインからテストを実行してテストの失敗を再現すると、便利な場合があります。 次の説明では、コントローラー マシンに Hardware Lab Kit (HLK) が既にインストールされていることを前提としています。
コマンドラインから Device Fundamentals テストを実行する
コマンド ラインから Device Fundamentals テストを実行するには:
テスト対象システム (SUT) 上に c:\temp フォルダーを作成します。
\\ < 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
この <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
このテスト バイナリから 1 つのテストを実行するコマンドは次のようになります。
c:\temp\Te.exe Devfund_PnPDTest.dll.dll /name:PNPDTest::PNPSurpriseRemoveAndRestartDevice /p:"DQ=DeviceID='my\device\id'" /RebootStateFile:state.xml
テスト バイナリ内のテスト名は、テストのタイトルと完全に同じではありません。 テスト バイナリ名と HLK テスト名のマッピングについては、「Device.DevFund テスト」を参照してください。
/BreakOnError を使ってデバッガーに侵入する方法
Device Fundamentals テストの "テストの実行" タスクが失敗し、テストによって失敗がログに記録されるのと同時にカーネル デバッガーでシステムの状態を確認したい場合は、コマンド プロンプトから手動でカーネル デバッガーと共にテストを実行し、/BreakOnError コマンドライン スイッチを Te.exe に渡すことができます。
/BreakOnError スイッチを指定して Te.exe を実行すると、テストでエラーをログに記録する準備ができたときにカーネル デバッガーが中断されます。 カーネル デバッガーを設定する方法については、カーネルモード デバッグの手動設定に関するページを参照してください。
/BreakOnError スイッチを指定して Device Fundamentals テストを実行するには、次のようにスイッチを追加します。
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*"
Device Fundamentals テストは、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>