编辑:澄清后,我将我的评论分为两部分:您的自定义测试用例,然后是我之前在此处的评论的其余部分,适用于使用标准单元测试框架的情况。
备选方案 1:基于分析测试日志文件的自定义测试解决方案
首先你需要一个脚本,例如PowerShell 脚本,它解释日志文件,确定测试是否失败,并相应地设置 vso task.complete 结果属性(参见下面的示例)。
我们称这个文件为evaluate-test-results.ps1,假设它解释了某种testResults.json 数据,包含一个名为haveTestsPassed 的重要属性,决定测试是否通过:
evaluate-test-results.ps1 文件内容:
<#
.SYNOPSIS
Checks test results.
#>
param (
[Parameter(Mandatory = $true)]
[string]$testResultsJson
)
try {
$testResults = $testResultsJson | ConvertFrom-Json
if($testResults.haveTestsPassed)
{
Write-Host "##vso[task.complete result=Succeeded;]Tests have successfully passed"
}
else
{
Write-Host "##vso[task.complete result=Failed;]Tests have NOT passed"
}
}
catch {
Write-Host "##vso[task.complete result=Failed;]Error while parsing test results from JSON log file..."
}
然后,您可以在PowerShell@2 任务中使用此脚本,如下所示:
- task: PowerShell@2
displayName: "PowerShell: Evaluate test results from testResults.json"
inputs:
targetType: filePath
filePath: 'evaluate-test-results.ps1'
arguments: "-testResultsJson 'testResults.json'"
failOnStderr: true
注意:
您也可以在 haveTestsPassed 为 false 时抛出标准错误,或者,这要归功于 failOnStderr 属性。不过上面这个解决方案比较正式。
备选方案 2:标准单元测试框架的解决方案
如果 dotnet test 命令配置为运行测试,则解决方案更简单
如果您的测试绑定到 dotnet test 命令,例如使用 xUnit,则简单的解决方案是这样的。在这种情况下,如果您的一个单元测试失败,则默认情况下此任务将失败,而无需 PublishTestResults@2 任务:
# This task will run the 'dotnet test' command, as if you would from a CLI
- task: DotNetCoreCLI@2
displayName: Run and publish tests
inputs:
command: 'test'
如果不能使用dotnet test 命令
在这种情况下,您必须使用PublishTestResults@2 任务来解释测试结果。相应地设置您的测试框架/工具和测试结果文件。一定要设置failTaskOnFailedTests: true
- task: PublishTestResults@2
inputs:
testRunner: VSTest # or else...
testResultsFiles: '**/*.trx' # or else...
failTaskOnFailedTests: true