如何筛选耗时超2毫秒的.NET单元测试及生成测试分析报告?
针对单元测试耗时分析的解决方案
1. 筛选耗时超过2毫秒的测试
方法一:直接过滤命令行输出(PowerShell)
dotnet test的详细输出会包含每条测试的耗时信息,你可以用PowerShell的字符串匹配和数值过滤直接提取符合条件的测试:
dotnet test -l "console;verbosity=detailed" | Select-String -Pattern "Test Duration: (\d+\.\d+) ms" | Where-Object { [double]$_.Matches.Groups[1].Value -gt 2 }
这个命令会:
- 执行测试并输出详细日志
- 匹配所有包含
Test Duration: X.X ms的行 - 筛选出耗时数值大于2的测试条目
方法二:解析TRX日志文件
如果需要更精准的分析,可以先生成TRX格式的测试日志,再解析XML内容筛选:
- 生成TRX日志:
dotnet test -l "trx;LogFileName=test_results.trx" - 用PowerShell解析日志并筛选:
$trxContent = [xml](Get-Content test_results.trx) # 筛选耗时超过2ms的测试(TRX中Duration格式为PT0H0M0.003S,转换为秒后大于0.002即超2ms) $longRunningTests = $trxContent.TestRun.Results.UnitTestResult | Where-Object { $durationSec = [double]$_.Duration.Replace("PT", "").Replace("H", ".").Replace("M", ".").Replace("S", "") $durationSec -gt 0.002 } # 输出测试名称和耗时 $longRunningTests | Select-Object TestName, Duration
2. 生成带指标与分析的测试报告
使用ReportGenerator工具
这是.NET生态中常用的测试报告生成工具,支持将TRX、JUnit等格式的日志转换为可视化的HTML报告,包含耗时统计、通过率、测试趋势等指标:
- 全局安装工具:
dotnet tool install -g dotnet-reportgenerator-globaltool - 生成TRX测试日志(同方法二第一步)
- 生成HTML报告:
reportgenerator -reports:test_results.trx -targetdir:test_report -reporttypes:Html
生成的test_report目录中,打开index.html就能看到完整的测试分析报告,其中可以按耗时排序查看所有测试,还能看到每个测试类、命名空间的整体耗时分布。
其他内置选项
如果不需要复杂分析,dotnet test本身支持生成HTML报告(部分测试框架支持),比如:dotnet test -l "html;LogFileName=test_report.html"
不过这个内置报告的分析维度较少,更适合快速查看结果。
内容的提问来源于stack exchange,提问作者mahmood ansari
相关产品推荐
相关产品推荐

