You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

dotnet test命令日志仅记录解决方案中最后一个测试项目输出的问题

解决dotnet test合并所有测试项目trx日志的问题

问题原因

当用dotnet test直接运行解决方案时,它会逐个执行每个测试项目,每个项目都会生成独立的trx日志文件。如果指定了统一的LogFileName,后续项目的日志会覆盖前面的,最终只保留最后一个项目的输出。

解决方案

方法1:先生成分散日志,再合并成单个trx

  1. 修改dotnet test命令,生成独立日志
    去掉固定的LogFileName参数,让每个测试项目生成唯一的trx文件:

    dotnet test $ProjectSln --results-directory ./Reports -l "trx" "/p:GeneratePackageOnBuild=False;Configuration=Release;Platform=Any CPU;SolutionDir=${RootDir}" -verbosity:minimal
    

    执行后,./Reports目录下会生成多个trx文件,文件名格式类似TestResults_随机GUID_测试项目名.trx。

  2. 合并trx文件
    用Visual Studio自带的MSTest.exe工具完成合并:

    # 替换为你的VS安装路径,比如C:\Program Files\Microsoft Visual Studio\2022\Community\Common7\IDE
    "C:\Program Files\Microsoft Visual Studio\2022\Community\Common7\IDE\MSTest.exe" /merge ./Reports/*.trx /resultsfile:./Reports/CombinedAllTests.trx
    

    执行后,CombinedAllTests.trx就是包含所有测试项目结果的合并日志。

方法2:自定义脚本合并XML(适合无VS环境)

因为trx本质是XML格式,可写PowerShell脚本手动合并关键节点:

# 示例PowerShell脚本,合并所有trx到一个文件
$combinedPath = "./Reports/CombinedResults.trx"
$firstTrx = Get-ChildItem ./Reports/*.trx | Select-Object -First 1
Copy-Item $firstTrx.FullName $combinedPath

$xml = [xml](Get-Content $combinedPath)
$resultsNode = $xml.TestRun.Results
$definitionsNode = $xml.TestRun.TestDefinitions

Get-ChildItem ./Reports/*.trx | Where-Object { $_.FullName -ne $firstTrx.FullName } | ForEach-Object {
    $trxXml = [xml](Get-Content $_.FullName)
    # 合并测试结果
    foreach ($result in $trxXml.TestRun.Results.ChildNodes) {
        $importedNode = $xml.ImportNode($result, $true)
        $resultsNode.AppendChild($importedNode) | Out-Null
    }
    # 合并测试定义(去重避免重复节点)
    foreach ($definition in $trxXml.TestRun.TestDefinitions.ChildNodes) {
        $existing = $definitionsNode.SelectSingleNode("*[@name='$($definition.name)']")
        if (-not $existing) {
            $importedNode = $xml.ImportNode($definition, $true)
            $definitionsNode.AppendChild($importedNode) | Out-Null
        }
    }
}

$xml.Save($combinedPath)

额外注意

你原命令里的# "-verbosity:minimal"是无效的,#会把后面的参数当成注释,要去掉#,让-verbosity:minimal作为正常命令参数。


内容的提问来源于stack exchange,提问作者ismar agilent

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 08:47:12