在 Azure Devops 中使用 CMD 运行测试

问题描述

  • 我需要在 Azure DevOps 中并行运行测试。我没有成功使用 runInParallel 任务中的属性:VSTest@2。测试在 Azure DevOps 中的执行时间比在我的本地机器上执行要长得多。
  • 我尝试过任务:CmdLine@2 来启动我的测试,它们并行运行,并且我在本地的机器上执行相同的时间。在这里,我在发布测试结果时遇到了问题。如果有任何失败测试 - 测试发布不成功,如果所有测试都成功 - 测试发布成功。我想以任何形式发布测试结果。我错过了什么?

谢谢!

我的 yaml:

trigger:
 branches:
   exclude:
     - main
     - tests-stress
     - tests-regression

schedules:
  - cron: "00 04 * * *"
    displayName: Daily Automatic Test Run
    branches:
      include:
        - main
  
pool:
  vmImage: 'windows-latest'

variables:
  solution: '**/*.sln'
  buildplatform: 'Any cpu'
  buildConfiguration: 'Release'

steps:
- task: NuGetToolInstaller@1
  displayName: 'Use NuGet 5.8.0'
  inputs:
    versionSpec: 5.8.0

- task: NuGetCommand@2
  inputs:
    restoreSolution: '$(solution)'

- task: VSBuild@1
  inputs:
    solution: '$(solution)'
    msbuildArgs: '/p:DeployOnBuild=true /p:WebPublishMethod=Package /p:PackageAsSingleFile=true /p:SkipInvalidConfigurations=true /p:DesktopBuildPackageLocation="$(build.artifactStagingDirectory)\WebApp.zip" /p:DeployIisAppPath="Default Web Site"'
    platform: '$(buildplatform)'
    configuration: '$(buildConfiguration)'
    
- task: CmdLine@2
  inputs:
      script: 'dotnet test $(Build.Repository.LocalPath)/Stresstests/bin/Release/netcoreapp3.1/Stresstests.dll --configuration Release --no-build -s $(Build.Repository.LocalPath)/SettingsModelsWorkflows/AllRunSettings/Regression.runsettings --logger trx'
      failOnStderr: false

- task: PublishTestResults@2
  inputs:
    failTaskOnFailedTests: false
    testRunner: VSTest
    testResultsFiles: '**/*.trx'
    searchFolder: '$(Build.Repository.LocalPath)'

Test Run with fail tests

Result of publishing tests with fail and success

All tests are success

enter image description here

解决方法

我认为缺少 condition 属性:

- task: PublishTestResults@2
  inputs:
    failTaskOnFailedTests: false
    testRunner: VSTest
    testResultsFiles: '**/*.trx'
    searchFolder: '$(Build.Repository.LocalPath)'
    condition: succeededOrFailed()

来自 documentation:在这个 YAML 中,即使上一步由于 successedOrFailed() 而失败,PublishTestResults@2 也会运行