【问题标题】:VSTS Error : No test assemblies found matching the patternVSTS 错误:未找到与模式匹配的测试程序集
【发布时间】:2018-12-29 18:28:22
【问题描述】:

我计划使用 VSTS 在一夜之间运行端到端测试。是否有任何指导文件或示例计划来展示如何实施这一点。

基本上,我们在 VSTS 中有 API 项目,我们在主解决方案中有端到端测试项目。所以我们想在一夜之间运行这些测试。所有其他测试都作为构建的一部分运行,但不是 E2E,因为它应该在部署后运行。

这是 build.yaml

resources:
- repo: self
queue:
  name: Hosted VS2017
  demands: 
  - vstest
  - msbuild
  - visualstudio

variables:
  BuildPlatform: 'any cpu'
  BuildConfiguration: 'release'
steps:
- task: NuGetToolInstaller@0
  displayName: 'Use NuGet 4.4.1'
  inputs: 
    versionSpec: 4.4.1


- task: NuGetCommand@2
  displayName: 'NuGet restore'

- task: VSBuild@1
  displayName: 'Build solution'
  inputs:
    msbuildArgs: '/p:DeployOnBuild=true /p:WebPublishMethod=Package /p:PackageAsSingleFile=true /p:SkipInvalidConfigurations=true /p:DesktopBuildPackageLocation="$(Build.ArtifactStagingDirectory)\app.zip" /p:DeployIisAppPath="Default Web Site"'
    platform: '$(BuildPlatform)'
    configuration: '$(BuildConfiguration)'

- task: powershell@2
  inputs:
    targetType: filePath
    filePath: deploy/lib/GetSwaggerByExe.ps1
    arguments: '-RootDirectory "src/SwaggerGenerator"  -OutputFile "deploy/swagger/swagger.json" '
  displayName: 'Create Swagger file'

- task: VSTest@2
  displayName: 'Test Assemblies'
  inputs:
    testAssemblyVer2: |
     **\$(BuildConfiguration)\*test*.dll
     !**\obj\**
     !**\*\*.EndToEnd.Integration.Tests*.dll
    platform: '$(BuildPlatform)'
    configuration: '$(BuildConfiguration)'

- task: PublishTestResults@2
  displayName: 'Publish API Test Results'
  inputs:
    testResultsFormat: VSTest
    testResultsFiles: '**/*.trx'

- task: PublishSymbols@2
  displayName: 'Publish symbols path'
  inputs:
    PublishSymbols: false
  continueOnError: true

- task: PublishBuildArtifacts@1
  displayName: 'Publish Artifact'
  inputs:
    PathtoPublish: '$(Build.ArtifactStagingDirectory)/app.zip'
    ArtifactName: app

- task: PublishBuildArtifacts@1
  displayName: 'Publish deploy scripts'
  inputs:
    PathtoPublish: deploy

    ArtifactName: deploy

我在 CD 中有以下任务

这是因为上述任务步骤中测试文件参数中的路径不正确。如果是这样如何找出正确的路径?我也参考了下面的链接,但没有运气。

构建日志

Project "D:\a\1\s\src\XXXXSearch.Api.sln" (1) is building "D:\a\1\s\src\XXXSearch.EndToEnd.Integration.Tests\XXXSearch.EndToEnd.Integration.Tests.csproj" (6) on node 1 (default targets).
2018-12-23T09:48:50.2267347Z PrepareForBuild:
2018-12-23T09:48:50.2267390Z   Creating directory "bin\Release\".
2018-12-23T09:48:50.2269510Z   Creating directory "obj\Release\".

 Creating "D:\a\1\s\src\XXXXSearch.EndToEnd.Integration.Tests\obj\Release\XXXSearch.EndToEnd.Integration.Tests.csproj.CopyComplete" because "AlwaysCreate" was specified.
2018-12-23T09:48:50.4678280Z _CopyAppConfigFile:
2018-12-23T09:48:50.4678368Z   Copying file from "app.config" to "bin\Release\XXXSearch.EndToEnd.Integration.Tests.dll.config".
2018-12-23T09:48:50.4686244Z CopyFilesToOutputDirectory:
2018-12-23T09:48:50.4686316Z   Copying file from "obj\Release\XXXSearch.EndToEnd.Integration.Tests.dll" to "bin\Release\XXXSearch.EndToEnd.Integration.Tests.dll".
2018-12-23T09:48:50.4691372Z   XXXSearch.EndToEnd.Integration.Tests -> D:\a\1\s\src\XXXSearch.EndToEnd.Integration.Tests\bin\Release\XXXSearch.EndToEnd.Integration.Tests.dll
2018-12-23T09:48:50.4693481Z   Copying file from "obj\Release\XXXSearch.EndToEnd.Integration.Tests.pdb" to "bin\Release\XXXSearch.EndToEnd.Integration.Tests.pdb".
2018-12-23T09:48:50.4755662Z Done Building Project "D:\a\1\s\src\XXXSearch.EndToEnd.Integration.Tests\XXXSearch.EndToEnd.Integration.Tests.csproj" (default targets)

build.yaml文件中添加了以下任务

- task: CopyFiles@2
  inputs:
    contents: D:/a/1/s/src/XXX.SiteSearch.EndToEnd.Integration.Tests/bin/Release/XXX.SiteSearch.EndToEnd.Integration.Tests.dll
    targetFolder: $(Build.ArtifactStagingDirectory)

- task: PublishBuildArtifacts@1 
  displayName: 'Publish E2E Artifact' 
  inputs: 
    PathtoPublish: 'D:/a/1/a/src/XXX.SiteSearch.EndToEnd.Integration.Tests/bin/Release/XXX.SiteSearch.EndToEnd.Integration.Tests.dll' 
    ArtifactName: e2e

Solution-1

Solution-2

Solution-3

【问题讨论】:

    标签: azure-devops azure-pipelines-release-pipeline


    【解决方案1】:

    查看您要发布的工件的任务定义:

    - task: PublishBuildArtifacts@1
      displayName: 'Publish Artifact'
      inputs:
        PathtoPublish: '$(Build.ArtifactStagingDirectory)/app.zip'
        ArtifactName: app
    
    - task: PublishBuildArtifacts@1
      displayName: 'Publish deploy scripts'
      inputs:
        PathtoPublish: deploy
    

    你在哪里发布你的测试程序集?回答:你没有。

    如果您不将某些内容作为工件发布,则它不会在您的发布中下游可用。

    解决方案是将您的测试程序集(和其他任何相关文件)作为单独的工件发布。

    【讨论】:

    • 正如您正确提到的那样,没有将test assemblies 放入$(BuildConfiguration),因为不会像问题中提到的那样将E2E 作为构建的一部分运行。您能否详细说明您的评论,即“在您的构建中添加一个步骤以运行 get-childitem $env:SYSTEM_DEFAULTWORKINGDIRECTORY -rec 的 PowerShell 脚本”
    • 添加了与 EndToEnd 测试相关的构建日志部分,这表明 EndtoEnd 测试 dll 已复制。那么我在 CD 任务(VsTest - End2End 测试)上的路径不正确吗?
    • 有没有办法将这些测试程序集添加到上述build.yaml 中提到的现有app.zip 中?我的其他困惑是,在构建日志中这是什么意思2018-12-23T09:48:50.4691372Z XXXSearch.EndToEnd.Integration.Tests -> D:\a\1\s\src\XXXSearch.EndToEnd.Integration.Tests\bin\Release\XXXSearch.EndToEnd.Integration.Tests.dll Becuz 我仍然看不到 app.zip 文件中的那些 dll。对不起,我对这个领域很陌生。
    • @SMPH 您不想将它们添加到app.zip。那是为了部署;你不部署测试。添加另一个发布工件步骤并将测试作为单独的工件发布。
    • @SMPH 该程序集不会在$(Build.ArtifactStagingDirectory) 中,因为您没有告诉它将所有构建输出放在那里,只是 zip 文件。查看您的构建输出:D:\a\1\s\src\XXXSearch.EndToEnd.Integration.Tests\bin\Release\XXXSearch.EndToEnd.Integration.Tests.dll。如果测试依赖于特定于单个服务器的某些东西(例如消息队列),您只需要部署测试。如果它们只是普通的 Selenium/Coded UI 测试或集成测试,您可以从任何可以与相应服务器通信的私有代理运行它们。
    猜你喜欢
    • 2018-05-19
    • 1970-01-01
    • 1970-01-01
    • 2020-09-06
    • 2023-03-31
    • 2022-09-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多