导出失败的 HLK 作业

你现在可以导出失败的作业,以便它可以在完整 HLK 环境外部的计算机上运行。 对于驱动程序开发人员而言,此功能允许独立执行测试,以简化重现失败的过程。

导出的测试环境紧密地模拟专用的 HLK 环境。 但这并不能保证相同的测试执行。 用户可能需要处理以下任何情况:

  • 重新启动不由测试基础结构处理。 在许多情况下,用户必须手动重新启动系统。
  • 可能为以下情况:测试通过测试任务内的 HLK 客户端基础结构重新启动系统。 例如,不会在批处理文件中捕获这些重新启动作为独立执行期间的提示或重新启动。
  • 不同任务写入同一位置的非唯一命名日志文件可能会导致其中一些文件被覆盖。
  • 在不同的系统上运行时,写入批处理文件的参数可能会有所不同。 例如,在将硬件实例 ID 移至其他系统时,同一硬件和驱动程序的硬件实例 ID 可能会有所不同,用户必须(例如,从设备管理器中)查找相应的目标值并使用正确的值更新批处理文件。
  • 依赖于关联配置作业配置系统的测试可能未正确准备,因为 HLK 仅导出测试作业本身。

并非所有结果都可以导出。 以下列表描述了测试的限制和可导出的测试结果:

  • 测试必须已执行且已完成,其状态为“已通过”、“失败”或“已取消”。
  • 测试运行必须成功地从客户端系统返回基础结构日志。 这些文件是导出测试所需要的。
  • 只能导出单台计算机的测试。 不可导出需要多台计算机来执行的测试。
  • 必须使用 HLK 桌面客户端来运行测试。 不可导出在 Windows Core 或代理移动客户端系统上运行的测试。
  • 不可导出由于已知基础结构问题或其他原因而标记为不可导出的测试。
  1. 在 HLK Studio 的“结果”选项卡中,右键单击失败的结果,然后选择“导出测试运行”。

右键单击失败的测试结果时的上下文菜单

  1. 此时将显示“保存”对话框。 将导出的作业保存到闪存驱动器或其他外部位置,以便可以将导出的测试用于其他计算机。 不能多次将同一测试导出到同一位置。 对话框将确认导出已完成。

导出测试结果后的“成功”对话框

  1. 在独立系统上执行测试所需的测试二进制文件和批处理文件将导出到指定的目录。 导出的测试保存在子目录中,其中包含失败作业的名称和体系结构。 必须安装的用于运行测试的基础结构组件保存在一个名为“基础结构”的子目录中,其中包含基础结构所面向的目标体系结构的名称。

注意

  基础结构组件应在目标系统上仅安装一次。 不需要为每个失败的作业重新安装这些组件。

例如,在驱动器 E:\ 的根目录上保存标题为“设置呈现器目标”的失败 x64 作业将使用以下文件夹结构导出作业文件夹和基础结构安装程序:

E:.
├───Infrastructure(X64)
└───Set_Render_Target(X64)
    ├───CoreClr
    ├───MinTe
    │   └───CoreClr
    ├───NetFx2.0
    ├───NetFx4.5
    ├───verifysupportfiles
    │   ├───CoreClr
    │   ├───MinTe
    │   │   └───CoreClr
    │   ├───NetFx2.0
    │   └───NetFx4.5
    └───[windir]
        └───system32 

导出的测试包包含多个文件和子文件夹,包括以下各项:

  • readme1st.txt - 包含有关如何运行导出的测试的信息
  • run.cmd - 用于运行测试的批处理文件
  • 运行测试所需的二进制文件和其他文件
  • setup(architecture).exe - 安装用于安装基础结构的可执行文件
  1. 将导出的测试文件夹用于新计算机以进行测试。 路径不应包含任何空格,因为这样将会导致有些测试失败。

  2. 执行 (save folder)\Infrastructure(architecture)\setup(architecture).exe,以便在运行测试之前安装基础结构组件。 基础结构安装程序将显示一个对话框,指示组件的安装是否成功。

注意

基础结构组件应在目标系统上仅安装一次。 不需要为每个失败的作业重新安装这些组件。

注意

安装程序和作业的体系结构必须与安装它的目标系统的体系结构相匹配。

  1. 在 (save folder)(job name)(architecture) 文件夹的批处理文件中,可以对要在测试计算机上运行的批处理文件进行任何必要的更改。 例如,可以进行以下更改:
  • 注释掉不会导致作业失败的行
  • 更改参数值以匹配运行导出的测试的计算机。 例如,同一硬件的实例 ID 通常在两个不同的系统上不同,因此,在运行导出的测试之前,需要对其进行更新。
  • 添加命令以连接调试程序

注意

如果任务显示错误消息“无法运行此测试,因为可能会重新启动计算机。”,则必须编辑 run.cmd,并将 /rebootstatefile=(some_file_name) 追加到失败任务的命令行,如以下示例中所示:

cmd /c TE.exe /inproc /enablewttlogging /appendwttlogging devfund_pcirootportsurpriseremovetest_wlk_certification.dll
/p:"MultiDeviceHardwareIdSdelQueryHardwareID=!MultiDeviceHardwareIdSdelQueryHardwareID!"
/p:"MultiDeviceInstanceIdSdelWDKDeviceID=!MultiDeviceInstanceIdSdelWDKDeviceID!" /p:"DQ=!DQ!"
/p:"TestCycles=!TestCycles!" /p:"IOPeriod=!IOPeriod!" /p:"WDTFREMOTESYSTEM=!WDTFREMOTESYSTEM!"
/p:"Wpa2PskAesSsid=!Wpa2PskAesSsid!" /p:"Wpa2PskPassword=!Wpa2PskPassword!"
/p:"DriverVerifierAdditionalDrivers=!DriverVerifierAdditionalDrivers!"
/p:"DriverVerifierExcludedFlags=!DriverVerifierExcludedFlags!"
/p:"DriverVerifierCustomizeConfiguration=!DriverVerifierCustomizeConfiguration!"
/rebootStateFile=rebootstatefile.xml
  1. 完成修改后,使用管理权限启动命令提示符,更改为测试目录,然后执行 run.cmd。 批处理文件中的每个任务都与任务编号相关联,在运行批处理文件时可将其用作起点。 默认情况下,执行在任务之间暂停。 支持以下执行模式:
  • 不带参数的“Run”在批处理文件的开头开始执行,在每个任务之间暂停。
  • “Run 5”将启动批处理文件并跳到任务 5。
  • “Run FAST”将在快速模式(在任务之间不暂停)下在开头启动批处理文件。
  • “Run 5 FAST”将在快速模式(在任务之间不暂停)下在任务 5 中启动批处理文件。
  • “RebootResume”将启动上次执行脚本后最后重新启动的批处理文件。 还支持 FAST 标志。
  • “RerunLast”将从上次退出批处理文件时运行的命令启动批处理文件。 此命令可用于多次重新运行任务,通过按 Control+C 在任务期间退出脚本并运行 rerunlast.cmd 以重新运行上一个命令来实现。 还支持 FAST 标志。
  1. 确定并修复导致测试失败的问题后,便可以部署修补并验证作业是否在 HLK 环境中成功。

注意

无法将成功的结果导入到 HLK 环境中。 必须从环境中重新运行该作业。