
如何用 RunHelix.ps1 将 aspnetcore 的单个测试项目提交到 Helix 运行并查看结果【免费下载链接】aspnetcoreASP.NET Core is a cross-platform .NET framework for building modern cloud-based web applications on Windows, Mac, or Linux.项目地址: https://gitcode.com/GitHub_Trending/as/aspnetcore在 aspnetcore 仓库中改动代码后你常常需要验证某个测试项目在 Windows、Linux、macOS 等多种系统上的真实表现。Helix 是 aspnetcore 使用的分布式测试平台仓库会为每个测试项目构建一个包含 publish 目录的 payload把任务发送到各 OS 的队列例如Windows.10.Amd64.ClientRS4.VS2017.Open、OSX.1100.Amd64.Open、Ubuntu.1804.Amd64.Open由 Helix 负责解压、运行测试并回报结果。本文只解决一个任务把单个测试项目提交到 Helix 运行并查看运行结果。准备环境先完成仓库的 restoreRunHelix.ps1依赖仓库固定的 .NET SDK。global.json 锁定的 SDK 版本为11.0.100-rc.1.26420.103当找不到 SDK 时的提示是The .NET SDK could not be found, run ./restore.cmd or ./restore.sh first.所以在仓库根目录先执行Windows 用.cmdLinux/macOS 用.sh./restore.sh它会安装仓库所需工具并把 SDK 放到.dotnet目录下global.json的sdk.paths指定了.dotnet。提交单个测试项目到 Helixdocs/Helix.md 给出的针对单个测试项目的运行方式是.\eng\scripts\RunHelix.ps1 -Project path\mytestproject.csproj其中path\mytestproject.csproj需要替换为你要跑的测试项目的实际路径例如某个src\area\test\下的*.csproj。脚本会 restore、publish 该项目含在 Helix 机器上运行测试装配所需的引导脚本并把任务上传到 Helix。RunHelix.ps1 的实际行为是调用dotnet msbuild project /t:Helix并带上/p:_UseHelixOpenQueuestrue /p:DoNotRequireSharedFxHelixtrue等参数/t:Helix目标定义在 Helix.targets 中最终转发到 helix.proj。脚本参数来自脚本头部的注释参数说明-Project必填要发布并发送到 Helix 的测试项目-HelixQueues目标队列多个用或;分隔。默认值Windows.10.Amd64.Server20H2.Open。注释中列出的可用队列示例包括Debian.11.Amd64.Open、AlmaLinux.8.Amd64.Open、Ubuntu.2004.Amd64.Open、OSX.1100.Amd64.Open、Windows.11.Amd64.Client.Open等-RunQuarantinedTests默认不运行隔离quarantined测试加上该开关后只运行隔离测试-TargetArchitecture构建架构x64、x86、arm64默认x64其余参数作为额外的 MSBuild 参数透传MSBuildArguments注意两点队列的最新清单以 Helix.Common.props 为准脚本注释中的队列示例可能滞后于该文件。脚本启动时会打印三条提示引自脚本源码If running tests that need the shared Fx, run ./build -pack -all before this.——如果测试依赖共享框架包先执行全量打包构建If everything is up-to-date, add /p:NoBuildtrue to this command.——若一切已是最新可加/p:NoBuildtrueOr, if only the test project is out-of-date, add /p:BuildProjectReferencesfalse.——若只有测试项目过期可加/p:BuildProjectReferencesfalse。例如只发送到单个 Linux 队列并跳过重新构建前提是产物已最新.\eng\scripts\RunHelix.ps1 -Project src\Antiforgery\test\YourTestProject.csproj -HelixQueues Ubuntu.2004.Amd64.Open -TargetArchitecture x64 /p:NoBuildtrueYourTestProject.csproj按你实际要跑的测试项目替换。查看运行结果提交后控制台会逐队列输出日志。docs/Helix.md 给出的文档示例输出是这样的Sending Job to Ubuntu.1804.Amd64.Open... Sent Helix Job; see work items at https://helix.dot.net/api/jobs/c1b425c8-0fef-4cba-9dee-29344d7a61b8/workitems?api-version2019-06-17 Waiting for completion of job c1b425c8-0fef-4cba-9dee-29344d7a61b8 on Ubuntu.1804.Amd64.Open Job c1b425c8-0fef-4cba-9dee-29344d7a61b8 on Ubuntu.1804.Amd64.Open is completed with 138 finished work items.以上为文档示例实际的 jobId 和 work item 数量随每次运行变化。据此判断运行状态看到Sent Helix Job; see work items at https://helix.dot.net/api/jobs/jobId/workitems?api-version2019-06-17说明任务已发送jobId就是后面查详情用的 jobId看到Job jobId on queue is completed with N finished work items说明该队列的任务已全部跑完若有 work item 失败MSBuild 会报error : Work item Microsoft.AspNetCore.Identity.Test--net8.0 in job 53e2ca23-9efd-4299-8a8f-d9271265aeaa has failed. Failure log: https://helix.dot.net/api/2019-06-17/jobs/53e2ca23-9efd-4299-8a8f-d9271265aeaa/workitems/Microsoft.AspNetCore.Identity.Test--net8.0/console该输出同样摘自 docs/Helix.md 的文档示例。Failure log后面的/console链接直接给出失败 work item 的控制台日志。进一步下钻时把HelixJobId和 work item 名拼进 Helix web API 即可看到更多信息入口URL 模式来自 docs/Helix.mdjobId、workitemname换成你日志里的实际值https://helix.dot.net/api/2019-06-17/jobs/jobId/workitems/workitemname文档还给出了一条完整的 payload 检查路径从 work items 链接去掉/workitems得到 jobs 链接 → 打开details链接 → 在返回的 JSON 中点JobsList→ 再点其中的PayloadUrl值即可下载该任务的 payload zip检查测试作业打包了哪些内容。测试失败时如何本地复现与排查docs/Helix.md 给出了本地模拟 Helix 上大多数测试运行方式的做法dotnet publish cd the publish directory dotnet vstest My.Tests.dll需要理解 Helix 与本地的一个关键差异Helix payload 只包含 publish 目录里的内容。凡是测试还依赖 publish 之外的文件例如仓库里的脚本或资产就必须显式加进 payload否则测试在 Helix 上会失败。做法是在测试项目的 csproj 里使用HelixContent项ItemGroup HelixContent Include$(RepoRoot)src\KeepMe.js/ HelixContent Include$(RepoRoot)src\Project\**/ /ItemGroup默认这些文件放到根目录如需放到别的目录可用Link或LinkBase属性指定路径ItemGroup HelixContent Include$(RepoRoot)src\KeepMe.js Link$(MSBuildThisFileDirectory)\myassets\KeepMe.js/ HelixContent Include$(RepoRoot)src\Project\** LinkBase$(MSBuildThisFileDirectory)\myassets/ /ItemGroup另外两个与本次提交直接相关的边界不想让某个项目或测试上 Helix 时整个项目可在 csproj 中设BuildHelixPayloadfalse/BuildHelixPayload该属性的默认值跟随IsTestProject单个测试可用[SkipOnHelix(url to github issue)]跳过文档要求为任何被跳过的测试开 issue 并把链接写在注释里。Helix.targets 中有一个注释值得留意当测试依赖TestDependsOnAspNetPackages时使用通配符收集包用RunHelix.ps1提交时可能漏掉必要包此时构建不会 fail fast测试会在 Helix 代理上失败——遇到本地能过、Helix 上报缺包/缺文件类失败时优先考虑这一点。跑完后如果同一测试项目在目标队列上持续失败且无法定位docs/Helix.md 提到的下一步是检查失败 work item 的console日志要彻底确认 payload 内容就走上面 payload 检查路径下载 zip 查看。【免费下载链接】aspnetcoreASP.NET Core is a cross-platform .NET framework for building modern cloud-based web applications on Windows, Mac, or Linux.项目地址: https://gitcode.com/GitHub_Trending/as/aspnetcore创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考