Skip to content

Commit fbd7f73

Browse files
committed
v10.2: copilot-instructions更新+要求编程AI代码变化时自动审视并更新对应模块蓝本
1 parent 20ead48 commit fbd7f73

2 files changed

Lines changed: 71 additions & 20 deletions

File tree

.github/copilot-instructions.md

Lines changed: 53 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -5,28 +5,67 @@
55
当你需要为某个被测应用生成或修改测试蓝本时,**必须遵守以下规则**
66

77
1. **蓝本统一存放在 `testpilot/` 文件夹**:每个被测应用目录下创建 `testpilot/` 子目录,蓝本放在里面。
8-
2. **命名规范**:主蓝本命名为 `testpilot.json`,按功能模块拆分的蓝本命名为 `模块名.testpilot.json`
9-
3. **更新而非新建**:若已存在同名蓝本,直接覆盖更新,**不得**创建 `_v2``_new``_backup` 等变体。
10-
4. **每个蓝本必须包含 `description` 字段**:50-200字描述本蓝本覆盖的功能范围。
11-
- ✅ 正确:`shop-demo/testpilot/testpilot.json`
12-
- ✅ 正确:`shop-demo/testpilot/login.testpilot.json`(按功能拆分)
13-
- ❌ 错误:`shop-demo/testpilot.json`(不要散落在根目录)
14-
- ❌ 错误:`shop-demo/testpilot/testpilot_v2.json`
8+
2. **按功能模块拆分蓝本**:不要创建单一的 `testpilot.json`,而是按功能模块拆分成多个蓝本文件。
9+
3. **命名规范**`模块名.testpilot.json`(如 `login.testpilot.json``cart.testpilot.json`
10+
4. **更新而非新建**:若已存在同名蓝本,直接覆盖更新,**不得**创建 `_v2``_new``_backup` 等变体。
11+
5. **每个蓝本必须包含 `description` 字段**:50-200字描述本蓝本覆盖的功能范围。
12+
6. **每个蓝本必须包含 `start_command` 字段**:如果应用需要命令行启动(如 `npm start``python app.py`),必须填写;纯HTML静态应用留空。
13+
14+
**示例结构:**
15+
```
16+
shop-demo/
17+
testpilot/
18+
auth.testpilot.json ← 登录/注册/权限模块
19+
dashboard.testpilot.json ← 仪表盘统计模块
20+
product.testpilot.json ← 商品管理CRUD模块
21+
order.testpilot.json ← 订单管理模块
22+
```
23+
24+
**优点:**
25+
- 每个模块独立,互不干扰
26+
- 代码变化时只需更新对应模块的蓝本
27+
- 用户可以选择测试全部模块或单个模块
1528

1629
这样 TestPilot AI 插件能自动扫描 `testpilot/` 目录下的所有蓝本并以多选框列表展示。
1730

18-
## 编程完成后必须生成/更新蓝本
31+
## 代码变化时自动审视并更新蓝本(重要!)
32+
33+
**每次修改代码后,你必须主动审视并更新对应的蓝本,无需用户提醒。**
34+
35+
### 自动更新触发条件
1936

20-
**每次完成编程任务后,你必须同时生成或更新被测应用的 `testpilot.json`**
37+
当你完成以下任何代码修改后,**立即检查并更新对应模块的蓝本**
38+
39+
1. **新增UI元素**:新增按钮/表单/导航/弹窗 → 更新对应模块蓝本,添加新场景
40+
2. **修改元素ID/class**:修改了 `id``class` → 更新蓝本中的选择器
41+
3. **修改业务逻辑**:修改表单验证/计算逻辑/跳转流程 → 更新蓝本中的断言和预期结果
42+
4. **删除功能**:删除某个功能 → 从蓝本中删除对应场景
43+
5. **修复Bug**:修复了Bug → 更新蓝本中的 `expected` 断言,确保能检测到该Bug
44+
6. **修改URL/端口**:修改了应用端口或路由 → 更新蓝本中的 `base_url``start_command`
45+
46+
### 自动审视流程
47+
48+
```
49+
修改代码 → 自问:这个改动影响哪个功能模块?
50+
→ 找到对应的 xxx.testpilot.json
51+
→ 检查:选择器是否还正确?断言是否需要更新?
52+
→ 更新蓝本
53+
→ 完成
54+
```
2155

22-
这是因为你是最了解自己代码的人——你知道每个元素的 ID、class、功能逻辑,你生成的蓝本最精准、覆盖最全面。
56+
**示例:**
57+
- 修改了登录页的密码输入框 `id``#pwd` 改为 `#password`
58+
→ 立即打开 `auth.testpilot.json`
59+
→ 找到所有使用 `#pwd` 的步骤
60+
→ 改为 `#password`
61+
→ 保存
2362

2463
### 蓝本生成时机
2564

26-
-**新建应用**:代码写完后,立即生成完整 `testpilot.json`
27-
-**修改功能**:新增/修改/删除任何 UI 元素或业务逻辑后,同步更新蓝本对应场景和选择器
28-
-**修复 Bug 后**:确认代码修复正确,更新蓝本中对应的 expected 断言
29-
-**不允许跳过**:不得以"稍后再写"为由跳过蓝本生成
65+
-**新建应用**:代码写完后,按功能模块生成多个蓝本文件
66+
-**修改功能**:新增/修改/删除任何 UI 元素或业务逻辑后,**立即**更新对应模块的蓝本
67+
-**修复 Bug 后**:确认代码修复正确,**立即**更新蓝本中对应的 expected 断言
68+
-**不允许跳过**:不得以"稍后再写"为由跳过蓝本更新
3069

3170
### 蓝本质量要求
3271

extension/src/sidebarProvider.ts

Lines changed: 18 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -359,18 +359,28 @@ export class SidebarProvider implements vscode.WebviewViewProvider {
359359
}
360360

361361
private async _handleCopyBlueprintPrompt(): Promise<void> {
362-
const prompt = `请帮我为当前项目生成 testpilot.json 测试蓝本文件,放在项目的 testpilot/ 文件夹下。要求:
362+
const prompt = `请帮我为当前项目生成测试蓝本文件,放在项目的 testpilot/ 文件夹下。
363+
364+
重要:按功能模块拆分成多个蓝本文件,不要创建单一的 testpilot.json!
365+
366+
例如电商项目应拆分为:
367+
- testpilot/auth.testpilot.json(登录/注册/权限)
368+
- testpilot/product.testpilot.json(商品管理CRUD)
369+
- testpilot/order.testpilot.json(订单管理)
370+
- testpilot/cart.testpilot.json(购物车)
371+
372+
要求:
363373
1. 分析源代码中所有可操作 UI 元素(按钮/表单/导航/弹窗)
364374
2. 选择器使用代码中的真实 id(如 #login-btn)或稳定 class,禁止用 div:nth-child(3) 这类脆弱选择器
365375
3. 每个功能页面对应一个场景,覆盖正常流程和异常场景(空表单提交、错误输入)
366376
4. 每个 fill 操作后必须有 assert_text 或 screenshot 验证
367377
5. 每次 navigate 必须有断言验证页面已正确加载
368-
6. 如果应用需要命令行启动(如 npm start、python app.py),必须填写 start_command 字段;纯HTML静态应用留空即可
378+
6. 如果应用需要命令行启动(如 npm start、python app.py),必须填写 start_command 字段;纯HTML静态应用留空
369379
370-
格式
380+
每个蓝本文件格式
371381
{
372-
"app_name": "应用名称",
373-
"description": "蓝本功能说明(50-200字,描述本蓝本覆盖哪些功能模块和测试范围)",
382+
"app_name": "模块名称(如:用户认证模块)",
383+
"description": "蓝本功能说明(50-200字,描述本蓝本覆盖哪些功能和测试范围)",
374384
"base_url": "http://localhost:端口",
375385
"version": "1.0",
376386
"platform": "web",
@@ -396,7 +406,9 @@ export class SidebarProvider implements vscode.WebviewViewProvider {
396406
]
397407
}
398408
399-
支持的 action:navigate / click / fill / select / wait / screenshot / assert_text / assert_visible / hover / scroll`;
409+
支持的 action:navigate / click / fill / select / wait / screenshot / assert_text / assert_visible / hover / scroll
410+
411+
重要提醒:以后修改代码时,主动审视并更新对应模块的蓝本,无需用户提醒!`;
400412
await vscode.env.clipboard.writeText(prompt);
401413
vscode.window.showInformationMessage("✅ 提示词已复制!请粘贴到 Cursor / Windsurf,让编程AI读取源码生成蓝本。");
402414
}

0 commit comments

Comments
 (0)