关于 testdelta
testdelta 是比较基线与当前版本具名测试结果集的命令行工具和 MCP 服务。它按测试名称识别回归、修复、新增、移除及其他状态变化,而不只报告数量。
主要功能
- 01比较基线与当前版本的具名结果
- 02分类回归、修复、新增和移除项
- 03报告未变化及持续失败的测试
- 04按类别确定性排序测试名称
- 05提供易读报告和 JSON 报告
适用场景
- 01审查不同版本间的测试变化
- 02在 CI 结果文件中识别回归
- 03按名称追踪已移除或新失败的测试
MCP 相关
stdio MCP 服务提供 `diff_test_results`,接收结果目录或文件并返回完整 JSON 报告。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
工具
1收录的工具列表 · 更新于 6 天前
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| path | string | 是 | 要检查的目标路径 |
详细介绍
testdelta
对两个命名的测试结果集进行差异比较,并准确报告哪些测试出现回归、哪些已修复、哪些新增、哪些已移除。人类可读报告中的每个类别都必须列出其中的测试名称,不能只给出原始计数。
功能说明
testdelta 将基准结果集与当前结果集进行比较。每个结果集都将测试名称映射到三种状态之一:pass、fail 或 skip。通过比较这两个结果集,它会计算:
- 回归:基准结果集中为
pass或skip,而当前结果集中为fail的测试。 - 已修复:基准结果集中为
fail,而当前结果集中为pass的测试。 - 新增:仅存在于当前结果集中的测试,以及它们在当前结果集中的状态。
- 已移除:仅存在于基准结果集中的测试,以及它们在基准结果集中的状态。
- 仍然失败:两个结果集中的状态均为
fail的测试。 - 未变化:两个结果集中均存在且状态相同的测试,但不包括两个结果集中均为
fail的情况。 - 其他变化:两个结果集中均存在,但状态变化既不属于回归也不属于已修复的测试,例如从
pass变为skip。
每个类别中的名称列表按字母顺序排序,输出具有确定性:不含时间戳,也不采用随机排序。
调查结果会突出人类应优先查看的类别:
- 每个回归对应一条
high级别的调查结果(规则REGRESSION,证据示例:base=pass head=fail)。 - 每个已修复的测试对应一条
info级别的调查结果(规则FIXED)。 - 每个已移除且原本通过的测试对应一条
medium级别的调查结果(规则REMOVED-PASSING)。 - 每个新增且失败的测试对应一条
low级别的调查结果(规则ADDED-FAILING)。
输入格式
包含 base.json 和 head.json 的目录
将 testdelta 指向包含以下两个文件的目录:
base.json:
{
"test-login": "pass",
"test-checkout": "pass",
"test-search": "fail"
}
head.json:
{
"test-login": "fail",
"test-checkout": "pass",
"test-search": "pass"
}
在此示例中,test-login 出现回归,test-search 已修复。
包含 base 和 head 对象的单个文件
单个 JSON 文件可以同时包含两个结果集:
{
"base": {
"test-login": "pass",
"test-search": "fail"
},
"head": {
"test-login": "fail",
"test-search": "pass"
}
}
文件缺失、缺少 base 或 head 对象、JSON 格式错误,以及状态值不是 pass、fail 或 skip,都会导致错误。CLI 会报告错误并以代码 2 退出。
安装
npx @reneturcios/testdelta diff ./results
或者全局安装:
npm install -g @reneturcios/testdelta
CLI 用法
# Human readable report (default target is the current directory)
testdelta diff [path]
# Machine readable JSON report
testdelta diff [path] --json
# Run as an MCP server over stdio
testdelta mcp
# Print the version
testdelta --version
退出代码:
0:判定结果为NO-REGRESSION。1:判定结果为REGRESSED。2:用法错误,包括输入缺失或无效。141:读取方提前关闭了输出管道(在 shell 中相当于 SIGPIPE)。
在人类可读报告中,每个类别最多列出 50 个测试名称。如果某个类别包含更多测试,列表末尾会显示明确的 and N more 行,而不是静默截断。JSON 报告始终包含完整的调查结果列表。
MCP 工具
MCP 服务公开一个工具:
diff_test_results
- 输入:
path,目标目录或单个结果文件。 - 输出:完整的 JSON 报告,包含判定结果、每个类别的计数、调查结果,以及列出各项计数和首批回归测试名称的摘要。
判定规则
REGRESSED:至少存在一项回归,即某个测试在基准结果集中为pass或skip,而在当前结果集中为fail。NO-REGRESSION:不存在回归。新增的失败测试、已移除的测试,以及在基准结果集中已经失败的测试,都不会单独改变判定结果;它们会作为调查结果和计数列出,供人类判断。
限制
- testdelta 处理的是结果文件。它不会运行测试,也不会自行生成
pass、fail或skip值;测试运行器或 CI 作业必须先写入结果集。 - 测试名称匹配采用精确的字符串相等比较。重命名的测试会显示为一个已移除的测试和一个新增的测试,而不是一项变更。
- 仅支持
pass、fail和skip三种状态。进行差异比较前,请将其他测试运行器结果映射到这三种状态之一。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。