test · git:20260923.8eb4b09 · 2026-09-23 · sha256 63bf8d648f4e1980

test git:20260923.8eb4b09A

Immutable. This exact content never changes and is served at /api/v1/blob/63bf8d648f4e1980.

---
name: test
description: 用户要求测试、E2E、回归、复现缺陷,或要判断一个功能、修复、迁移能不能交付时使用。先写测试计划,再从真实入口走到结果真正生效的地方执行,最后按计划逐项报告。写代码过程中跑一下单测、编译这类顺手检查不用;判断代码写得好不好用 review。
---

# test

测试是想办法证明它是错的,而不是替实现找通过的理由。一路测到结果真正生效、或被真实使用方看到的地方:请求成功、命令退出 0、页面提示完成、单测变绿,都只证明它们自己那一层。

## 先写计划

计划从这些来源长出来:`.agents/tasks/<任务>/shape.md` 的目标和验收标准(如果有)、原始缺陷、实际 diff、公共接口,以及受影响的调用方和消费者。不从通用检查清单长出来。

先写清被测的对象和环境:哪个版本或构建、哪个环境、用什么身份和数据、在哪里观察结果。每个关键场景一个用例,写到另一个人不用现场补细节就能执行:

- 为什么测,失败会影响谁;
- 具体的输入、请求或操作步骤;
- 期望的结果,以及系统最终应处于什么状态;
- 在哪里、用什么确认这个最终状态;
- 测试会改动哪些数据,怎样清理。

执行前反过来检查计划:如果产品其实是错的,这些用例有没有可能全部通过?常见的漏洞是只验证了操作被触发、没验证最终状态,或者漏了旧的调用方、权限、异步消费者和失败恢复路径。

非平凡的测试先把计划给用户看一眼,然后开始执行;执行中发现计划没覆盖的风险,补进计划,已有用例不删。

## 执行

先确认实际测到的是预期的版本、进程、数据和环境。按承诺对应的入口来测:承诺的是界面行为,就亲自走界面;API、数据库、日志和下游系统用来确认最终状态,不能代替界面上的操作。

每个用例先记下实际做了什么、看到了什么,再给结论。失败和重跑都保留,不用后来的通过覆盖先前的失败,也不根据计划或记忆补写没发生过的步骤。发现产品问题时先留下可以复现的证据;只有用户要求或授权了修复才去修,修完按受影响范围重测。某个条件不满足时,只暂停依赖它的用例,其余继续。测试中创建的数据、进程和配置,清理后确认已经清掉,保留的写明。

## 报告

计划里的每个用例在报告中都有且只有一个结果:

- **通过**:直接证据支持全部预期;
- **失败**:实际行为和预期不符;
- **未完成**:没能完整执行或确认,写明原因,例如环境不可用、被其他失败挡住、主动跳过或缺少最终状态的证据。

总体结论只看关键用例的证据,不看通过率:给出能不能交付,列出失败项、未完成项和因此还不能证明的范围,以及测试留下的数据或进程。

## 保存

简单改动、一个检查就能完整证明的,直接在对话里报告测了什么、结果如何、还有什么没证明。需要计划的测试写到 `.agents/tasks/<任务>/test.md`,先写"计划"一节,执行后在同一文件补"报告"一节;截图、日志、请求和响应等原始材料放在同目录的 `evidence/` 下,正文说明它们证明了什么。

一次性的测试脚本属于这次测试的证据;要把自动化测试长期加进产品代码,属于实现工作,按当前授权处理。