SuperAPI AI 工具集

run-helix-tests

测试与质量

查看项目

更新于 10-16 10:25

技能介绍

用途

该技能用于从本地机器向 Helix 基础设施提交并监控 .NET MAUI 单元测试。它面向需要验证测试改动、在多个平台(Windows + macOS)上运行测试,或在本地调试 Helix 特定测试失败的用户。注意:它运行的是单元测试(eng/helix.proj),而非设备测试(设备测试使用 helix_xharness.proj)。

主要能力

  • 提交单元测试到 Helix,覆盖 XAML、Core、Essentials、Resizetizer 等测试项目。
  • 支持指定配置(如 Debug)和指定队列提交。
  • 监控已提交作业的状态,支持轮询等待完成。
  • 获取指定工作项的控制台日志,或仅获取失败工作项的日志。
  • 在多个 Helix 队列上并行运行测试。

使用方式

工具要求:使用 pwsh(PowerShell 7+)运行脚本,脚本调用本地 .dotnet/dotnet SDK。

前置条件:

  1. 本地 SDK 已就绪,.dotnet/ 文件夹必须存在。若缺失,运行: dotnet cake --target=dotnet
  2. 首次运行时需编译构建任务:
    • Windows:.\build.cmd -restore -build -configuration Release -projects .\Microsoft.Maui.BuildTasks.slnf
    • macOS/Linux:./build.sh -restore -build -configuration Release -projects ./Microsoft.Maui.BuildTasks.slnf

脚本位于 .github/skills/run-helix-tests/scripts/。

  1. 提交单元测试到 Helix:

    • 提交全部单元测试:pwsh .github/skills/run-helix-tests/scripts/Submit-HelixTests.ps1
    • 指定配置:pwsh .github/skills/run-helix-tests/scripts/Submit-HelixTests.ps1 -Configuration Debug
    • 仅提交到指定队列:pwsh .github/skills/run-helix-tests/scripts/Submit-HelixTests.ps1 -Queue "Windows.10.Amd64.Open"
  2. 监控 Helix 作业状态:

    • pwsh .github/skills/run-helix-tests/scripts/Get-HelixJobStatus.ps1 -JobId <JOB_ID>
    • 轮询等待完成:pwsh .github/skills/run-helix-tests/scripts/Get-HelixJobStatus.ps1 -JobId <JOB_ID> -Wait
  3. 获取 Helix 工作项控制台日志:

    • pwsh .github/skills/run-helix-tests/scripts/Get-HelixWorkItemLog.ps1 -JobId <JOB_ID> -WorkItem <WORK_ITEM_NAME>
    • 仅获取失败工作项:pwsh .github/skills/run-helix-tests/scripts/Get-HelixWorkItemLog.ps1 -JobId <JOB_ID> -FailedOnly

手动快速开始(不使用脚本):

  • Windows:.\helix.cmd
  • macOS/Linux:./helix.sh 这些包装脚本会设置所需环境变量并提交到 Helix。

提交的测试项目(定义于 eng/helix.proj):

  • Controls.Xaml.UnitTests:XAML 解析与编译测试
  • Controls.Core.UnitTests:核心控件单元测试
  • Controls.BindingSourceGen.UnitTests:绑定源生成器测试
  • SourceGen.UnitTests:通用源生成器测试
  • Core.UnitTests:核心框架测试
  • Essentials.UnitTests:Essentials API 测试
  • Resizetizer.UnitTests:图像缩放测试

Helix 队列(并行运行):

  • Windows.10.Amd64.Open:Windows 10 x64
  • osx.15.arm64.maui.open:macOS 15 ARM64

工作流:

  1. 提交测试并记录输出中的作业 ID。
  2. 监控进度:pwsh .github/skills/run-helix-tests/scripts/Get-HelixJobStatus.ps1 -JobId $jobId -Wait
  3. 检查失败:pwsh .github/skills/run-helix-tests/scripts/Get-HelixWorkItemLog.ps1 -JobId $jobId -FailedOnly

调试特定测试失败:

  1. 从 Helix 提交输出获取作业 ID。
  2. 找到失败的工作项名称。
  3. 获取控制台日志:pwsh .github/skills/run-helix-tests/scripts/Get-HelixWorkItemLog.ps1 -JobId <JOB_ID> -WorkItem "Microsoft.Maui.Controls.Xaml.UnitTests.dll"

结果查看:

  • Helix Portal:https://helix.dot.net/api/2019-06-17/jobs/{jobId}
  • 工作项控制台:https://helix.dot.net/api/2019-06-17/jobs/{jobId}/workitems/{workItemName}/console

适用场景

  • 用户要求“在 Helix 上运行测试”。
  • 用户希望在 Helix 基础设施上验证测试改动。
  • 用户要求“在多个平台上测试”(Windows + macOS)。
  • 用户希望在本地调试 Helix 特定的测试失败。
  • 用户询问“Helix 单元测试”(非设备测试)。

限制

  • 仅运行单元测试,不运行设备测试(iOS、Android、MacCatalyst 模拟器/仿真器)。设备测试需使用 helix_xharness.proj,例如:./eng/common/msbuild.sh ./eng/helix_xharness.proj /t:Test /p:TargetOS=ios,并参考 .github/instructions/helix-device-tests.instructions.md。
  • 需要 PowerShell 7+ 和本地 .dotnet SDK。
  • 首次运行需先编译构建任务。

常见问题:

  • “dotnet not found”:运行 dotnet cake --target=dotnet 以准备 SDK。
  • “Build failed”:先运行 build.cmd/build.sh 构建所需项目。
  • “Queue not available”:在 https://helix.dot.net 检查队列状态。
  • “Test timeout”:部分测试执行时间较长,属正常现象。