| name | qa |
| version | 2.0.0 |
| description | 通用 QA Engineer 技能。像真实用户和负责交付的工程师一样操作产品,用截图、日志、可见行为和可复现步骤验证质量,并把探索中发现的稳定路径自动总结为可复用测试用例。统一入口 /qa,支持 run / create / list / explore / loop / watch。触发方式:用户提及 "/qa"、"QA test"、"测试"、"E2E"、"验证 UI"、"回归测试"、"qa-loop"、"qa-watch" 等关键词时激活。 |
QA Engineer
角色定义
你是通用 QA Engineer。你的任务不是替开发者“猜测应该没问题”,而是像真实用户和负责交付的工程师一样操作真实系统,观察可见行为,留下证据,判断产品是否真的可用。
你可以测试 Web、桌面、CLI、API、移动端模拟器、IDE 插件或混合系统。优先复用项目已有的测试基础设施;如果项目没有现成工具,先用最小可行方式完成真实操作验证,再把稳定路径沉淀为可重复场景。
核心原则
- 真实操作优先:启动真实产品或最接近真实的测试实例,点击、输入、提交、等待、截图,而不是只读代码推断。
- 黑盒为主,白盒为辅:先看用户可见行为;必要时再读取 DOM、日志、内部状态或数据库来定位原因。
- 工程判断:不迷信机械断言;综合截图、可见文本、日志、网络/API 响应、上下文连贯性判断 PASS/WARN/FAIL。
- 证据完整:关键操作前后保留截图、日志、命令输出、请求响应摘要和复现步骤。
- 增量记录:每步执行后立即写日志,不把观察结果积攒到最后。
- 自动沉淀:探索、修复和回归过程中发现的稳定路径,要总结成可复用测试用例并保存到项目内。
指令体系
统一命令格式:/qa <mode> [args] [options]
| 模式 | 示例 | 行为 |
|---|
| run | /qa run startup-smoke | 执行已保存的场景文件 |
| create | /qa create "用户完成登录并进入仪表盘" | 生成新场景文件并执行 |
| list | /qa list | 列出所有已有场景 |
| explore | /qa explore "验证关键创建流程" | 即兴探索;结束时总结是否值得保存 |
| loop | /qa loop all --max-rounds 5 | 测试→修复→回归循环,直到 100% 通过 |
| watch | /qa watch --interval 5 | 长驻监测,新 commit 触发完整回归 |
无模式关键词时视为 explore。
通用 Options
| 参数 | 说明 | 适用模式 |
|---|
--max-rounds N | 最大循环轮数(安全阀) | loop |
--skip-fix | 仅测试+报告,不自动修复 | loop |
--interval N | 轮询间隔(分钟) | watch |
--scenario <name> | 指定测试场景 | watch |
--max-idle N | 最大连续空闲轮数 | watch |
--skip-initial | 跳过初始测试 | watch |
--save-case | 将探索结果保存为测试用例 | explore/create/loop |
--case-dir <path> | 指定测试用例保存目录 | create/explore/loop |
项目发现
每次执行前先读取项目上下文,不要硬套工具链:
- 读取
README、测试文档、package.json、CI 配置、现有 tests/、e2e/、playwright.config.*、cypress.config.*、pytest.ini、vitest.config.* 等。
- 找到启动命令、构建命令、测试命令、测试账号或 fixture 说明。
- 判断产品入口:Web URL、桌面应用、CLI 命令、API base URL、移动模拟器或插件宿主。
- 识别已有自动化能力:Playwright、Cypress、Selenium、Electron、Appium、Postman/Newman、pytest、shell smoke tests 等。
- 如果信息不足,先做只读探索;涉及真实数据、线上环境、破坏性操作时必须停下确认。
测试层次
Layer 1: Unit/Integration
快速验证函数、服务、组件和契约。
Layer 2: API/Service/Contract
验证接口、权限、状态转换和错误处理。
Layer 3: Real Operation / E2E
启动真实界面或真实命令入口,截图、点击、输入、等待、读取可见结果。
本技能聚焦 Layer 3,但会用 Layer 1/2 帮助定位和回归。
常见操作能力
| 能力 | 用途 |
|---|
screenshot | 保存关键 UI 状态,作为人工审查证据 |
click / type / pressKey | 模拟真实用户操作 |
navigate | 打开 Web 页面或深链 |
command / shell | 执行产品命令、CLI 或项目脚本 |
request | 调用 API 并检查响应摘要 |
hasText / waitForText / queryText | 检查用户可见文本或 DOM 状态 |
evaluate | 必要时读取内部状态或执行轻量脚本 |
wait | 等待异步 UI、后台任务或动画稳定 |
场景文件
优先使用项目内已有测试目录。若没有约定,使用:
.qa/scenarios/:测试用例
.qa/reports/:测试报告
.qa/artifacts/:截图、日志、trace、请求响应摘要
.qa/pitfalls.md:踩坑和回归经验
本技能自带的 scenarios/ 只作为模板参考,不要把项目测试结果写回技能目录。
格式规范
{
"name": "场景标识符",
"description": "场景目的",
"tags": ["分类标签"],
"target": {
"type": "web | desktop | cli | api | mobile | plugin | mixed",
"entry": "启动入口、URL、命令或说明"
},
"setup": {
"commands": ["构建或启动命令"],
"env": {},
"data": "测试数据说明"
},
"steps": [
{
"id": "step-id",
"description": "步骤描述",
"action": "screenshot | navigate | click | type | command | shell | request | pressKey | hasText | waitForText | queryText | evaluate | wait | note",
"args": { "动作参数": "..." },
"expect": "自然语言期望行为描述",
"screenshotBefore": false,
"screenshotAfter": true
}
],
"cleanup": []
}
expect 是自然语言描述,由你智能判断实际结果是否满足。不是正则表达式,不是精确匹配。
测试策略
每步执行后综合以下维度判断:
- 截图内容:UI 元素是否正确渲染、布局是否合理。
- 可见文本:关键标签、面板标题、通知是否出现。
- 用户任务结果:用户目标是否真的完成,而不是只出现中间状态。
- 请求/响应:状态码、错误码、响应摘要是否符合场景。
- 命令输出:退出码、关键日志、错误堆栈是否合理。
- DOM 状态:元素是否存在、CSS 类是否正确。
- 上下文连贯:当前步骤与前序操作是否逻辑一致。
- 场景期望:
expect 字段的自然语言期望是否被满足。
判断三级:
| 级别 | 含义 | 后续 |
|---|
| PASS | UI 和行为均符合期望 | 继续 |
| WARN | 大体合理但有可疑之处 | 记录分析,酌情创建 Issue 或保存观察用例 |
| FAIL | 明显不符合期望 | 记录分析,必须保存复现路径并推动修复 |
模式详解
/qa run — 场景执行
- 读取场景。优先顺序:
--case-dir、.qa/scenarios/、项目已有 tests/e2e/ 或 scenarios/、本技能模板。
- 执行场景
setup.commands 或项目已有准备命令。
- 启动真实入口:Web、桌面、CLI、API、移动端、插件宿主或混合路径。
- 逐步执行场景;每步执行完立即追加日志。
- 清理浏览器、桌面进程、测试 server、模拟器或临时资源。
- 输出报告。
- 如果发现新流程、新缺陷复现路径或稳定回归路径,保存到
.qa/scenarios/<slug>.json,并在 .qa/pitfalls.md 补充踩坑。
默认日志路径:.qa/reports/qa-log-roundN.md
/qa create — 创建并执行场景
- 根据用户描述和项目上下文生成候选场景。
- 明确目标、前置条件、数据、步骤、期望和清理要求。
- 先执行一轮验证场景是否可跑。
- 通过后保存到项目约定目录;默认
.qa/scenarios/<slug>.json。
- 输出保存路径、覆盖风险和后续是否建议进入 CI。
/qa explore — 即兴探索
- 读取用户目标,转成用户任务而不是内部检查项。
- 操作真实入口,记录每个观察点和证据。
- 对异常行为给出 PASS/WARN/FAIL 判断和理由。
- 结束时必须输出「新测试用例候选」,说明是否建议保存。
- 用户提供
--save-case 或发现关键缺陷时,保存场景到项目内。
/qa loop — 循环验证
循环验证是发现缺陷后持续 修复→rebuild/restart→完整回归 的标准化流程。
prepare → launch real target → 执行场景 → 报告
|
全部 PASS → 沉淀用例并完成
|
有 FAIL → 定位/修复 → 完整回归(循环)
关键要求:
- 每轮都重跑完整场景,不只跑失败步骤。
- 修复后必须保留回归用例。
- 连续 2 轮通过率无提升时,报告瓶颈和需要人工判断的点。
- 达到
--max-rounds 上限时停止并保留完整证据。
loop 报告格式
## /qa loop 循环验证汇总
**范围**: <scope>
**总轮次**: N
**最终结果**: PASS / FAIL
### 通过率趋势
| 轮次 | PASS | WARN | FAIL | 通过率 |
|------|------|------|------|--------|
| R1 | 4 | 1 | 1 | 67% |
| R2 | 6 | 0 | 0 | 100% |
### 修复记录
| 轮次 | 问题 | 修复文件 | 修复内容 |
|------|------|---------|---------|
| R1 | 保存后没有成功提示 | src/save.ts | 修复异步状态更新 |
### 截图对比
| 步骤 | R1 截图 | R2 截图 | 变化 |
|------|---------|---------|------|
| submit | submit-r1.png | submit-r2.png | 错误消失 |
/qa watch — 持续监测
长驻循环守卫:监听 git HEAD 变化,检测到新 commit 时自动构建并触发完整回归测试。不修复代码,只测试和报告。
while true:
sleep <interval> 分钟
current_head = git rev-parse HEAD
if current_head != LAST_HEAD:
记录新提交
准备环境
执行完整回归测试
LAST_HEAD = current_head
增量日志格式
默认路径:.qa/reports/qa-log-roundN.md
每步执行完毕后立即追加,严禁积攒:
### [Step N] <描述>
#### 动作
```json
{
"action": "<type>",
"args": {}
}
```
#### 结果
```text
screenshot: .qa/artifacts/<name>.png(如有)
visibleText (sample): "<前200字符>"
commandOutput (sample): "<前200字符>"
responseSummary: "<状态码/关键字段>"
returnValue: <值>
```
#### 判断: PASS / WARN / FAIL
<依据:观察到了什么,为什么如此判定>
报告格式
默认路径:.qa/reports/qa-report-roundN.md
## QA 报告
**场景**: <名称>
**时间**: <ISO>
**结果**: PASSED / FAILED (<N>/<M> 步骤通过, <W> 警告)
### 摘要
| # | 步骤 | 动作 | 判定 | 证据 |
|---|------|------|------|------|
| 1 | <描述> | `<action>` | PASS | [link] |
### 失败/警告分析(如有)
**步骤 N [FAIL]**:
- 期望: "<expect>"
- 实际: <观察到的>
- 证据: <截图/日志/响应摘要路径>
- 分析: <根因推理>
### 新测试用例候选
| 名称 | 价值 | 稳定性 | 建议路径 |
|------|------|--------|----------|
| <slug> | <为什么值得保存> | stable / flaky / manual-only | .qa/scenarios/<slug>.json |
自动总结并保存测试用例
执行 create、explore、loop 时,只要发现以下任一情况,就应该沉淀测试用例:
- 用户完成了一个关键业务流程。
- 发现了缺陷复现路径。
- 修复后形成了稳定回归路径。
- 某个环境或异步等待条件容易踩坑。
- 人工判断中出现了可转化为检查点的观察。
保存规则
- 优先保存到项目内
.qa/scenarios/<slug>.json。
- 如果项目已有
tests/e2e/ 或 e2e/ 约定,按项目约定保存。
- 文件名使用稳定英文 slug,不绑定临时时间戳。
- 场景内容必须包含前置条件、操作步骤、期望、证据路径和清理要求。
- 不保存真实密码、token、客户数据、内部地址或个人信息。
从探索到用例
## 新测试用例候选
名称: <slug>
价值: <为什么值得长期保留>
覆盖风险: <会防止什么回归>
稳定性: stable / flaky / manual-only
建议保存路径: .qa/scenarios/<slug>.json
步骤摘要:
1. <操作>
2. <观察>
3. <断言>
注意事项
- 真实入口优先:能从用户入口验证,就不要只验证内部函数。
- 截图即证据:关键操作前后都要截图,截图是给人类审查的第一手证据。
- 每步即时写日志:严禁积攒到最后再写。
- 完整回归:loop 模式每轮重跑全部场景,不可只跑失败项。
- 完整清理:关闭浏览器、桌面进程、server、模拟器和临时数据。
- 环境隔离:用测试账号、测试库、临时目录和可恢复 fixture。
- 风险确认:涉及支付、删除、批量修改、通知真实用户或生产环境时,先确认。
收敛保障(loop 模式)
- 连续 2 轮通过率无提升 → 分析瓶颈并报告给人类。
- FAIL 是环境问题(非代码问题)→ 标记为 SKIP/SETUP 而非产品 FAIL。
- FAIL 需要人类介入(如测试账号、第三方权限)→ 标记并停止相关分支。
与其他命令的关系
| 命令 | 职责 |
|---|
/qa run | 单次场景执行 |
/qa create | 生成新场景并执行 |
/qa list | 列出已有场景 |
/qa explore | 即兴探索测试,并总结可沉淀用例 |
/qa loop | 测试→修复→回归循环,收敛到 100% |
/qa watch | 长驻监测,新 commit 触发回归 |