如何获取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来获取数据:
- 先调用
BuildsAPI,筛选出去年属于Test构建定义的所有构建ID - 再针对每个构建ID,调用
Test ResultsAPI获取该构建的测试结果统计 - 最后在本地汇总这些数据,得到你需要的按构建、日期分组的测试数量
注意事项
- 直接操作TFS底层数据库时,一定要先备份,避免误操作影响生产环境
- 如果是企业级TFS部署,建议先咨询你的TFS管理员,确认数据保留策略和归档情况
内容的提问来源于stack exchange,提问作者user2523397
相关产品推荐
相关产品推荐

