【问题标题】:VSTS task error when run integration tests in .Net Core 2.1在 .Net Core 2.1 中运行集成测试时出现 VSTS 任务错误
【发布时间】:2019-02-17 01:27:00
【问题描述】:

我在 VSTS 2017 CD 任务中运行 API e2e 测试并在任务中遇到错误(vsTest - End2End 测试)

Unable to find d:\a\r1\a\Project\e2e\bin\Release\netcoreapp2.1\testhost.dll. Please publish your test project and retry.
Unable to find d:\a\r1\a\Project\e2e\obj\Release\netcoreapp2.1\Project.EndToEnd.Integration.Test.deps.json. Make sure test project has a nuget reference of package "Microsoft.NET.Test.Sdk". 

我的 e2e 项目中有以下 nuget 包。

<PackageReference Include="FluentAssertions" Version="5.6.0" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="15.9.0" />
<PackageReference Include="Microsoft.TestPlatform.TestHost" Version="15.9.0" />
<PackageReference Include="Newtonsoft.Json" Version="12.0.1" />
<PackageReference Include="TestStack.BDDfy" Version="4.3.2" />
<PackageReference Include="TestStack.BDDfy.Xunit" Version="1.0.0" />
<PackageReference Include="xunit" Version="2.4.1" />
<PackageReference Include="xunit.core" Version="2.4.1" />
<PackageReference Include="xunit.extensibility.core" Version="2.4.1" />
<PackageReference Include="xunit.extensibility.execution" Version="2.4.1" />
<PackageReference Include="xunit.runner.visualstudio" Version="2.4.1">

我的项目目标框架是.Net Core 2.1

根据this,我相信一切就绪。不确定缺少什么?

VSTS 任务

Build.yaml(部分)

- task: CopyFiles@2
      displayName: "Copy Files to: $(Build.ArtifactStagingDirectory)"
      inputs: 
        contents: "D:/a/1/s/src/xxx.EndToEnd.Integration.Tests/**"
        targetFolder: $(Build.ArtifactStagingDirectory)

- task: DotNetCoreCLI@2
     displayName: "dotnet e2e tests"
     inputs: 
       command: publish
       projects: $(Build.ArtifactStagingDirectory)/src/xxx.EndToEnd.Integration.Tests/xxx.EndToEnd.Integration.Tests.csproj
       arguments : --no-build

    - task: PublishBuildArtifacts@1
      displayName: "Publish End-to-End Tests"
      inputs: 
        artifactName: e2e
        artifactType: container
        pathToPublish: $(Build.ArtifactStagingDirectory)/src/xxx.EndToEnd.Integration.Tests

【问题讨论】:

  • 显然Microsoft.TestPlatform.TestHostMicrosoft.NET.Test.Sdk 支持到.NetCoreApp Version=v1.0 是这个问题吗?
  • 遇到同样的问题,有什么更新吗?我可以找到的关于该主题的所有文档都表明您应该在项目上执行dotnet publish 以解决问题,但是由于我正在尝试根据所有测试项目的构建输出运行测试,所以这不会看起来很实用(我猜你也在做同样的事情?)
  • 我在 github 上为此创建了一个问题:github.com/Microsoft/vstest/issues/1928
  • @WouterRoos 在您提出的上述问题中,答案指定为dotnet publish。你能详细说明一下吗?我添加了我的build.yaml
  • 他们建议使用 dotnet publish 发布所有网络核心测试项目,其中将包括使用 vstest 任务运行测试所需的所有必要二进制文件。我目前使用DotNetCoreCLI@2 步骤,将command 设置为publish,对projects 参数使用minimatch 模式来捕获解决方案中的所有netcore 测试项目,并使用--no-build 作为arguments,因为我的解决方案有那时已经建成。

标签: .net-core azure-devops azure-pipelines-release-pipeline


【解决方案1】:

有两种方法可以解决这个问题。

  1. 发布您的项目。这可以确保测试 dll 和所有依赖项都放在一个文件夹中。您可以提供此发布位置的路径并运行您的测试。

  2. 您可以使用 dotnet cli 任务。如果您使用 YAML 定义添加任务,如下所示:

    - task: DotNetCoreCLI@2
      displayName: 'dotnet test'
      inputs:
        command: test
        projects: '**/*.Tests/*.csproj'
    

参考:Dotnet CLI task

【讨论】:

  • 我尝试了第二部分,即yaml 任务。它尝试将测试作为构建的一部分运行,这不是本意。
【解决方案2】:

build.yaml 下面的任务已经完成了工作

- task: DotNetCoreCLI@2
      displayName: "dotnet e2e tests"
      inputs:
        command: publish
        publishWebProjects: false
        projects: '**/**/*.EndToEnd.Integration.Tests.csproj'
        arguments: --output $(Build.ArtifactStagingDirectory)
        zipAfterPublish: false

    - task: PublishBuildArtifacts@1
      displayName: "Publish End-to-End Tests"
      inputs: 
        artifactName: e2e
        PathtoPublish: '$(Build.ArtifactStagingDirectory)'

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-28
    • 2018-04-21
    • 1970-01-01
    • 2019-07-16
    • 2019-03-28
    相关资源
    最近更新 更多