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

如何获取TFS各构建的单元测试数量?当前仅能查看近4天数据

解决TFS中获取历史单元测试数量的问题

看起来你遇到的情况是TestResultView这个内置视图只返回最近四天的数据,没法拿到去年的测试结果统计对吧?这其实挺常见的,我来帮你分析原因和可行的解决办法:

为什么TestResultView只有近期数据?

TFS的很多内置视图(包括TestResultView)是为实时/近期数据查询优化的,默认会只保留较短时间范围内的数据(比如缓存策略或者数据归档机制导致),所以它并不适合查询历史数据。你没选错视图,但它的定位本来就不是全量历史查询。

可行的替代方案

1. 直接查询TFS底层核心表

TFS的测试结果其实存在底层的物理表中,这些表会保留全量历史数据(除非被手动清理)。你可以联合查询以下两个核心表:

  • tbl_TestResult:存储所有测试结果的核心数据,包含BuildId、Outcome、ResultDate等关键字段
  • tbl_Build:关联构建的基本信息,用来过滤指定的BuildDefinitionName

这里给你优化后的查询语句(用CASE语句替代UNION ALL,更简洁高效):

SELECT 
    b.BuildId,
    YEAR(tr.ResultDate) AS year,
    MONTH(tr.ResultDate) AS month,
    DAY(tr.ResultDate) AS day,
    SUM(CASE WHEN tr.Outcome = 'Passed' THEN 1 ELSE 0 END) AS Passed,
    SUM(CASE WHEN tr.Outcome = 'Failed' THEN 1 ELSE 0 END) AS Failed
FROM tbl_TestResult tr
JOIN tbl_Build b ON tr.BuildId = b.BuildId
WHERE b.BuildDefinitionName = 'Test'
  -- 筛选去年的数据,这里用DATEADD自动计算去年的年份
  AND YEAR(tr.ResultDate) = YEAR(DATEADD(YEAR, -1, GETDATE()))
GROUP BY b.BuildId, YEAR(tr.ResultDate), MONTH(tr.ResultDate), DAY(tr.ResultDate)

2. 检查TFS的数据保留策略

如果底层表也没有去年的数据,那可能是TFS的数据保留策略设置导致历史数据被清理了。你可以通过以下步骤检查:

  • 打开Team Foundation Administration Console
  • 找到你的TFS实例,进入Application Tier > Data Retention
  • 查看测试结果、构建记录的保留期限,确认是否被设置为仅4天
  • 如果是,调整保留期限后,可能需要从TFS的归档存储中恢复历史数据

3. 使用TFS REST API(推荐生产环境用)

如果不想直接操作底层数据库(微软官方其实不推荐直接查询底层表,因为版本更新可能导致表结构变化),可以用TFS的REST API来获取数据:

  • 先调用Builds API,筛选出去年属于Test构建定义的所有构建ID
  • 再针对每个构建ID,调用Test Results API获取该构建的测试结果统计
  • 最后在本地汇总这些数据,得到你需要的按构建、日期分组的测试数量

注意事项

  • 直接操作TFS底层数据库时,一定要先备份,避免误操作影响生产环境
  • 如果是企业级TFS部署,建议先咨询你的TFS管理员,确认数据保留策略和归档情况

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:38:00