【问题标题】:Run tests in parallel using VStest not working使用 VStest 并行运行测试不起作用
【发布时间】:2020-12-14 12:21:50
【问题描述】:

我正在尝试使用 VSTest Task 实现并行测试,如下文所述。 https://docs.microsoft.com/en-us/azure/devops/pipelines/test/parallel-testing-vstest?view=azure-devops

简要说明我在做什么:

我在同一台服务器上安装了两个自托管代理。 当我使用单个代理选项(其中一个)运行测试时,它运行时没有任何问题。 但是当我应用多代理选项时 a) 基于测试和代理数量的简单切片 要么 b) 基于测试组件的切片 我收到以下错误。 ##[error]'Discovery' 类型的切片是'Aborted',因为错误:System.Exception: No tests were found from the specified test sources。

Error message

提前致谢, 乌达亚·巴斯卡。

【问题讨论】:

  • 你能展示你的 YAML 用于测试部分吗?具体来说,您如何上传然后下载您的程序集?它可能没有找到任何要测试的东西,因为在代理上它派生到您的测试程序集不存在。
  • 嗨@T2PS,下面是两个YAML,希望它足够了。发布工件 YAML 步骤:-任务:PublishBuildArtifacts@1 displayName:'Publish Artifact:Packages' 输入:PathtoPublish:'$(Build.ArtifactStagingDirectory)\Packages' ArtifactName:Packages Download Build Artifacts YAML:步骤:-任务:DownloadBuildArtifacts@0 displayName :“下载构建工件”输入:工件名称:包。
  • 嗨@T2Ps,仅供参考,我的源代码控制是“TFVC”。我的构建管道使用的是经典编辑器。这是 YAML 屏幕截图。 Upload Artifact , Download_Build_Artifacts
  • 抱歉,我忽略了另一个细节:YAML 用于您如何调用测试?
  • 嗨@T2PS 这里是VSTest YAML YAML 脚本太长了不能放在这里,如果需要 sript 请告诉我,然后我将分两部分发送.. 谢谢。

标签: devops vstest parallel-testing


【解决方案1】:

根据 cmets 中的 YAML,这看起来像是磁盘上的路径问题,来自任务帮助参考。

  • PublishBuildArtifacts task 的默认路径为$(Build.ArtifactStagingDirectory);您已将其覆盖为$(Build.ArtifactStagingDirectory)\Packages。如果在查看构建的工件时设置正确,您应该能够下载从该位置上传的测试程序集及其依赖项。
  • DownloadBuildArtifacts task 有一个默认的 downloadPath $(System.ArtifactsDirectory),YAML 视图表明您尚未覆盖。
  • VSTest task 的默认searchPath$(System.DefaultWorkingDirectory); YAML 视图表明您已将其设置为 $(Agent.BuildDirectory)\Bin

此处的确切行为可能取决于您的代理是如何为其磁盘路径设置的。 $(Agent.BuildDirectory) 通常是代理的基本工作路径中编号的子目录之一。有趣的是,虽然DownloadBuildArtifacts' 文档说$(System.ArtifactsDirectory) 是它的默认值,但这并没有出现在当前的predefined variables list 中;如果它实际上是指$(Build.ArtifactStagingDirectory),则默认为“numbered_build_subdirectory\a”。

由于您的测试搜索路径将扩展到“numbered_build_subdirectory\Bin”,我希望(假设文件已正确发布)它们被下载到位于搜索路径之外的位置测试任务正在定位,这可以解释为什么没有找到测试。

我建议将DownloadBuildArtifactsVSTest 的下载和搜索路径修改为相同且相对于基本目录,例如:$(Agent.BuildDirectory)\Tests(或任何适合您的管道的路径)。

【讨论】:

  • 嗨@T2PS,感谢您详细的回复。这里有一个问题,使用相同的以下磁盘路径变量,单代理方案运行良好。我分别尝试了两个代理。 $(Build.ArtifactStagingDirectory)\Packages $(System.ArtifactsDirectory) $(Agent.BuildDirectory)\Bin 我又做了一个实验:手动验证动态磁盘路径( C:\DynamicsSDK\VSOAgent_work\5\Bin )并运行 vstest。 console.exe 手动针对测试 DLL。 令人惊讶的是,它运行良好。问题:当我们使用多代理时,我希望同一个 vstest.console 负责运行 tst。
  • 是的,我希望代码是一样的。场景的不同之处在于,在单个代理中,您可能会将初始构建中的文件留在 \Bin 中,而测试任务正在拾取这些文件。在并行场景中,测试文件仅由于工件下载而存在(特别是如果在作业开始之前清理了工作目录),因此它们被下载到的路径需要与 vstest.console.exe 将搜索的路径相同。此外,当构建完成(通过或失败)时,您可以从 webUI 工件列表下载二进制文件吗?
  • 嗨@T2PS,非常感谢您对此的宝贵跟进。我尝试根据您的建议更改变量路径,不幸的是,存在相同的错误。事实上,所有这些变量都指向同一个位置(Agent.BuildDirectory 和 System.ArtifactsDirectory)。回答您的第二个问题,是的,我可以从 artifucats 链接访问下载二进制文件。下周是否可以进行一次屏幕共享通话,以便您正确引导。提前致谢。
猜你喜欢
  • 2015-11-20
  • 2017-04-22
  • 2013-02-05
  • 1970-01-01
  • 1970-01-01
  • 2015-09-11
  • 2020-08-13
  • 2020-01-18
  • 1970-01-01
相关资源
最近更新 更多