本主题会指导你完成一系列脚本支持的步骤,以自动执行 Windows HLK 驱动程序、系统和软件设备测试。 这使你可以在不使用 Windows HLK 用户界面 (UI) 的情况下运行 Windows HLK (HLK) 测试。
注意
Windows HLK 执行引擎有一个已知问题。 当测试已停止或系统已停止计算机,但 Windows HLK 对象模型将测试解释为仍在运行时,Windows HLK 执行引擎无法识别该状况,可能会继续无限期监视测试执行(或直到达到项目的超时值)。 此问题的根本原因是 Windows HLK 执行引擎从 Windows HLK ObjectModel 获取测试结果;在这种情况下,它因此认为测试仍在运行,不会启动计算机监视器以等待恢复。
建议手动取消作业,并重新启动计算机以向 ObjectModel 发出警报。 可能需要使用缩短的测试集合文件重新运行失败/取消的测试,或是使用 Windows HLK Studio 手动运行。 此问题将在未来版本中得到解决。
在一系列脚本化步骤中运行 Windows HLK 测试的过程遵循类似于 Windows HLK 入门指南的工作流。
各个步骤如下所示:
Windows HLK 自动化工具先决条件
开始测试之前,请确保熟悉 Windows HLK 自动化概念和硬件要求。 请参阅 Windows HLK 先决条件。
步骤 1:在测试服务器上安装控制器和支持程序
测试服务器计算机应按照 Windows HLK 先决条件中所述安装有操作系统并进行配置。 随后可以安装以下程序:
Windows HLK。 有关如何安装 Windows HLK 的详细说明,请参阅步骤 1:在测试服务器上安装控制器 和 Studio。
Windows PowerShell 3.0。 请参阅 KB2506143。
Microsoft Excel(Excel 2007、Excel 2010 或 Excel 2013)。
适用于 Windows XP 的 Office 主互操作程序集。
重要
导出 Excel 需要此特定版本。
将 office.dll 和 Microsoft.Office.Interop.Excel.dll 下载并复制到 %WTTSTDIO%。 使用这些程序来支持步骤 8:在 Excel 中分析测试结果。
若要验证 Windows HLK 控制器软件是否成功安装,请在测试服务器上的 C:\Program Files (x86)\Windows Kits\8.1\Hardware Certification Kit\Studio 中检查是否存在以下程序:
hlkexecutionengine.exe
Microsoft.Windows.Kits.Hardware.Certification.Management.dll
Microsoft.Windows.Kits.Hardware.Certification.Project.dll
Microsoft.Windows.Kits.Hardware.Certification.Testcollection.dll
若要验证 Windows PowerShell 3.0 是否成功安装,请执行以下步骤:
验证 Windows PowerShell 3.0
若要在运行 Windows 7 的计算机上打开 Windows PowerShell 3.0 会话 x86 版本,请依次单击“开始”、“所有程序”、“附件”、“Windows PowerShell”,右键单击“Windows PowerShell (x86)”,然后单击“以管理员身份运行”。
若要在运行 Windows 8 或 Windows Server 2012 的计算机上打开 Windows PowerShell 3.0 会话 x86 版本,请按照 PowerShell 入门中的说明执行操作。
键入
Get-Command -Module HardwareCertification
以查看以下 Windows HLK 自动化 cmdlet 列表:Export-HwCertTestCollectionToXml
Import-HwCertTestCollectionFromXml
Merge-HwCertTestCollectionFromPackage
Merge-HwCertTestCollectionFromXm
New-HwCertTestCollectionExcelReport
New-HwCertTestCollection
New-HwCertProjectDefinitionFile
可以选择使用以下命令设置具有自动延续的调试消息输出:
$DebugPreference = "Continue";
步骤 2:在测试系统上安装 HLK 客户端
若要在测试系统安装 HLK 客户端,请按照步骤 2:在测试系统上安装客户端中的说明执行操作。
注意
在计算机上安装 Windows HLK 客户端软件时,计算机会自动添加到 Windows HLK 控制器默认池中。 默认池仅在后续步骤中定义的项目定义文件中受支持。
若要从每台测试计算机的设备管理器查找测试设备的硬件 ID 或设备类,请参阅发现设备的硬件 ID 和设备安装程序类。
步骤 3:在控制器或测试服务器上创建测试项目定义文件
项目定义文件(也称为 PDEF)会定义测试项目的特定于目标和特定于计算机的部分。 特定于测试和特定于结果的部分在测试集合文件中进行定义。 这些文件共同完整描述了项目配置、范围和结果。
有关 PDEF 文件格式说明和辅助 PDEF 信息,请参阅 PDEF 参考。
下面显示了一个示例测试项目定义文件,名为 C:\Temp\DefinitionFile\device-win8client-x64-auto.xml:
<ProjectDefinitionData Controller="controllername" Database="HLKJobs" Timeout="120" User="user">
<Project Name="Project-win8client-x64">
<SchedulerType>AdaptiveOrderOptimized</SchedulerType>
<MultiDeviceTestGroup>true</MultiDeviceTestGroup>
<TestStatusToSkip>Pass</TestStatusToSkip>
<Product Name="Product-win8client-x64" OsPlatform="Windows 8 Client x64" MachinePool="Test">
<Family Name="Family-win8client-x64">
<Target TargetType="Device" Id="HWID"/>
</Family>
<Machine Name="TEST-CLIENT-A" Role="SUT"/>
<Machine Name="TEST-CLIENT-B" Role="SUT"/>
</Product>
<Packages Path="C:\temp"/>
</Project>
</ProjectDefinitionData>
以下表定义了子元素和属性(按应在其中设置它们的 XML 节点进行分组)。
项目
Xml | 名称 | 说明 |
---|---|---|
Attribute |
名称 |
用户指定的项目易记名称。 |
属性 |
控制器 |
控制器的名称。 |
属性 |
数据库 |
控制器数据库的固定名称(例如 HLKJobs)。 |
属性 |
超时 |
执行工具监视活动的时间(以小时为单位进行表示)。 如果测试轮次运行时间超过此值,则工具会停止所有测试。 |
元素 |
SchedulerType |
用于计划测试的可选枚举值,可为执行引擎定义计划模式。 有效值如下:
|
元素 |
MultiDeviceTestGroup |
布尔标志,设置为 TRUE 可启用多设备测试。 |
元素 |
TestStatusToSkip |
可选枚举值,用于在计划测试时为执行引擎定义跳过模式。 有效值为 Pass、Fail 或 NoData。 |
元素 |
产品 |
此项目的产品。 应该只有一个条目。 |
元素 |
程序包 |
应该用于保存此项目的 .hlkx 包的路径。 |
Product
Xml | 名称 | 说明 |
---|---|---|
Attribute |
名称 |
测试的产品的易记名称。 |
属性 |
OSPlatform |
产品的 Windows 版本。 将忽略为此产品指定的运行不同 Windows 版本的计算机。 |
属性 |
MachinePool |
包含为受测产品指定的测试计算机的计算机池。 这是一个可选参数。 如果未指定,则使用默认计算机池。 如果指定了计算机池,则它必须引用现有计算机池。 此参数与 Machine 参数配合工作。 如果指定了 MachinePool 参数,但未指定 Machine 参数,则测试会在指定计算机池中的所有计算机上运行。 |
元素 |
系列 |
属于此产品的目标系列集。 |
元素 |
Machine |
将用于测试的一台或多台计算机。 如果此参数为空,则指定池中的所有计算机都匹配并用于测试。 |
系列
Xml | 名称 | 说明 |
---|---|---|
Attribute |
名称 |
在项目中测试的目标的目标系列易记名称。 |
元素 |
目标 |
属于此系列的目标集。 目标是可选择进行测试的设备或驱动程序。 |
Target
Xml | 名称 | 说明 |
---|---|---|
Attribute |
TargetType |
目标的类型。 有效值为 Device、System 和 TargetCollection。 |
属性 |
Id |
目标的唯一标识符。 例如,将 TargetType 参数设置为值 Device 时,Id 会设置为硬件 ID (HWID)。 如果 TargetType 设置为值 System,则 Id 的值会被忽略。 |
元素 |
ManualSelectFeature |
指定手动添加的功能。 |
计算机
Xml | 名称 | 说明 |
---|---|---|
Attribute |
名称 |
测试计算机的名称。 这是一个可选参数。 如果指定了计算机名称:
|
属性 |
角色 |
如果计算机是测试中的系统 (SUT),则此属性应指定为 SUT。 如果计算机是用于多计算机测试的辅助客户端,则此属性应指定为 CLIENT。 不指定此属性会默认为此计算机是测试中的系统 (SUT)。 |
包
Xml | 名称 | 说明 |
---|---|---|
Attribute |
路径 |
项目执行时生成的提交包的文件夹。 |
生成项目定义文件
可以使用任何 xml 或文本编辑器,或是使用管理工具 New-HwCertProjectDefinitionFile cmdlet 创建 PDEF。 如果使用管理工具 cmdlet,则可以生成具有下面列出的限制的 PDEF。 可以使用对 PDEF 文件架构有效的任何更改,手动或以编程方式更新生成的 PDEF xml。
对于项目,生成的 PDEF 只能有一个 <Project> 元素和一个 <Product> 元素。
<Packages> 元素的 <Path> 属性必须为空或设置为 [PACKAGES] 标记。
<Project> 元素的 <TestCollectionStatusLocation> 属性必须设置为空字符串。
<SchedulerType> 元素必须设置为 AdaptiveResourceOptimized。
<Product> 元素的 <OsPlatform> 属性必须设置为从此项目的指定池中第一台计算机派生的 OSPlatform 值。
New- HwCertProjectDefinitionFile cmdlet 的参数如下所述:
OutputAutomatedPdef - 布尔标志,用于处理以下 PDEF xml 属性的自动生成:
<Controller> = "[MACHINE]
<TestCollectionReadLocation> = "[FILTERED_TEST_COLLECTION]
<Path> = "[PACKAGES]"
TestCollectionFilePath - 测试集合 xml 文件的完整路径,存储在 PDEF xml 中 <Project> 元素的 <TestCollectionReadLocation> 属性中。 如果未提供此值和 OutputAutomatedPdef,则路径会设置为空字符串。
ControllerName - 控制器的名称,存储在 PDEF xml 的 <ProjectDefinitionData> 元素的 <Controller> 属性中。 如果未提供此值和 OutputAutomatedPdef,则控制器名称会设置为当前计算机的名称。
PdefFilePath - 输出 PDEF xml 文件的名称。 如果未提供,则会自动生成采用以下格式的路径:
%userprofile%\\desktop\\PDEF_Files\\PDEF_{time_date}\\PDEF_{os_platform_name}_{time_date}.xml
ProjectName - 项目的名称,存储在 PDEF xml 中的 <Project> 元素的 <Name> 属性中。 如果未提供,则使用当前日期时间戳值自动生成名称。
EnableMultiDeviceTest - 布尔标志,用于处理项目的多设备计划,存储在 PDEF xml 中的 <MultiDeviceTestGroup> 元素中。 如果未指定,则不启用多设备计划。
SkipTestStatus - 用于计划测试的跳过模式,存储在 PDEF xml 中的 <TestStatusToSkip> 元素中。 有效值为 Pass、Fail 和 NoData。 如果未提供,则默认跳过模式为 Pass。
EnableIsolateTargets - 布尔标志,用于启用为每个发现的目标创建单个设备系列。 如果未指定,则目标按设备类分组为系列。
以下两个参数为项目指定计算机池。 必须仅提供一个参数。 如果未提供参数,或如果同时提供这两个参数,则会出现错误。
MachineList - 在以逗号分隔的列表中指定计算机名称。 所有指定计算机必须处于相同的现有池或默认池中。
MachinePool - 现有计算机池的名称。
以下六个参数为项目指定目标类型。 必须仅提供一个参数。 如果未提供参数,或如果提供多个参数,则会出现错误。
RunSystemTest - 项目用于测试整个系统。 生成具有单个 TargetType = System 的一个目标系列。
TestAllDevices - 项目用于测试在指定计算机上发现的所有目标。
HwIdList - 在以逗号分隔的列表中指定目标硬件 ID。 列表中的每个硬件 ID 都可以进行部分指定。 在这种情况下,通过使用部分指定的值作为与硬件 ID 格式相关的子字符串来标识匹配硬件 ID。 字符串会作为不区分大小写的 ASCII 进行比较。
DriverList - 在以逗号分隔的列表中指定目标驱动程序的名称。 当前不支持 UMDF 驱动程序 (.DLL)。 这些设备仍可使用其 HWID(作为 Windows 设备类 GUID 的一部分)或所有目标来发现。
ContainerIdList - 在以逗号分隔的列表中指定容器 ID 值。 每个容器 Id 值都必须采用 GUID 格式。
ClassIdList - 在以逗号分隔的列表中指定类 ID 值。 每个类 ID 值都必须采用 GUID 格式。
步骤 4:在控制器或测试服务器上创建基于项目定义文件生成完整测试列表
可以使用管理工具 cmdlet New-HwCertTestCollection 生成在项目中测试目标所需的完整测试列表。 下面显示了如何在 Windows Powershell 会话中使用管理工具 cmdlet 的示例。 (此步骤是可选的。)
New-HwCertTestCollection -ProjectDefinitionFile C:\Temp\DefinitionFile\device-win8client-x64-auto.xml | Export-HwCertTestCollectionToXml -Output c:\temp\master.xml -TestPassIdentifier "TP001"
如果项目定义文件中指定的目标不再可用,则你会收到警告,测试集合生成会继续进行。 在这种情况下,建议执行以下操作以获取完整测试列表:
创建仅容纳不可用目标的项目定义文件辅助副本。 由于测试列表生成时间取决于指定目标的数量,因此强烈建议仅在辅助副本中保留上一次运行时不可用的目标。
解决导致目标不可用的问题;例如,池中的某些计算机未处于“就绪”状态。
使用项目定义文件的辅助副本生成辅助测试列表。
合并初始和辅助测试列表。 可以通过将辅助列表中的 <TestCollectionRecord> 元素添加到初始列表来手动执行此操作。
下面提供了生成的输出 xml 文件示例 (c:\temp\master.xml)。
<?xml version="1.0" ?>
<ArrayOfTestCollectionRecord
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
mlns:xsd="http://www.w3.org/2001/XMLSchema">
<TestCollectionRecord
Name="Disk Stress (LOGO)"
Guid="738735f7-245a-4b39-9d81-20339ce31fd4"
TargetName="Disk"
TargetId="DiskId"
TargetType="Device"
HlkBuildVersion="10.000.10020.10020"
TestPassIdentifier="TP001"
OsPlatform="Windows 10 Client x64">
<ContentLevelSet>Reliability</ContentLevelSet>
<ContentLevelSet>Certification</ContentLevelSet>
<ScheduleOptionSet>Distributable</ScheduleOptionSet>
<ScheduleOptionSet>MultipleDEvices</ScheduleOptionSet>
<FeatureMapped>Device.Storage.Hd</FeatureMapped>
</TestCollectionRecord>
</ArrayOfTestCollectionRecord>
其中属性定义为:
TargetId - 测试计算机上的目标的硬件 Id
TargetName - 测试计算机上的目标的易记名称
OSPlatform - 测试计算机上指定目标的 Windows 版本
Guid - 检测到的用于测试目标的作业 ID
Name - 检测到的用于测试目标的作业易记名称
TestPassIdentifier - 标识测试轮次的字符串值。
TargetType - 在项目中测试的产品类型(设备、系统或筛选器)
Feature Mapped - 检测到的作业会针对目标测试的功能
ContentLevelSet - 检测到的用于测试目标的作业类别
ScheduleOptionSet - 用于测试计划的选项。 有效值为:
Manual - 测试在执行时需要手动操作
Distributable - 测试可以针对多台计算机进行计划,并在第一台可用计算机上运行。
MultipleDevices - 可以在相同计算机上对多个设备上同时运行测试
MultipleMachines - 测试可以计划为在具有不同角色的多台计算机上运行
SpecialConfiguration - 测试需要特殊计算机配置才能运行测试
HLKBuildVersion - 用于生成测试集合的 HLK 版本
步骤 5:筛选控制器上的完整测试列表
可以使用管理工具 PowerShell cmdlet Import-HwCertTestCollectionFromXml 按指定属性值筛选完整测试列表。 (此步骤是可选的)。生成的输出 xml 文件的任何属性(如步骤 4 中所列)都可用于筛选列表。 应按所需计划顺序排列输出测试集合测试记录。 在下面的示例中,Basic 测试类别用于对主列表进行筛选和排序。 在 Windows PowerShell 会话中键入以下命令:
Import-HwCertTestCollectionFromXml -Input C:\Temp\master.xml | ? { $_.ContentLevelSet.Contains("Basic") } | sort -Property GUID | Export-HwCertTestCollectionToXml -Output c:\temp\basic.xml
步骤 6:在控制器上将经过筛选的测试列表添加到项目定义文件
使用任何文本或 xml 编辑器更新 PDEF,以便添加测试集合输入 xml 文件的位置和输出测试结果的位置。 下面提供了更新后的 PDEF 示例 (C:\Temp\DefinitionFile\device-win8client-x64-auto-basic.xml)。
<ProjectDefinitionData Controller="controllername" Database="HLKJobs" Timeout="120" User="user">
<Project Name="Project-win8client-x64" TestCollectionReadLocation="C:\temp\basic.xml" TestCollectionStatusLocation="basic_collection_status.xml">
<MultiDeviceTestGroup>true</MultiDeviceTestGroup>
<TestStatusToSkip>Pass</TestStatusToSkip>
<Product Name="Product-win8client-x64" OsPlatform="Windows 8 Client x64" MachinePool="Test">
<Family Name="Family-win8client-x64">
<Target TargetType="Device" Id="HWID"/>
</Family>
<Machine Name="TEST-CLIENT-A" Role="SUT"/>
<Machine Name="TEST-CLIENT-B" Role="SUT"/>
</Product>
<Packages Path="C:\temp"/>
</Project>
</ProjectDefinitionData>
其中属性定义为:
TestCollectionReadLocation - 经过筛选的测试集合 xml 文件的路径
TestCollectionStatusLocation - 包含测试结果的输出 xml 文件的路径
步骤 7:在控制器上运行测试项目
从命令行运行以下命令:
hlkexecutionengine.exe /Project "C:\Temp\DefinitionFile\device-win10client-x64-auto-basic.xml" /RunCollection
命令完成后,会创建以下文件:
会在 PDEF 中定义的 PackagePath 属性中指定的位置处,为每个测试运行创建一个 包文件名.hlkx(请参阅步骤 3:在控制器或测试服务器上创建测试项目定义文件)。 包文件名由项目易记名称以及项目运行的日期和时间组成。
结果在一个 XML 文件中提供。 下面提供了示例结果文件 (C:\temp\basic_collection_status.xml)。
<?xml version="1.0" ?> <ArrayOfTestCollectionRecord xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" mlns:xsd="http://www.w3.org/2001/XMLSchema"> <TestCollectionRecord Name="Disk Stress (LOGO)" Guid="738735f7-245a-4b39-9d81-20339ce31fd4" TargetName="Disk" TargetId="DiskId" TargetType="Device" HlkBuildVersion="10.000.10020.10020" TestPassIdentifier="TP001" OsPlatform="Windows 8 Client x64"> <ContentLevelSet>Reliability</ContentLevelSet> <ContentLevelSet>Certification</ContentLevelSet> <ScheduleOptionSet>Distributable</ScheduleOptionSet> <ScheduleOptionSet>MultipleDEvices</ScheduleOptionSet> <FeatureMapped>Device.Storage.Hd</FeatureMapped> <Result StartTime="2013-03-14T17:59:45.117-07:00" Status="Passed" FiltersAppliedCount="0" SourcePath="TEST-MACHINE-2A" InstanceId="67" FeatureDetected="Device.DevFund.CDA Device.DevFund.DriverFramework.AllDrivers Device.DevFund.DriverFramework.KMDF Device.DevFund.INF Device.DevFund.Memory Device.DevFund.Reliability.Interrupts Device.DevFund.Reliability Device.DevFund.ReliabilityDisk Device.DevFund.Security Device.DevFund.Server Device.Storage.Hd.Iscsi Device.Storage.Hd.MultipleAccess.PersistentReservation Device.Storage.Hd.PersistentReservation Device.Storage.Hd.ScsiProtocol Device.Storage.Hd" /> </TestCollectionRecord> </ArrayOfTestCollectionRecord>
其中属性定义为:
StartTime - 测试运行开始的日期和时间
Status - 设置为 pass 或 fail
FiltersAppliedCount - 应用于结果日志的筛选器数
SourcePath - 为项目运行生成的包 .hlkx 文件的文件路径
InstanceID - 测试计算机上目标的设备实例 ID
FeatureDetected - 对测试的目标检测到的功能
停止/重新启动测试执行
可以随时停止并重新启动测试运行。 当前正在客户端计算机上运行的测试会继续运行,但不会对进一步测试进行计划。 正在运行的测试数最多等于可用计算机数,因为计划逻辑进行排队的测试不会多于可用计算机。 尽管正在运行的测试会继续执行(并且可以将测试结果返回到 Windows HLK 项目),但 Windows HLK 执行引擎工具生成的状态 xml 文件不包含在过程停止时正在运行的测试的通过/失败值。 因此,重新启动项目可能会导致一组测试运行两次 -- 一次在自动化工具退出后,一次在过程重新启动时。 因为过程的提前终止通常意味着需要调查计算机状态问题,因此以前计划的测试的最后一个批次的这种重新运行行为是按照设计执行的,通常是需要的。
停止机制
可以通过在控制台窗口中键入 Ctrl-C 命令来停止测试过程。 Windows HLK 执行引擎会停止执行新测试,并且会开始短暂的清理过程,例如将最终状态写入摘要 xml 文件和执行引擎日志。
重新启动机制
该过程的基本简要概述如下:
使用 Windows HLK Studio 创建在停止测试过程之前运行的项目的 .hlkx 包。
编辑 Windows HLK 执行引擎项目定义 xml 文件,以提供新的输入和输出状态文件。
使用项目定义文件重新启动 HlkExecutionEngine.exe。
使用 Windows HLK Studio 将两个部分 HLK 项目合并为一个完整的新 .hlkx 文件。
按照本文档的“后续分析选项”部分中所述。对完整 .hlkx 文件运行分析阶段。
此过程的详细步骤如下:
若要创建在停止测试执行之前已完成的结果的 .hlkx 包,请启动 Windows HLK Studio。
在 Windows HLK Studio 中,双击已停止的项目的项目名称。 项目名称与项目 xml 文件中的名称相同。 (在 C:\Users\LocalAdminUser\Desktop\PDEF_Files 下带有时间戳的文件夹中可以找到项目 xml 文件。)
在 Windows HLK Studio 中的“包”选项卡上,单击“创建包”并保存包。
注意
仅当通过在默认池中启动客户端计算机来运行初始测试轮次时,才必须执行以下步骤。
由于测试只能在计算机处于非默认池中时运行,并且由于 Windows HLK 执行引擎在完成Ctrl-C 操作之前不会等待所有当前正在运行的测试完成,因此在 Windows HLK 执行引擎停止之后,所有计算机都会保留在其现有计算机池中。 如果原始项目 xml 文件指定了默认池中的计算机,则必须将客户端计算机移回默认池。 可以使用位于 Windows HLK Studio UI 顶部的“配置”菜单,或通过 Windows HLK Manager 应用程序执行此操作。
生成部分 .hlkx 包后,必须更新 Windows HLK 执行引擎项目文件,才能为剩余运行做好准备。 导航到 C:\Users\LocalAdminUser\Desktop\PDEF_Files,通过测试运行找到带有正确时间戳的文件夹。 在该文件夹中的 xml 文件集中,项目 xml 文件是前面没有“Status_”、“FTC_”或“TC_”的文件。 在记事本或其他文本编辑器中,按如下所示编辑此文件:
在项目 xml 文件中,必须编辑两个字段:TestCollectionReadLocation 和 TestCollectionStatusLocation。 若要使 Windows HLK 执行引擎工具了解要在何处恢复,以前的 TestCollectionStatusLocation 值(结果的 xml 输出文件)必须成为输入文件。 将 TestCollectionStatusLocation 的值复制到 TestCollectionReadLocation 值。 然后,设置新 TestCollectionStatusLocation 值。 TestCollectionStatusLocation 值可以是任何值;例如“C:\Users\LocalAdminUser\Desktop\PDEF_Files\Rerun.xml”。
(可选)修改项目节点 Name 值,以便以后更易于在 HLK Studio 中查找项目。 (因为当前 Name 值已使用,Windows HLK 执行引擎会创建新项目名称。)
若要重新启动该工具,请使用管理员权限打开新的命令提示符窗口。 导航到 Windows HLK Studio 目录 (%wttstdio%)。 输入以下命令:
HlkExecutionEngine.exe /Project <project xml file location> /RunCollection
此命令会启动 Windows HLK 执行引擎,该引擎使用在该工具停止之前正在运行的一组以前测试进行恢复。 执行可以继续,直到完成所有测试。
第二组测试完成后,必须将这两个项目合并在一起。 为此,请打开 Windows HLK Studio。 查看已创建的最近项目 - 通常,最近项目来自所执行的第二次执行运行(除非其他用户也在此期间创建项目)。 或者,如果在项目 xml 文件中更改了项目 Name 值,则可以通过新名称标识项目。
双击通过第二次运行创建的新项目。 在“包”选项卡上,单击“合并包”。 在“要合并的包”对话框中,单击“添加”,然后导航到通过 HLK 执行引擎的第一次运行创建的第一个部分 .hlkx 包。 单击“保存”,然后在主窗口中单击“创建包”。
可以使用管理工具 PowerShell 命令为项目生成测试结果的聚合列表。 随后可以在 Excel 中分析聚合结果。
可以通过两种方法来聚合项目的测试结果列表。
使用基于 XML 的输出文件。 下面显示了如何从控制器或测试服务器上打开的 Windows PowerShell 会话合并基于 XML 的测试结果的示例:
dir -s "c:\temp\*.xml" | Merge-HwCertTestCollectionFromXml -ValidationXmlPath "C:\temp\master.xml" | Export-HwCertTestCollectionToXml -Output "C:\Temp\merged_1.xml" -TestPassIdentifier "TP003" dir -s "c:\temp\*.xml" | Merge-HwCertTestCollectionFromXml -ValidationXmlPath "C:\temp\master.xml" | Export-HwCertTestCollectionToXml -Output "C:\Temp\merged_2.xml" -TestPassIdentifier "TP004"
使用项目 .hlkx 输出文件。 下面显示了如何从控制器或测试服务器上打开的 Windows PowerShell 会话合并基于 .hlkx 输出文件的示例:
dir -s "c:\temp\*.hlkx" | Merge-HwCertTestCollectionFromPackage -ValidationXmlPath "C:\temp\master.xml" | Export-HwCertTestCollectionToXml -Output "C:\Temp\merged_1.xml" -TestPassIdentifier "TP003" dir -s "c:\temp\*.hlkx" | Merge-HwCertTestCollectionFromPackage -ValidationXmlPath "C:\temp\master.xml" | Export-HwCertTestCollectionToXml -Output "C:\Temp\merged_2.xml" -TestPassIdentifier "TP004"
当 ValidationXmlPath 指定为 Merge-HwCertTestCollectionFromXml 或 Merge-HwCertTestCollectionFromPackage 的参数时,聚合算法会验证主测试集合中列出的所有测试是否在任何测试集合文件中至少有一个为聚合指定的结果。 仅对具有在 TestPassIdentifier cmdlet 参数中指定的相同 TestPassIdentifier 值的测试集合检查此条件。 如果不满足此条件,则取消聚合并发生错误。
若要确定未对测试轮次运行的测试,请将主测试集合包含在为聚合指定的测试集合文件列表中,但不要指定 ValidationXmlPath。 在这种情况下,会生成输出聚合测试集合。 该集合包含主集合中列出的所有测试,不过其中一些测试可能没有结果。
测试结果的聚合列表 (C:\temp\merged.xml) 包括完整测试列表的信息。 如果任何所需测试从未运行,则测试结果的聚合列表会显示所需测试未运行。 由于合并了所有测试结果,因此使用相同 TestPassIdentifier 属性名称值运行多个测试运行可能会创建不一致的结果报告。 建议为每个测试轮次使用不同的名称。
创建测试结果的聚合列表后,可以在控制器或测试服务器上的 Windows PowerShell 会话中使用命令生成 Excel 电子表格。 此处提供了将创建 Excel 电子表格报告的命令示例:
New-HwCertTestCollectionExcelReport ("C:\Temp\merged_1.xml", "C:\Temp\merged_2.xml" ) -ExcelPath 'c:\temp\report.xls' -ResultCount 1
其中,ResultCount 定义为最近结果的最大数量,存储在每个测试的 Excel 报告中。
下面显示了运行命令创建 Excel 电子表格报告后创建的输出示例。
生成的 Excel 报告会包含以下标题:
测试总数 - 此测试轮次中的测试总数。
通过总数 - 此测试轮次中的结果总数
带筛选器的通过总数 - 对测试应用了错误筛选器的通过总数。
总通过百分比 - 通过测试的百分比(通过总数/测试总数)。
失败总数 - 此测试轮次中的失败总数(测试总数 - 通过总数)。
N-1 改进 - 在此测试轮次与上一个测试轮次(左侧列)之间实现的新通过数。
N-1 倒退 - 在此测试轮次与上一个测试轮次(左侧列)之间遇到的新失败数。
N-1 未更改 - 在此测试轮次与上一个测试轮次(左侧列)之间,结果未发生更改的测试数。
N-1 未比较 - 在此测试轮次与上一个测试轮次(左侧列)之间,由于测试仅在一个测试轮次中可用而未比较的测试数。
PDEF 参考
在 PDEF 中指定的辅助信息
某些项目需要特定于测试的信息以便发现和执行测试。 此信息包括:
在测试定义中没有默认值的测试参数。 可选 <Parameter> 元素可以在多个位置指定(请参阅 PDEF 架构):
在 <Test> 元素下。 在这种情况下,会为特定测试指定参数值。
在 <Family> 元素下。 在这种情况下,会为系列中所有目标的所有测试应用参数值,除非它被为测试指定的相同参数的值所覆盖
在 <Product> 元素下。 在这种情况下,会为产品中所有目标的所有测试应用参数值,除非它被为系列或测试指定的相同参数的值所覆盖。
无法自动检测的目标功能。 可选 <ManualSelectedFeature> 元素可在 <Target> 元素下指定。 如果指定,则这些功能会与自动检测的功能一起参与测试发现和测试集合生成。
<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:attribute name="User" type="xsd:string"/>
<xsd:attribute name="Controller" type="xsd:string"/>
<xsd:attribute name="Timeout" type="xsd:nonNegativeInteger"/>
<xsd:attribute name="Database" type="xsd:string"/>
<xsd:attribute name="Name" type="xsd:string"/>
<xsd:attribute name="Value" type="xsd:string"/>
<xsd:attribute name="TestCollectionReadLocation" type="xsd:string"/>
<xsd:attribute name="TestCollectionStatusLocation" type="xsd:string"/>
<xsd:attribute name="OsPlatform" type="xsd:string"/>
<xsd:attribute name="MachinePool" type="xsd:string"/>
<xsd:attribute name="Path" type="xsd:string"/>
<xsd:attribute name="Role" type="xsd:string"/>
<xsd:attribute name="TargetType">
<xsd:simpleType>
<xsd:restriction base="xsd:NMTOKEN">
<xsd:pattern value="((S|s)(Y|y)(S|s)(T|t)(E|e)(M|m))|((D|d)(E|e)(V|v)(I|i)(C|c)(E|e))|((T|t)(A|a)(R|r)(G|g)(E|e)(T|t)(C|c)(O|o)(L|l)(L|l)(E|e)(C|c)(T|t)(I|i)(O|o)(N|n))"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:attribute>
<xsd:attribute name="Id" type="xsd:string"/>
<xsd:attribute name="CrashDumpCopyBack">
<xsd:simpleType>
<xsd:restriction base="xsd:NMTOKEN">
<xsd:pattern value="((D|d)(I|i)(S|s)(A|a)(B|b)(L|l)(E|e)|(M|m)(I|i)(N|n)(I|i))|(K|k)(E|e)(R|r)(N|n)(E|e)(L|l)|((F|f)(U|u)(L|l)(L|l))"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:attribute>
<xsd:element name="ProjectDefinitionData">
<xsd:complexType>
<xsd:sequence>
<xsd:element ref="Project" minOccurs="1" maxOccurs="unbounded"/>
</xsd:sequence>
<xsd:attribute ref="User" use="optional"/>
<xsd:attribute ref="Controller" use="required"/>
<xsd:attribute ref="Timeout" use="optional" default="120"/>
<xsd:attribute ref="Database" use="optional" default="HLKJobs"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="Project">
<xsd:complexType>
<xsd:sequence>
<xsd:element ref="MultiDeviceTestGroup" minOccurs="0" maxOccurs="1"/>
<xsd:element ref="TestStatusToSkip" minOccurs="0" maxOccurs="unbounded"/>
<xsd:element ref="Product" minOccurs="1" maxOccurs="unbounded"/>
<xsd:element ref="Packages" minOccurs="1" maxOccurs="1"/>
</xsd:sequence>
<xsd:attribute ref="Name" use="required"/>
<xsd:attribute ref="TestCollectionReadLocation" use="optional"/>
<xsd:attribute ref="TestCollectionStatusLocation" use="optional"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="MultiDeviceTestGroup" type="xsd:Boolean"/>
<xsd:element name="TestStatusToSkip">
<xsd:simpleType>
<xsd:restriction base="xsd:NMTOKEN">
<xsd:pattern value="((P|p)(A|a)(S|s)(S|s))|((F|f)(A|a)(I|i)(L|l))|((N|n)(O|o)(D|d)(A|a)(T|t)(A|a))"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:element>
<xsd:element name="Product">
<xsd:complexType>
<xsd:sequence>
<xsd:element ref="Family" minOccurs="1" maxOccurs="unbounded"/>
<xsd:element ref="Machine" minOccurs="0" maxOccurs="unbounded"/>
<xsd:element ref="Parameter" minOccurs="0" maxOccurs="unbounded"/>
</xsd:sequence>
<xsd:attribute ref="Name" use="required"/>
<xsd:attribute ref="OsPlatform" use="required"/>
<xsd:attribute ref="CrashDumpCopyBack" use="optional"/>
<xsd:attribute ref="MachinePool" use="optional"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="Family">
<xsd:complexType>
<xsd:sequence>
<xsd:element ref="Target" minOccurs="1" maxOccurs="unbounded"/>
<xsd:element ref="Parameter" minOccurs="0" maxOccurs="unbounded"/>
</xsd:sequence>
<xsd:attribute ref="Name" use="optional"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="ManualSelectFeature" type="xsd:string"/>
<xsd:element name="Target">
<xsd:complexType>
<xsd:sequence>
<xsd:element ref="ManualSelectFeature" minOccurs="0" maxOccurs="unbounded"/>
<xsd:element ref="Test" minOccurs="0" maxOccurs="unbounded"/>
</xsd:sequence>
<xsd:attribute ref="TargetType" use="required"/>
<xsd:attribute ref="Id" use="required"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="Test">
<xsd:complexType>
<xsd:sequence>
<xsd:element ref="Parameter" minOccurs="0" maxOccurs="unbounded"/>
</xsd:sequence>
<xsd:attribute ref="Id" use="required"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="Parameter">
<xsd:complexType>
<xsd:attribute ref="Name" use="required"/>
<xsd:attribute ref="Value" use="required"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="Machine">
<xsd:complexType>
<xsd:attribute ref="Name" use="required"/>
<xsd:attribute ref="Role" use="optional"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="Packages">
<xsd:complexType>
<xsd:attribute ref="Path" use="required"/>
</xsd:complexType>
</xsd:element>
</xsd:schema>