Install
openclaw skills install skill-test-generate为任意 Agent Skill 自动生成 SFT 级别的功能测试用例,JSON 格式结构化输出。适用于生成测试用例、测试Skill、SFT测试、功能验证、技能测试、测试生成等场景。
openclaw skills install skill-test-generate基于 Agent 语义理解,为任意遵循 Agent Skills 标准 的 Skill 自动生成 SFT(功能测试) 级别的测试用例,以 JSON 格式结构化输出。
用户必须指定要生成测试的目标 Skill,支持以下形式:
| 用户说 | 目标参数 |
|---|---|
"为已安装的 pdf skill 生成测试" | installed:pdf |
"为 /path/to/my-skill 目录生成测试" | /path/to/my-skill |
"为这个 zip 生成测试:/tmp/my-skill.zip" | /tmp/my-skill.zip |
输出 JSON 的完整 Schema 定义见 references/test-schema.md。核心结构概要:
{
"schema_version": "1.0",
"generated_at": "<ISO 8601 UTC 时间戳>",
"skill": {
"name": "...",
"description": "...",
"source_path": "...",
"capabilities": ["能力1", "能力2"]
},
"test_suites": [
{
"suite_id": "TS-01",
"name": "技能激活与路由",
"description": "...",
"cases": [
{
"case_id": "TC-01-001",
"title": "...",
"scenario": "...",
"user_input": "...",
"source_refs": [
{ "file": "SKILL.md", "lines": [1, 10] }
]
}
]
}
],
"summary": { ... }
}
注意:
summary字段不要手动添加——由validate子命令根据test_suites自动统计生成。
从 Skill 使用者视角出发,按以下 5 大维度生成测试用例。每个维度对应一个或多个 test_suite:
验证 Agent 能否根据用户意图正确识别何时该/不该激活此 Skill。
典型用例:
对 Skill 声称的每项能力分别生成测试。从 SKILL.md 的 description、body、handler 的 input_schema 或正文描述中提取能力列表,每项能力对应一个 test_suite。
典型用例:
验证 Skill 是否支持连续/组合调用完成组合任务。
典型用例:
验证 SKILL.md 正文中的指令对 Agent 是否清晰可执行。
典型用例:
验证面对异常/恶意输入时是否安全处理。
典型用例:
向用户询问(或从上下文推断):
./my-skill-tests.json)如果都未指定,提示用户。
使用辅助脚本解析 Skill 路径并列出所有文件:
python scripts/generate.py prepare --skill <target>
其中 scripts/generate.py 位于:
~/.workbuddy/skills/skill-test-generate/scripts/generate.py
此命令会:
installed:<name>、目录或 zip 路径skill_name、skill_path、files({path, size, line_count} 列表)、file_index(path → {size, line_count} 映射)、frontmatter(name, description 等元数据)line_count 可帮助你为 source_refs 填写准确的行号范围如果目标是 zip,会解压到临时目录(路径包含在输出中)。
⛔ 必须阅读目标 Skill 中的所有文件,不要只看 SKILL.md。脚本、参考文档中可能包含 SKILL.md 未提到的能力或约束。
首先阅读 SKILL.md,获取:
然后逐一阅读 scripts/ 和 references/ 下的所有文件,理解:
基于对 Skill 的完整理解,提取能力列表。能力来源优先级:
然后按 5 大维度规划 test_suite 结构:
按 references/test-schema.md 中定义的格式组装完整 JSON。
用例编写原则:
user_input 必须是用户视角的自然语言,不是 API 调用scenario 要说明这个测试场景在验证什么source_refs 要指向目标 Skill 中与该用例直接相关的源代码位置⚠️ 不要手动添加 summary 字段——由 validate 脚本自动生成。
生成测试用例时,不仅要覆盖 happy_path,还要系统性地挖掘边界和异常场景。以下清单帮助确保覆盖面足够广:
输入边界:
功能边界:
路由边界:
状态与上下文边界:
指令完整性:
每个测试用例必须填写 source_refs,指向目标 Skill 中与该用例直接相关的源代码位置:
file 为 "SKILL.md",lines 指向描述该功能的段落file 为脚本相对路径(如 "scripts/analyze.py"),lines 指向实现该功能的函数/代码块[start, end] 格式,尽量精确定位到相关代码段落,不要过大也不要过小/),与 prepare 命令输出一致填写策略:在步骤 3 阅读 Skill 文件时,同时记录每个功能对应的文件和行号范围,这样在步骤 5 生成用例时可以直接引用。
在写入 JSON 文件后、向用户展示结果前,必须调用验证脚本校验输出格式:
python scripts/generate.py validate --file <输出 JSON 文件路径> --skill <目标 Skill 路径>
--skill参数可选。如果提供,validate 会校验source_refs中引用的文件是否存在、行号是否超出实际行数。强烈建议提供此参数以确保溯源信息准确。如果省略,则从 JSON 的skill.source_path推断。
验证脚本会检查:
schema_version、generated_at、skill、test_suites)case_id、title、scenario、user_input、source_refs)case_id 全局唯一性source_refs 格式正确性(file 非空字符串、lines 为 2 个正整数且 start ≤ end)source_refs 文件存在性(如果提供了 --skill 参数)source_refs 行号不超出文件实际行数(如果提供了 --skill 参数)验证不通过时:脚本会输出详细的错误列表。你必须根据错误修正 JSON 文件,然后重新运行验证,直到通过。
验证通过时:脚本会自动从 test_suites 生成 summary(各项计数),并在 JSON 文件中添加 "verified": true 字段。
⛔ 跳过此步骤的输出结果视为无效,不可作为最终交付。
读取 JSON 输出,以人类可读的摘要呈现:
scripts/generate.py 辅助脚本提供以下子命令:
| 命令 | 用途 |
|---|---|
prepare --skill <target> | 解析路径、列出文件(含行数)、提取 SKILL.md 元数据 |
validate --file <json路径> [--skill <skill路径>] | ⛔ 验证输出 JSON 格式,校验 source_refs,自动生成 summary,通过后添加 verified: true |
对于没有 handler、没有 scripts,仅通过 SKILL.md 正文向 Agent 提供指令的 Skill: