在.Net Core 2.1中运行集成测试时VSTS任务错误

时间:2019-02-17 01:27:00

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

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

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任务

enter image description here

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

2 个答案:

答案 0 :(得分:1)

有两种方法可以处理此问题。

  1. 发布您的项目。这样可以确保将测试dll和所有依赖项放入文件夹中。您可以提供该发布位置的路径并进行测试。

  2. 您可以使用dotnet cli任务。如果您使用的是YAML定义,请按照以下步骤添加任务:

- task: DotNetCoreCLI@2
        displayName: 'dotnet test'
        inputs:
          command: test
          projects: '<path to sln>'

引用:Dotnet CLI task

答案 1 :(得分:0)

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)'