コマンド ラインでのテストの実行による、テスト エラーの再現

コマンド ラインからテストを実行してテストの失敗を再現すると、便利な場合があります。 次の説明では、コントローラー マシンに Hardware Lab Kit (HLK) が既にインストールされていることを前提としています。

コマンドラインから Device Fundamentals テストを実行する

コマンド ラインから Device Fundamentals テストを実行するには:

  1. テスト対象システム (SUT) 上に c:\temp フォルダーを作成します。

  2. \\ < hckcontroller>\taefbinaries\<arch> フォルダーから SUT 上の c:\temp にすべてのファイルをコピーします。

    この <hckcontroller は Windows Hardware Lab Kit (Windows HLK) コントローラーの名前、<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
    

    このテスト バイナリから 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>

Windows HLK を使用した Device Fundamentals 信頼性テストのトラブルシューティング