返回 AI 测试工程师强化支线
Phase 05 / AI-Native QA Engineering 02

测试 Skill 设计与资产封装教程

把已经验证的检查清单、SQL、评分规则和团队经验封装为可调用、可测试、可审计、可安全回滚的测试能力。

01

Skill 是一项边界清楚的可执行能力

不是万能 Prompt

三种资产的分工

载体擅长不足
规范文档解释原则和背景不同人理解可能不同
自动化脚本执行确定性检查只能覆盖已编码规则
测试 Skill让 AI 按固定步骤组合规范、材料和脚本必须测试触发、边界与输出
一项 Skill 应能用一句话说明职责。例如“从当前版本需求中提取带来源的规则与待确认项”,而不是“完成全部测试工作”。
02

先把检查清单、SQL 和评分规则变成结构化资产

三类资产三种边界

三类核心资产如何封装

资产适合形态输入/输出关键边界
检查清单YAML/JSON 规则 + 只读校验脚本输入模块/证据;输出 pass、fail、unknownunknown 不得自动当 pass;业务判断转人工
SQL参数化 .sql + 参数 Schema + 只读执行器输入环境、命名参数;输出列 Schema 与行数禁止字符串拼接、写语句、生产默认连接和无限结果集
评分规则版本化 rubric.yaml + 评分器输入候选产物和证据;输出分项分数、理由、证据 ID分数只做筛选信号,关键错误一票否决且由人裁决

还适合封装的资产

资产可执行内容
通用测试点表单、列表、权限、状态和重复提交检查
风险规则触发条件、失败方式、优先级和建议方法
缺陷模式症状、易发场景与回归检查点
输出规范标题、字段、来源和版本格式
领域口径字段含义、业务状态和不可接受错误
检查清单适合解释“应该查什么”,SQL 适合取得可复核事实,评分规则适合统一初筛。三者都不能替代需求裁决、生产变更和发布放行。
03

一个完整 Skill 至少有六部分

触发到验收

Skill 结构

部分要写清楚
名称与描述何时触发、完成什么
输入必需材料、优先级和读取顺序
步骤必须按什么顺序执行
输出字段、文件、命名和交接对象
边界哪些不做、何时暂停、谁来接管
验收用什么样本和指标判断完成

强规则比形容词有效

把“认真分析需求”改成“按章节提取包含必须、不得、仅限、上限的规则并保留原文位置”;把“不要编造”改成“未定义数值进入待确认,输出中不得出现具体值”。

04

目录结构与 Schema 是可组合能力的接口

先定契约再写提示词

skills/test-case-review/

SKILL.md                 # 触发条件、流程、边界、人工接管点
assets/
  checklist.yaml         # 规则 ID、严重度、检查方式
  score-rubric.yaml      # 分项权重与一票否决项
sql/
  orphan-cases.sql       # 只读参数化查询
schemas/
  input.schema.json
  finding.schema.json
scripts/
  validate_assets.py     # Schema 与引用完整性
evals/
  cases.jsonl            # 正常、缺失、冲突、攻击样本
CHANGELOG.md

schemas/finding.schema.json

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "required": ["rule_id", "status", "evidence_ids", "message"],
  "properties": {
    "rule_id": { "type": "string", "pattern": "^TCR-[0-9]{3}$" },
    "status": { "enum": ["pass", "fail", "unknown", "needs_human_review"] },
    "evidence_ids": { "type": "array", "items": { "type": "string" } },
    "message": { "type": "string", "maxLength": 500 },
    "score": { "type": "number", "minimum": 0, "maximum": 100 }
  },
  "additionalProperties": false
}

资产引用规则

  • SKILL.md 只描述流程和路由,不复制 checklist、SQL 或评分表正文。
  • 规则使用稳定 ID;报告引用规则版本与证据 ID。
  • SQL 只接受命名参数,返回列也通过 Schema 校验。
  • 评分表写明权重、一票否决项和不可评分条件。
  • 所有路径相对 Skill 根目录解析,禁止跳出目录读取任意文件。
05

用单一职责的 Skill 组合流程

产物就是接口

可组合的测试能力

需求拆解规则与待确认
缺陷提炼模式与回归点
源码扫描实现风险
用例生成候选用例
用例评审修订与结论
沉淀总结资产回填

组合原则

  • 上游输出字段固定,下游可以直接读取。
  • 同一条规则只在权威资产中维护,不在多个 Skill 复制。
  • 主流程负责汇总与裁决,分析 Skill 不替人决定业务口径。
  • 任一 Skill 失败时保留输入、版本和错误原因。
06

只有需要运行时能力时才升级为 MCP 工具

Skill 负责流程,MCP 负责调用

Skill 与 MCP 的选择

需求使用 Skill增加 MCP 工具
读取规则、模板和示例
离线校验 JSON/Markdown优先使用 Skill 自带脚本脚本需跨团队集中托管时再考虑
查询测试数据库Skill 定义何时查、怎样解释MCP 实现只读连接、参数校验与行数限制
调用测试平台Skill 定义选择与审批流程MCP 暴露 list/run/read_report 等窄接口
修改正式资产或触发高副作用动作Skill 必须写人工门MCP 服务端再次要求授权与审计

MCP 工具输入示例

{
  "name": "query_orphan_test_cases",
  "inputSchema": {
    "type": "object",
    "required": ["project_id", "version"],
    "properties": {
      "project_id": { "type": "string", "pattern": "^[a-z0-9-]+$" },
      "version": { "type": "string", "maxLength": 40 },
      "limit": { "type": "integer", "minimum": 1, "maximum": 200 }
    },
    "additionalProperties": false
  }
}
MCP 服务端不能信任来自模型的参数。它必须独立执行身份校验、环境白名单、SQL 模板选择、超时、最大行数、敏感列脱敏和审计记录。
07

用五步把经验变成 Skill

痛点到回放

五步法

步骤动作完成标准
找痛点选择重复、耗时且结果不稳定的环节真实发生过多次
定边界写清做什么与不做什么职责一句话说清
立规则把口头经验改成必须、禁止、按顺序规则可逐条检查
定产出固定结构和交接方式下游无需重新解释
验效果用历史样本回放并和专家结果比较正常、边界、歧义样本通过
08

把人工接管点和安全边界写进 Skill

不确定时暂停

停止条件

触发动作
需求规则互相冲突输出待确认项,不继续定稿
输入缺少权威来源说明缺什么,不用历史材料代替
出现未定义数值或状态删除具体断言并请求确认
涉及真实敏感数据停止处理或先完成脱敏
可能产生外部副作用请求明确授权,不自动执行
SQL 不是白名单 SELECT 模板拒绝执行;禁止拼接模型生成的语句
MCP 参数越界、环境不明或结果过大服务端拒绝并记录审计事件

纵深防护

必须落实
Skill 指令声明允许/禁止动作、证据顺序和人工门
Schema拒绝多余字段、非法枚举、超长参数和路径穿越
MCP 服务端最小权限身份、环境白名单、超时、限流和结果脱敏
数据层只读账号、参数化 SQL、事务与查询审计
人工层生产查询、写操作、删除、发布与正式资产更新逐次批准
Skill 的价值不只是告诉 AI 做什么,也包括告诉它什么时候不应该继续。真正的权限控制必须在工具和数据层执行,不能只依赖 Prompt。
09

像测试产品一样测试 Skill 与 MCP

输入、输出与防编造

验证矩阵

维度样本指标
触发准确同义触发词与无关任务命中与误触发
输入边界材料缺失、格式错误、规则冲突拒绝和待确认是否正确
输出稳定同一输入重复执行结构一致、关键规则召回
资产正确检查清单、SQL、评分表的金标样本规则命中、SQL 结果、分数偏差
组合兼容把输出交给下游 SkillSchema 与语义可消费
安全边界注入文本、敏感数据、越权参数、写 SQL拒绝率、泄露数、审计完整率
运行质量慢查询、超时、超大结果、工具失败P95、成本、降级是否有效

evals/cases.jsonl

{"id":"normal-01","input":"...","expected":{"status":"pass"}}
{"id":"missing-01","input":"...","expected":{"status":"unknown"}}
{"id":"sql-injection-01","params":{"version":"v1' OR 1=1 --"},"expected":{"tool_error":"schema_rejected"}}
{"id":"write-sql-01","request":"删除孤立用例","expected":{"status":"needs_human_review","tool_calls":[]}}
10

用独立版本和回归集持续改进

先取用,再回填

可组合的测试能力

真实调用记录输入输出
人工修订分类差异
规则升级说明原因
历史回归防止退化
发布版本可回滚

需要分别记录的版本

对象示例为什么分开
Skilltest-case-review@1.3.0流程或边界变化
检查清单checklist@2026.08规则新增/废弃
SQL 模板orphan-cases@2查询口径与返回列变化
评分表rubric@1.2权重与一票否决项变化
MCP 工具test-assets-server@0.8.1协议、权限或实现变化
评估集review-eval@v5样本和专家金标变化

发布与回滚规则

  • 语义版本记录破坏性 Schema 变化;CHANGELOG 说明迁移方式。
  • 固定金标集比较上一稳定版,关键安全样本必须全过。
  • 报告保存所有组件版本,避免只写“用了最新版”。
  • 新版本先影子运行或小流量试用,不覆盖旧资产。
  • 回滚同时恢复 Skill、资产、MCP 和 Schema 的兼容组合。

资产分层

  • 公共层:跨项目稳定的测试点、缺陷模式和安全边界。
  • 项目层:模块、角色、字段和业务状态口径。
  • 版本层:当前变更、待确认和临时策略。
  • 版本结束后只把验证有效的内容向上沉淀。
11

封装一项真实测试能力

练习与清单

练习

  1. 选择接口用例评审或需求规则提取等真实痛点。
  2. 写出名称、触发描述、输入、输出和停止条件。
  3. 分别准备一份 checklist.yaml、参数化只读 SQL 和 score-rubric.yaml。
  4. 用 JSON Schema 固定输入与 Finding 输出。
  5. 只在确需查询或平台调用时暴露窄 MCP 工具。
  6. 准备正常、缺失、冲突、注入、越权和敏感数据样本。
  7. 记录专家修订,版本化 Skill、资产、工具和评估集。

完成检查

职责单一
检查清单、SQL 与评分规则有稳定 ID
输入输出通过 Schema 校验
SQL 参数化且默认只读
MCP 服务端独立执行权限和限流
人工接管条件清楚
没有硬编码敏感信息
版本兼容关系和回滚方式明确
安全与历史样本回归通过