妙趣导读:凌晨4点17分,我和这个bug对视了整整一个时辰。我怀疑它是前世欠我的——不然为什么开了三天的debug session,最后发现是一个多余的感叹号?今天教你如何高效测试和调试Agent Skills。
📋 测试金字塔
🏗️ Skills测试三层架构
⬆️
/ E2E测试 \ ← 模拟真实Agent使用场景
/------------\
/ 集成测试 \ ← 测试Skill间的交互
/----------------\
/ 单元测试 \ ← 测试单个函数/工具调用
/--------------------\
🚀 单元测试
测试SKILL.md结构
# 使用skills-packager验证
skills-packager validate ./my-skill/
# 期望输出:
# ✅ SKILL.md格式正确
# ✅ 包含必要的meta信息
# ✅ description长度合适
# ✅ 代码示例格式正确
测试工具调用
Skill中引用的工具是否能正常工作:
# 使用openclaw doctor检查工具可用性
openclaw doctor
# 手动测试web_fetch
openclaw agent --message "用web_fetch打开 https://miaoquai.com"
# 手动测试browser
openclaw agent --message "用browser打开 https://miaoquai.com 并截图"
🔍 调试技巧
1. 日志分析
# 查看OpenClaw Gateway日志
journalctl -u openclaw-gateway -n 100 --no-pager
# 实时日志
journalctl -u openclaw-gateway -f
# 按级别过滤
journalctl -u openclaw-gateway -p err --since "1 hour ago"
2. Dry Run模式
不实际执行,只展示意图:
# 对message工具使用dryRun
openclaw message send --target "#general" --message "测试消息" --dry-run
# 对agent命令使用verbose
openclaw agent --message "使用my-skill" --verbose
3. 上下文审计
查看Agent的上下文状态:
# 查看当前会话状态
openclaw agent --message "/status"
# 查看会话历史
sessions_history(sessionKey: "abc123", includeTools: true)
# 检查上下文使用率
openclaw agent --message "当前上下文使用情况"
⚠️ 常见调试陷阱
- 模型缓存导致旧代码仍被执行(重启Gateway)
- 敏感的API Key被打印到日志(检查日志级别)
- 上下文截断导致Skill描述被丢失(优化SOUL.md长度)
- 工具调用超时但未设置timeout(显式设置)
🛡️ 安全扫描集成测试
使用openclaw-skill-security-scanner自动检查:
# 集成到CI流程
npx openclaw-skill-security-scanner scan ./skills/ --ci-mode
# 生成测试报告
npx openclaw-skill-security-scanner scan ./skills/ \
--output security-report.json \
--threshold B # 低于B级别视为失败
# CI中集成(GitHub Actions)
# .github/workflows/skill-test.yml
name: Skill Test
on: [push]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- run: npx openclaw-skill-security-scanner scan ./skills/ --ci-mode
💡 最佳实践
✅ 测试流程建议
- 编写Skill时同步写测试用例
- 每次修改后运行验证命令
- 设置pre-commit hook自动检查
- 定期运行安全扫描(至少每周一次)
- 保存测试报告,追踪历史变化
🔗 相关链接
🎭 妙趣小结
调试Skills就像破案——日志是线索,测试是证据,耐心是必须的。记住,90%的bug都是你两小时前自己写的。别问我是怎么知道的。😏