pdd-skills 3.1.9 → 3.1.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/lib/init.js CHANGED
@@ -499,7 +499,7 @@ export async function initProject(targetPath = '.', options = {}) {
499
499
  }
500
500
 
501
501
  // Copy AI Test Framework source files (testcase-ai.py, login_manager.py)
502
- const srcRoot = path.resolve(path.dirname(new URL(import.meta.url).pathname), '..');
502
+ const srcRoot = path.resolve(__dirname, '..');
503
503
  console.log(chalk.blue('\n>> Copying AI Test source files...\n'));
504
504
  for (const rel of AI_TEST_SOURCE_FILES) {
505
505
  const srcPath = path.join(srcRoot, 'tests', path.basename(rel));
package/package.json CHANGED
@@ -1 +1 @@
1
- {"name":"pdd-skills","version":"3.1.9","type":"module","description":"PDD Skills - PRD驱动开发框架 | 41+技能: 核心(12)/专家(8)/熵减(4)/OpenSpec(10)/PR管理(7) | AI原生开发工作流 | Bug模式库(14) | PRD规则(30) | 4级门控引擎","main":"index.js","bin":{"pdd":"./bin/pdd.js","pdd-skills":"./bin/pdd.js"},"files":["bin/","lib/","skills/","templates/","scaffolds/","scripts/","config/","hooks/","docs/","index.js"],"scripts":{"start":"node bin/pdd.js","list":"node bin/pdd.js list","lint":"node bin/pdd.js linter --type code prd sql activiti","generate":"node bin/pdd.js generate","verify":"node bin/pdd.js verify","report":"node bin/pdd.js report","config":"node bin/pdd.js config --list","api":"node bin/pdd.js api","api:dev":"node bin/pdd.js api -p 3000 --cors","init":"node bin/pdd.js init","update":"node bin/pdd.js update","cso":"node bin/pdd.js cso","eval":"node bin/pdd.js eval","token":"node bin/pdd.js token","i18n":"node bin/pdd.js i18n"},"keywords":["pdd","prd-driven-development","ai","claude","skills","tdd","code-generation","linter","api-server","cli"],"author":"PDD Team","license":"MIT","engines":{"node":">=18.0.0"},"dependencies":{"chalk":"^5.3.0","commander":"^12.0.0","fs-extra":"^11.2.0","yaml":"^2.3.0"}}
1
+ {"name":"pdd-skills","version":"3.1.11","type":"module","description":"PDD Skills - PRD驱动开发框架 | 41+技能: 核心(12)/专家(8)/熵减(4)/OpenSpec(10)/PR管理(7) | AI原生开发工作流 | Bug模式库(14) | PRD规则(30) | 4级门控引擎","main":"index.js","bin":{"pdd":"./bin/pdd.js","pdd-skills":"./bin/pdd.js"},"files":["bin/","lib/","skills/","templates/","scaffolds/","scripts/","config/","hooks/","docs/","index.js","tests/testcase-ai.py","tests/login_manager.py","testcases/examples/"],"scripts":{"start":"node bin/pdd.js","list":"node bin/pdd.js list","lint":"node bin/pdd.js linter --type code prd sql activiti","generate":"node bin/pdd.js generate","verify":"node bin/pdd.js verify","report":"node bin/pdd.js report","config":"node bin/pdd.js config --list","api":"node bin/pdd.js api","api:dev":"node bin/pdd.js api -p 3000 --cors","init":"node bin/pdd.js init","update":"node bin/pdd.js update","cso":"node bin/pdd.js cso","eval":"node bin/pdd.js eval","token":"node bin/pdd.js token","i18n":"node bin/pdd.js i18n"},"keywords":["pdd","prd-driven-development","ai","claude","skills","tdd","code-generation","linter","api-server","cli"],"author":"PDD Team","license":"MIT","engines":{"node":">=18.0.0"},"dependencies":{"chalk":"^5.3.0","commander":"^12.0.0","fs-extra":"^11.2.0","yaml":"^2.3.0"}}
@@ -1,345 +1,93 @@
1
- # PDD Test Skill v1.0.1 - 试点验证指南
1
+ # Testcase Modeler Skill
2
2
 
3
- > **版本**: 1.0.1
4
- > **日期**: 2026-05-08
5
- > **目的**: 指导如何验证优化后的 testcase-modeler 和 testcase-agent
3
+ > **版本**: 2.0.0 | **分类**: Expert Skill
6
4
 
7
- ---
5
+ ## 概述
8
6
 
9
- ## 📋 验证目标
7
+ Testcase Modeler 是一个 AI 测试用例建模技能,能够将**自然语言描述**或**页面操作录制**转换为结构化的 YAML 测试用例文件。
10
8
 
11
- 本次优化的主要改进点:
9
+ ## v2.0 更新亮点 (2026-05-14)
12
10
 
13
- | 改进项 | 之前 | 之后 | 验证方法 |
14
- |--------|------|------|---------|
15
- | **触发词覆盖** | Modeler: 10个 / Agent: 8个 | Modeler: 30个 / Agent: 28个 | 测试各种口语化表达是否能正确触发 |
16
- | **SKILL.md长度** | Agent: 774行 | Agent: 359行(主文件)+ references/ | 检查加载效率和可读性 |
17
- | **文档结构** | 单一巨型文件 | 三层结构(主文件 + 4个参考文档) | 验证信息查找效率 |
18
- | **示例质量** | 2个基础示例 | 3个真实业务场景(含元数据、变体) | 运行实际用例验证完整性 |
11
+ 基于实际调试和验证经验,v2.0 做了以下重大更新:
19
12
 
20
- ---
13
+ ### 🆕 新特性
21
14
 
22
- ## 🚀 快速开始(5分钟上手)
23
-
24
- ### 前置条件检查
25
-
26
- ```bash
27
- # 1. 确保Chrome DevTools MCP服务正在运行
28
- # (通常在Trae IDE中自动启动)
29
-
30
- # 2. 设置环境变量
31
- # Windows PowerShell:
32
- $env:TEST_USER = "yuanye"
33
- $env:TEST_PASS = "yuanye"
34
- $env:LOGIN_URL = "http://uniportal.sjjk.com.cn"
35
-
36
- # Linux/Mac:
37
- export TEST_USER="yuanye"
38
- export TEST_PASS="yuanye"
39
- export LOGIN_URL="http://uniportal.sjjk.com.cn"
40
- ```
41
-
42
- ### 场景 A:验证登录流程(简单,适合首次验证)
43
-
44
- #### 方式 1:对话式执行(推荐新手)
45
-
46
- 在 Trae IDE 对话框中输入:
15
+ | 特性 | 说明 |
16
+ |------|------|
17
+ | **.env 配对文件机制** | 每个 YAML 用例自动配对同名 .env 文件,测试数据与用例绑定 |
18
+ | **el-select 多选框支持** | 使用 `select_option` + 中文 option 名,框架自动处理 readonly + JS DOM click |
19
+ | **spinbutton 数字输入框识别** | 修复了数字输入框定位错误的 bug(15 种交互角色全覆盖) |
20
+ | **三层元素定位策略** | P0(UID缓存) → P1(精确文本) → P2(模糊评分),文档化完整策略 |
21
+ | **evaluate_script 能力说明** | 记录 MCP 工具能力边界,指导 Modeler 生成正确 YAML |
22
+ | **特殊组件处理规则** | 新增规则 6:Vue Element UI 组件对照表和最佳实践 |
47
23
 
48
- ```
49
- 帮我执行 login-flow.yaml 这个测试用例,看看统一门户的登录流程是否正常
50
- ```
24
+ ### 示例文件更新
51
25
 
52
- **预期行为**:
53
- - Agent 自动识别到 YAML 文件路径
54
- - 触发 testcase-agent 技能
55
- - 按照 5 条铁律依次执行:
56
- 1. 状态检测(检查是否已登录)
57
- 2. 打开登录页面
58
- 3. 输入用户名/密码
59
- 4. 点击登录按钮
60
- 5. 验证首页加载
61
- - ✅ 实时显示每步进度和结果
62
- - ✅ 最终生成 HTML 报告并提供预览链接
26
+ - `asset-eval-apply.yaml` — 从简化版升级为完整 13 步用例
27
+ - 步骤 11: spinbutton 数字输入(评估金额)
28
+ - 步骤 12: el-select 多选框(评估方法 → 市场法)
29
+ - 所有 locator 改用 `uid_cache_key` 而非硬编码 uid
30
+ - `asset-eval-apply.env` — 配套环境变量文件
31
+ - `login-flow.yaml` / `login-flow.env` — 登录流程示例
32
+ - `yaml-format-guide.md` — 完整格式参考(含所有新特性)
63
33
 
64
- #### 方式 2:命令行执行(适合自动化)
34
+ ## 快速开始
65
35
 
66
36
  ```bash
67
- # 执行登录流程测试用例
68
- pdd test replay skills/expert/testcase-modeler/examples/login-flow.yaml --debug
69
-
70
- # 观察输出:
71
- # ✓ Test started: LOGIN-001-portal-normal
72
- # [DEBUG] Step 1: Navigate to http://uniportal.sjjk.com.cn
73
- # Press Enter to execute >
74
- ```
75
-
76
- ### 场景 B:验证复杂业务流程(中级)
37
+ # 触发方式(任选一种)
38
+ "帮我写一个资产评估申请的测试用例"
39
+ "录制一下登录流程的操作步骤"
40
+ "页面操作自动化回放"
77
41
 
78
- 在对话框中输入:
42
+ # 输出结果
43
+ testcases/asset-eval/apply-normal.yaml # 测试用例
44
+ testcases/asset-eval/apply-normal.env # 环境变量(自动生成)
79
45
 
46
+ # 执行测试
47
+ python tests/testcase-ai.py testcases/asset-eval/apply-normal.yaml
80
48
  ```
81
- 执行 asset-eval-approval-flow.yaml 用例,导航到资产评估核准的核准申请页面,告诉我有多少条记录
82
- ```
83
-
84
- **预期行为**:
85
- - ✅ 自动处理 SSO 单点登录跳转
86
- - ✅ 成功完成三级菜单导航:资产评估 → 资产评估核准 → 核准申请
87
- - ✅ 提取并报告列表记录数量
88
- - ✅ 生成包含截图和详细诊断的报告
89
-
90
- ---
91
-
92
- ## 🔍 验证清单
93
-
94
- ### 1. 触发词覆盖验证
95
49
 
96
- 尝试以下表达,确认都能正确触发相应技能:
50
+ ## 核心规则(7 条 Iron Rules v2.0)
97
51
 
98
- #### testcase-modeler 触发测试
52
+ 1. **结构完整性 + .env 配对** — 必填字段检查清单
53
+ 2. **智能意图提取** — 自然语言 → action 映射表
54
+ 3. **三层语义化定位** — P0/P1/P2 解析策略 + 15 种交互角色
55
+ 4. **断言注入** — 每步操作必须配对断言
56
+ 5. **安全处理 + .env 管理** — 敏感字段环境变量化
57
+ 6. **特殊组件处理** — el-select、spinbutton 等 Vue 组件指南
58
+ 7. **生成后确认** — 展示摘要并请求用户确认
99
59
 
100
- | 输入表达式 | 预期触发的技能 | 预期行为 |
101
- |----------|--------------|---------|
102
- | "帮我录一个登录操作" | testcase-modeler | 开始建模对话 |
103
- | "实习生不会写代码,怎么测试" | testcase-modeler | 引导零代码方案 |
104
- | "把这个资产评估流程记下来" | testcase-modeler | 生成YAML用例 |
105
- | "写个BDD风格的测试" | testcase-modeler | 使用Gherkin风格输出 |
60
+ 详细规则请参阅 [SKILL.md](./SKILL.md)
106
61
 
107
- #### testcase-agent 触发测试
62
+ ## 文件结构
108
63
 
109
- | 输入表达式 | 预期触发的技能 | 预期行为 |
110
- |----------|--------------|---------|
111
- | "跑一下刚才那个yaml" | testcase-agent | 加载并执行YAML |
112
- | "单步调试 login-flow.yaml" | testcase-agent | debug模式执行 |
113
- | "批量执行 tests目录下所有用例" | testcase-agent | 批量执行模式 |
114
- | "生成昨晚回归测试的报告" | testcase-agent | 从已有结果生成报告 |
115
-
116
- ### 2. 文档结构验证
117
-
118
- ```bash
119
- # 检查文件结构
120
- ls -la skills/expert/testcase-agent/
121
- # 应该看到:
122
- # SKILL.md (主文件, ~359行)
123
- # _meta.json (元数据)
124
- # templates/report-template.html
125
- # evals/default-evals.json
126
- # references/ (目录)
127
- # ├── iron-rules-detail.md (~600行)
128
- # ├── self-healing-strategy.md (~500行)
129
- # ├── error-handling.md (~450行)
130
- # └── cli-reference.md (~550行)
131
-
132
- # 验证主文件行数
133
- wc -l skills/expert/testcase-agent/SKILL.md
134
- # 预期: ~359 行 (应该 < 400)
135
-
136
- # 验证参考文档总行数
137
- wc -l skills/expert/testcase-agent/references/*.md | tail -1
138
- # 预期: ~2100 行 (详细信息都在这里)
139
64
  ```
140
-
141
- ### 3. 功能完整性验证
142
-
143
- #### 登录流程验证点
144
-
145
- - [ ] **铁律1**: 如果已登录,自动跳过登录步骤并记录日志
146
- - [ ] **铁律2**: 每步都有截图保存(检查 test-results/screenshots/ 目录)
147
- - [ ] **铁律3**: Step 4 (点击登录) 有网络校验断言
148
- - [ ] **铁律4**: 元素定位失败时显示自愈过程(故意改错target测试)
149
- - [ ] **铁律5**: 生成 HTML 报告(检查 test-results/reports/ 目录)
150
-
151
- #### 资产评估流程验证点
152
-
153
- - [ ] **SSO处理**: 正确处理从门户到业务系统的跳转
154
- - [ ] **多级菜单**: 成功展开三级菜单并点击目标项
155
- - [ ] **数据提取**: 正确读取表格记录数量
156
- - [ ] **复杂断言**: 表单字段完整性、表头验证都正常工作
157
- - [ ] **性能基准**: 总耗时 < 90s(参考 metadata.performance_baselines)
158
-
159
- ---
160
-
161
- ## 📊 结果收集模板
162
-
163
- 请将验证结果记录在下表中:
164
-
165
- ### 基本信息
166
-
167
- | 项目 | 内容 |
168
- |------|------|
169
- | 验证日期 | _____________ |
170
- | 验证人 | _____________ |
171
- | 环境 | Windows / Mac / Linux |
172
- | 浏览器 | Chrome / Edge / Chromium |
173
- | Node.js 版本 | _____________ |
174
-
175
- ### 触发词测试结果
176
-
177
- | 表达式 | 是否触发 | 响应时间 | 备注 |
178
- |--------|---------|---------|------|
179
- | "帮我录一个登录操作" | □ Yes □ No | ___ms | |
180
- | "实习生不会写代码" | □ Yes □ No | ___ms | |
181
- | "跑一下这个yaml" | □ Yes □ No | ___ms | |
182
- | "单步调试" | □ Yes □ No | ___ms | |
183
- | "批量执行测试" | □ Yes □ No | ___ms | |
184
-
185
- ### 用例执行结果
186
-
187
- | 用例 | 总步骤 | 通过 | 失败 | 跳过 | 耗时 | 状态 |
188
- |------|-------|------|------|------|------|------|
189
- | login-flow.yaml | 5 | ___ | ___ | ___ | ___ms | □ PASS □ FAIL |
190
- | asset-eval-approval-flow.yaml | 10 | ___ | ___ | ___ | ___ms | □ PASS □ FAIL |
191
-
192
- ### 质量评估(1-5分)
193
-
194
- | 评估维度 | 分数 | 说明 |
195
- |---------|------|------|
196
- | **触发准确度** (能否正确识别意图) | ___/5 | |
197
- | **执行稳定性** (是否经常失败) | ___/5 | |
198
- | **报告质量** (HTML报告是否专业) | ___/5 | |
199
- | **错误提示** (失败时的诊断是否有帮助) | ___/5 | |
200
- | **易用性** (整体使用体验) | ___/5 | |
201
- | **总分** | ___/25 | |
202
-
203
- ### 发现的问题和建议
204
-
205
- **问题列表**:
206
- 1.
207
- 2.
208
- 3.
209
-
210
- **改进建议**:
211
- 1.
212
- 2.
213
- 3.
214
-
215
- ---
216
-
217
- ## 🐛 常见问题排查
218
-
219
- ### Q1: 技能没有被触发?
220
-
221
- **可能原因**:
222
- - 表达式不够明确,AI认为可以直接处理而不需要技能
223
- - _meta.json 的 triggers 列表没有覆盖该表达
224
-
225
- **解决方案**:
226
- ```bash
227
- # 检查当前触发词配置
228
- cat skills/expert/testcase-modeler/_meta.json | grep -A 50 '"triggers"'
229
- cat skills/expert/testcase-agent/_meta.json | grep -A 50 '"triggers"'
230
-
231
- # 尝试更明确的表达
232
- # ❌ "测试一下" (太模糊)
233
- # ✅ "执行 login-flow.yaml 测试用例" (明确)
234
- # ✅ "帮我生成资产评估申请的自动化测试脚本" (明确)
65
+ skills/expert/testcase-modeler/
66
+ ├── SKILL.md # 主文档(完整规范)
67
+ ├── _meta.json # 元数据(触发词、版本等)
68
+ ├── README.md # 本文件
69
+ └── examples/
70
+ ├── asset-eval-apply.yaml # 资产评估申请示例(13步)
71
+ ├── asset-eval-apply.env # 配套环境变量
72
+ ├── login-flow.yaml # 登录流程示例(5步)
73
+ ├── login-flow.env # 配套环境变量
74
+ └── yaml-format-guide.md # 完整格式参考
235
75
  ```
236
76
 
237
- ### Q2: 执行过程中元素找不到?
238
-
239
- **可能原因**:
240
- - 页面还没完全加载就开始查找元素
241
- - target 描述与实际页面文案不一致
242
- - 元素是动态渲染的(React/Vue组件)
77
+ ## testcase-agent 的协作
243
78
 
244
- **解决方案**:
245
- 1. 在对应 step 增加 `wait_after` 配置
246
- 2. 更新 target 描述为更精确的文本
247
- 3. 检查自愈日志(Level 2/3/4 的降级过程)
248
-
249
- **查看自愈日志**:
250
- ```bash
251
- # 在报告中找到失败步骤
252
- # 查看详细的定位过程和候选元素
253
- # 根据诊断建议更新 YAML 的 target
254
79
  ```
255
-
256
- ### Q3: 生成的报告打不开或样式错乱?
257
-
258
- **可能原因**:
259
- - 浏览器安全策略阻止了本地文件访问 CSS/JS
260
- - 截图文件路径不正确
261
-
262
- **解决方案**:
263
- ```bash
264
- # 使用 HTTP 服务器打开报告(推荐)
265
- cd test-results/reports
266
- python -m http.server 8080
267
- # 然后在浏览器访问 http://localhost:8080/xxx_report.html
268
-
269
- # 或者直接用浏览器打开(部分功能受限)
270
- start xxx_report.html # Windows
271
- open xxx_report.html # Mac
80
+ 用户描述操作流程
81
+
82
+ testcase-modeler (建模)
83
+ ↓ 生成 YAML + .env
84
+ testcase-agent (执行)
85
+ 调用 Chrome DevTools MCP
86
+ 目标业务系统 (验证)
272
87
  ```
273
88
 
274
- ### Q4: 网络校验总是失败?
275
-
276
- **可能原因**:
277
- - 测试环境的 API 接口与预期不同
278
- - CORS 策略阻止了跨域请求检测
279
- - 前端使用了 Service Worker 或其他缓存机制
280
-
281
- **解决方案**:
282
- 1. 先手动在浏览器 DevTools Network 面板确认接口调用情况
283
- 2. 更新 `url_pattern` 为实际的接口地址
284
- 3. 如果确实无法监控网络请求,暂时将该断言标记为 `confidence: low`
285
- 4. 反馈给开发团队,考虑在网络层增加测试钩子
286
-
287
- ---
288
-
289
- ## 📝 下一步行动
290
-
291
- ### 如果验证全部通过 ✅
292
-
293
- 恭喜!v1.0.1 优化成功。建议:
294
-
295
- 1. **推广给团队**:分享试点验证结果,鼓励其他同事试用
296
- 2. **补充更多用例**:基于真实业务场景创建更多 YAML 测试用例
297
- 3. **集成到CI/CD**:参考 cli-reference.md 配置 Jenkins/GitHub Actions
298
- 4. **收集长期数据**:跟踪自愈成功率、平均耗时等指标
299
-
300
- ### 如果发现部分问题 ⚠️
301
-
302
- 1. **优先级排序**:按影响程度分类(阻断性/严重/一般/轻微)
303
- 2. **逐一修复**:
304
- - 触发问题 → 进一步增强 triggers 和 description
305
- - 执行问题 → 调整铁律实现或增加特殊处理
306
- - 报告问题 → 优化 report-template.html
307
- 3. **重新验证**:修复后再次运行本指南的验证流程
308
- 4. **迭代优化**:目标是在 v1.0.2 中解决所有发现的问题
309
-
310
- ### 如果需要重大调整 ❌
311
-
312
- 1. **召开评审会议**:讨论架构层面的改动
313
- 2. **更新设计文档**:同步修改 docs/superpowers/specs/ 下的设计文档
314
- 3. **制定 v2.0 计划**:如果改动较大,建议升级主版本号
315
-
316
- ---
317
-
318
- ## 📞 反馈渠道
319
-
320
- 请在验证完成后将结果反馈给:
321
-
322
- - **方式 1**: 直接在本对话中粘贴上述结果收集模板的内容
323
- - **方式 2**: 创建 Issue 到项目仓库,标签为 `pdd-test-feedback`
324
- - **方式 3**: 发送邮件至团队邮箱(如有)
325
-
326
- 您的反馈对 PDD Test Skill 的持续改进至关重要!🙏
327
-
328
- ---
329
-
330
- ## 🎯 里程碑追踪
331
-
332
- | 里程碑 | 目标日期 | 状态 | 备注 |
333
- |--------|---------|------|------|
334
- | v1.0.0 MVP 发布 | 2026-05-08 | ✅ 完成 | 基础功能可用 |
335
- | v1.0.1 优化发布 | 2026-05-08 | ✅ 完成 | 本次优化的内容 |
336
- | **试点验证完成** | **2026-05-09** | **⏳ 进行中** | **等待您的反馈** |
337
- | v1.0.2 问题修复 | 2026-05-15 | 📋 计划中 | 基于反馈迭代 |
338
- | v1.1.0 新增特性 | 2026-06-01 | 📋 计划中 | 人机协同模式等 |
339
-
340
- ---
89
+ ## 参考链接
341
90
 
342
- > **祝验证顺利!如有任何问题,随时在对话中提问。**
343
- >
344
- > **PDD Team**
345
- > **2026-05-08**
91
+ - [SKILL.md](./SKILL.md) — 完整规范文档
92
+ - [yaml-format-guide.md](./examples/yaml-format-guide.md) — YAML 格式参考
93
+ - [asset-eval-apply.yaml](./examples/asset-eval-apply.yaml) — 完整示例