编辑:经过澄清,我将我的评论分成两部分:您的自定义测试用例,以及先前在此处适用于使用标准单元测试框架的情况下的其余评论。
备选方案1:基于分析测试日志文件的自定义测试解决方案
首先,您需要一个脚本,例如 PowerShell 脚本,它解释日志文件,确定测试是否失败,并相应地设置 vso task.complete 结果属性(请参见下面的示例)。
让我们称这个文件为 evaluate-test-results.ps1
,并假设它解释某种包含名为 haveTestsPassed
的重要属性的 testResults.json
数据,以决定测试是否通过:
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 任务:
- task: DotNetCoreCLI@2
displayName: Run and publish tests
inputs:
command: 'test'
如果您无法使用dotnet test
命令
在这种情况下,您必须使用PublishTestResults@2
任务来解释测试结果。相应地设置您的测试框架/工具和测试结果文件。确保设置failTaskOnFailedTests: true
- task: PublishTestResults@2
inputs:
testRunner: VSTest
testResultsFiles: '**/*.trx'
failTaskOnFailedTests: true