whistle.mockbubu 1.0.0-dev.4 → 2.0.0-beta.0

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/rules.txt CHANGED
@@ -1,2 +1,2 @@
1
1
  # 默认会经历所有server
2
- # * mockbubu://
2
+ # *.shein.com mockbubu://
@@ -0,0 +1,452 @@
1
+ 【技术需求】Whistle Mock 插件 - whistle.mockbubu
2
+
3
+ ## 一、背景(技术需求必填)
4
+
5
+ ### 需求背景分析
6
+ 在前后端分离的开发模式下,前端开发经常需要等待后端接口开发完成才能进行联调测试,这严重影响了开发效率。同时,测试环境不稳定、接口响应数据不符合预期等问题也频繁出现。
7
+
8
+ ### 业务现状介绍
9
+ - 前端开发依赖后端接口完成后才能进行功能开发和测试
10
+ - 测试环境接口不稳定,影响开发和测试效率
11
+ - 缺乏便捷的接口数据 mock 工具,手动修改响应数据效率低
12
+ - 多人协作时,mock 数据管理混乱,缺乏环境隔离
13
+
14
+ ### 业务痛点分析
15
+ 1. **开发效率低**:等待后端接口开发完成,前端无法独立开发
16
+ 2. **测试困难**:难以模拟各种边界情况和异常场景
17
+ 3. **环境污染**:测试数据相互干扰,缺乏环境隔离
18
+ 4. **数据管理**:mock 数据分散,难以管理和版本控制
19
+ 5. **协作困难**:团队成员之间无法共享和复用 mock 数据
20
+
21
+ ### 方案设计目标介绍
22
+ 开发一个基于 Whistle 的 API mock 插件,实现:
23
+ - 自动捕获真实 API 响应并支持编辑
24
+ - 灵活的 mock 开关,支持一键切换真实/模拟数据
25
+ - 完全隔离的多环境管理(分组模式:可自行管理开发、测试、预发或不同需求和复现bug等场景的mock数据)
26
+ - 版本管理功能,支持响应数据的多版本切换
27
+ - 直观的 Web UI,提升操作体验
28
+
29
+ ## 二、价值评估(技术需求必填)
30
+
31
+ ### 开发效率提升
32
+ - **并行开发**:前后端完全解耦,前端可基于接口约定独立开发,预计提升 30% 开发效率
33
+ - **快速调试**:一键切换真实/模拟数据,无需修改代码,节省 50% 调试时间
34
+ - **多场景测试**:轻松模拟各种边界情况和异常场景,覆盖率提升 40%
35
+
36
+ ### 团队协作优化
37
+ - **环境隔离**:完全隔离的多环境管理,避免测试数据相互污染
38
+ - **数据复用**:版本管理支持,团队成员可共享和复用 mock 数据
39
+ - **降低沟通成本**:减少因环境问题导致的沟通成本约 20%
40
+
41
+ ### 用户体验改进
42
+ - **直观 UI**:基于 Vue + Element UI 的现代化界面,学习成本低
43
+ - **实时预览**:修改 mock 数据后立即生效,无需重启
44
+ - **智能提示**:JSON 编辑器支持语法高亮和错误提示
45
+
46
+ ### 长期价值
47
+ - **可维护性**:插件化架构,易于扩展和维护
48
+ - **标准化**:统一团队的 mock 方案,形成最佳实践
49
+ - **成本节约**:开源方案,无需购买商业 mock 平台
50
+
51
+ ## 三、技术方案(必填)
52
+
53
+ ### 3.1 技术方案调研
54
+
55
+ #### 方案前期调研
56
+ 调研了市面上主流的 mock 方案:
57
+ 1. **Mock.js**:纯前端 mock,无法拦截真实网络请求
58
+ 2. **Yapi / Rap2**:需要独立部署后端服务,维护成本高
59
+ 3. **Charles / Fiddler**:功能强大但操作复杂,学习成本高
60
+ 4. **Whistle 插件**:轻量级,与现有工具链完美集成
61
+
62
+ #### 方案选型、优缺点对比
63
+ | 方案 | 优点 | 缺点 | 评分 |
64
+ |------|------|------|------|
65
+ | Mock.js | 轻量,易用 | 无法拦截真实请求,功能有限 | 6/10 |
66
+ | Yapi/Rap2 | 功能完善,支持团队协作 | 需要独立部署,维护成本高 | 7/10 |
67
+ | Charles/Fiddler | 功能强大,成熟稳定 | 操作复杂,学习成本高 | 7/10 |
68
+ | **Whistle 插件** | 轻量,易集成,开发友好 | 需要开发,初期投入 | **9/10** |
69
+
70
+ #### 方案调研结论
71
+ 选择基于 Whistle 开发插件,原因:
72
+ - 团队已广泛使用 Whistle,无额外学习成本
73
+ - 插件化架构,易于定制和扩展
74
+ - 轻量级,无需独立部署后端服务
75
+ - 社区活跃,生态完善
76
+
77
+ ### 3.2 技术方案整体设计(必填)
78
+
79
+ #### 整体架构
80
+ ```
81
+ ┌─────────────────────────────────────────────────────┐
82
+ │ Whistle (代理层) │
83
+ ├─────────────────────────────────────────────────────┤
84
+ │ whistle.mockbubu 插件 │
85
+ ├──────────────────┬──────────────────────────────────┤
86
+ │ 后端 (Node.js) │ 前端 (Vue 2.7) │
87
+ │ - Koa Server │ - MockContainer (主容器) │
88
+ │ - 请求拦截器 │ - RequestList (列表) │
89
+ │ - Storage API │ - RequestDetail (详情) │
90
+ │ - 分组管理器 │ - ResponsePanel (编辑器) │
91
+ │ - 版本管理 │ - GroupManager (分组管理) │
92
+ └──────────────────┴──────────────────────────────────┘
93
+ │ │
94
+ ↓ ↓
95
+ Whistle Storage Element UI + JsonEditor
96
+ (本地文件存储) (UI 组件库)
97
+ ```
98
+
99
+ #### 整体流程
100
+ 1. **请求捕获**:Whistle 拦截匹配规则的 HTTP 请求
101
+ 2. **数据存储**:插件捕获真实响应并存储到本地
102
+ 3. **Mock 开关**:用户通过 Web UI 控制是否启用 mock
103
+ 4. **数据编辑**:Web UI 提供 JSON 编辑器修改响应数据
104
+ 5. **版本管理**:支持创建多个版本并灵活切换
105
+ 6. **环境隔离**:完全隔离的分组管理,避免数据污染
106
+
107
+ #### 业务流程图
108
+
109
+ ```mermaid
110
+ flowchart TD
111
+ Start([用户发起 HTTP 请求]) --> Whistle{Whistle 规则匹配}
112
+ Whistle -->|匹配 mockbubu://| Plugin[whistle.mockbubu 插件]
113
+ Whistle -->|不匹配| PassThrough[直接透传]
114
+
115
+ Plugin --> CheckMock{检查 Mock 开关}
116
+
117
+ CheckMock -->|Mock: ON + 有缓存| ReturnMock[返回 Mock 数据]
118
+ CheckMock -->|Mock: ON + 无缓存| CaptureFirst[先捕获真实数据]
119
+ CheckMock -->|Mock: OFF| CheckCache{有缓存?}
120
+
121
+ CheckCache -->|有缓存| PassThrough2[直接透传]
122
+ CheckCache -->|无缓存| Capture[捕获真实响应]
123
+
124
+ CaptureFirst --> RealRequest1[请求真实服务器]
125
+ Capture --> RealRequest2[请求真实服务器]
126
+
127
+ RealRequest1 --> SaveData1[存储响应数据]
128
+ RealRequest2 --> SaveData2[存储响应数据]
129
+
130
+ SaveData1 --> ReturnReal1[返回真实响应]
131
+ SaveData2 --> ReturnReal2[返回真实响应]
132
+
133
+ ReturnMock --> End([返回给客户端])
134
+ ReturnReal1 --> End
135
+ ReturnReal2 --> End
136
+ PassThrough --> End
137
+ PassThrough2 --> End
138
+
139
+ style Plugin fill:#e1f5ff
140
+ style ReturnMock fill:#b7eb8f
141
+ style Capture fill:#ffe58f
142
+ style SaveData1 fill:#ffe58f
143
+ style SaveData2 fill:#ffe58f
144
+ ```
145
+
146
+ #### 请求拦截时序图
147
+
148
+ ```mermaid
149
+ sequenceDiagram
150
+ participant Client as 浏览器/客户端
151
+ participant Whistle as Whistle 代理
152
+ participant Plugin as mockbubu 插件
153
+ participant Storage as Whistle Storage
154
+ participant Server as 真实服务器
155
+
156
+ Client->>Whistle: 1. 发起 HTTP 请求
157
+ Whistle->>Whistle: 2. 匹配规则 (mockbubu://)
158
+ Whistle->>Plugin: 3. 转发到插件处理
159
+
160
+ Plugin->>Storage: 4. 读取文件配置 (mock 开关)
161
+ Storage-->>Plugin: 5. 返回配置信息
162
+
163
+ alt Mock: ON 且有缓存
164
+ Plugin->>Storage: 6a. 读取缓存数据
165
+ Storage-->>Plugin: 7a. 返回 Mock 数据
166
+ Plugin-->>Client: 8a. 返回 Mock 响应
167
+ else Mock: ON 但无缓存
168
+ Plugin->>Server: 6b. 请求真实服务器
169
+ Server-->>Plugin: 7b. 返回真实响应
170
+ Plugin->>Storage: 8b. 存储响应数据
171
+ Plugin-->>Client: 9b. 返回真实响应
172
+ else Mock: OFF 且无缓存
173
+ Plugin->>Server: 6c. 请求真实服务器
174
+ Server-->>Plugin: 7c. 返回真实响应
175
+ Plugin->>Storage: 8c. 存储响应数据 (首次捕获)
176
+ Plugin-->>Client: 9c. 返回真实响应
177
+ else Mock: OFF 且有缓存
178
+ Plugin->>Whistle: 6d. 透传请求
179
+ Whistle->>Server: 7d. 请求真实服务器
180
+ Server-->>Whistle: 8d. 返回真实响应
181
+ Whistle-->>Client: 9d. 返回真实响应
182
+ end
183
+ ```
184
+
185
+ #### 用户操作流程图
186
+
187
+ ```mermaid
188
+ flowchart LR
189
+ subgraph 初始配置
190
+ A1[配置 Whistle 规则] --> A2[启动 Whistle]
191
+ A2 --> A3[打开插件 Web UI]
192
+ end
193
+
194
+ subgraph 首次捕获
195
+ B1[触发 HTTP 请求] --> B2[插件自动捕获]
196
+ B2 --> B3[在列表中显示]
197
+ end
198
+
199
+ subgraph 数据管理
200
+ C1[点击文件查看] --> C2[编辑 Response 数据]
201
+ C2 --> C3{保存类型}
202
+ C3 -->|覆盖原版本| C4[更新 source 版本]
203
+ C3 -->|创建新版本| C5[创建 v1/v2 等版本]
204
+ C5 --> C6[版本切换]
205
+ end
206
+
207
+ subgraph Mock控制
208
+ D1[开启 Mock 开关] --> D2[再次发起请求]
209
+ D2 --> D3[返回 Mock 数据]
210
+ D3 --> D4{需要调试?}
211
+ D4 -->|是| D5[关闭 Mock 看真实数据]
212
+ D4 -->|否| D6[继续开发]
213
+ end
214
+
215
+ subgraph 环境管理
216
+ E1[创建新分组] --> E2[切换分组]
217
+ E2 --> E3[独立的 Mock 数据]
218
+ E3 --> E4[多环境隔离]
219
+ end
220
+
221
+ A3 --> B1
222
+ B3 --> C1
223
+ C6 --> D1
224
+ D6 --> E1
225
+ D5 --> B1
226
+
227
+ style A1 fill:#e6f7ff
228
+ style B2 fill:#fff7e6
229
+ style C2 fill:#f6ffed
230
+ style D1 fill:#fff1f0
231
+ style E3 fill:#f9f0ff
232
+ ```
233
+
234
+ #### 数据流图
235
+
236
+ ```mermaid
237
+ flowchart TB
238
+ subgraph 用户层
239
+ UI[Web UI 界面]
240
+ end
241
+
242
+ subgraph 应用层
243
+ API[RESTful API]
244
+ GM[Group Manager<br/>分组管理器]
245
+ VM[Version Manager<br/>版本管理器]
246
+ end
247
+
248
+ subgraph 服务层
249
+ Interceptor[Request Interceptor<br/>请求拦截器]
250
+ Utils[Utils<br/>工具函数]
251
+ end
252
+
253
+ subgraph 存储层
254
+ Storage[(Whistle Storage<br/>本地文件存储)]
255
+ Files["files/{groupId}/{filename}<br/>物理文件"]
256
+ Props[properties<br/>元数据配置]
257
+ end
258
+
259
+ subgraph 外部
260
+ Browser[浏览器请求]
261
+ RealServer[真实服务器]
262
+ end
263
+
264
+ UI -->|用户操作| API
265
+ API --> GM
266
+ API --> VM
267
+ GM --> Utils
268
+ VM --> Utils
269
+ Utils --> Storage
270
+ Storage --> Files
271
+ Storage --> Props
272
+
273
+ Browser --> Interceptor
274
+ Interceptor --> Utils
275
+ Interceptor --> RealServer
276
+ RealServer -->|真实响应| Interceptor
277
+ Interceptor -->|Mock/真实响应| Browser
278
+
279
+ style UI fill:#e6f7ff
280
+ style API fill:#fff7e6
281
+ style GM fill:#f6ffed
282
+ style VM fill:#f6ffed
283
+ style Interceptor fill:#fff1f0
284
+ style Storage fill:#f9f0ff
285
+ style Files fill:#ffd6e7
286
+ style Props fill:#ffd6e7
287
+ ```
288
+
289
+ ### 3.3 技术方案详细设计
290
+
291
+ #### 关键技术栈
292
+ **后端**:
293
+ - Node.js 18+ + Koa 2.7
294
+ - Whistle Storage API(本地文件存储)
295
+ - Koa-Router(路由)
296
+ - Koa-Bodyparser(请求体解析)
297
+
298
+ **前端**:
299
+ - Vue 2.7 + Composition API
300
+ - Element UI(UI 组件库)
301
+ - jsoneditor(JSON 编辑器)
302
+ - Vue CLI 5(构建工具)
303
+
304
+ #### 关键设计点
305
+
306
+ **1. 完全隔离架构(Phase 1 已完成)**
307
+ - 文件存储路径:`files/{groupId}/{filename}`
308
+ - 每个组独立的物理文件空间
309
+ - 组配置独立管理:`group.{groupId}.file.{filename}`
310
+ - 删除文件时无需检查其他组引用
311
+
312
+ **2. 多版本管理**
313
+ - 默认 `source` 版本(原始捕获的响应)
314
+ - 支持创建自定义版本(如 v1、v2、测试版等)
315
+ - 版本切换无需重启,实时生效
316
+ - 版本元数据:创建时间、更新时间、描述
317
+
318
+ **3. 智能捕获逻辑**
319
+ ```
320
+ if (mock && hasCache) {
321
+ // 返回 mock 数据
322
+ } else if (mock && !hasCache) {
323
+ // 先捕获真实数据
324
+ } else {
325
+ // mock:false,透传或捕获
326
+ }
327
+ ```
328
+
329
+ **4. UI 交互优化**
330
+ - Response Tab 默认选中
331
+ - localStorage 记住用户的 tab 选择
332
+ - 列表高亮状态同步(刷新、切换、删除场景)
333
+ - 表格 key 强制重渲染,解决样式残留
334
+
335
+ #### 异常边界
336
+ 1. **文件锁定机制**:防止误删重要 mock 数据
337
+ 2. **批量操作确认**:批量删除前二次确认
338
+ 3. **JSON 格式校验**:编辑器实时校验 JSON 语法
339
+ 4. **压缩响应处理**:自动解压 gzip/deflate/br
340
+ 5. **首次捕获检测**:使用 `hasProperty` 准确判断
341
+
342
+ #### 统计上报、效果监控评估
343
+ - 插件使用量:通过 npm 下载量统计
344
+ - 用户反馈:GitHub Issues 收集问题和建议
345
+ - 性能监控:日志记录关键操作耗时
346
+
347
+ #### 日志打点
348
+ - 请求捕获日志:`[mockbubu] ✅ 已捕获 | File: xxx`
349
+ - Mock 返回日志:`[mockbubu] 🔄 返回 Mock 数据 | File: xxx`
350
+ - 错误日志:`[mockbubu] ❌ 错误 | xxx`
351
+ - 调试日志:控制台输出关键状态
352
+
353
+ #### 方案阶段计划
354
+
355
+ **Phase 0(已完成)**:基础功能
356
+ - ✅ 请求捕获和 mock 开关
357
+ - ✅ Web UI 基础页面
358
+ - ✅ JSON 编辑器集成
359
+
360
+ **Phase 1(已完成)**:完全隔离架构
361
+ - ✅ 组独立文件存储
362
+ - ✅ 多版本管理
363
+ - ✅ UI 交互优化
364
+ - ✅ 发布 npm v2.0.0
365
+
366
+ **Phase 2(计划中)**:存储管理
367
+ - 🔄 存储统计信息
368
+ - 🔄 孤儿文件清理
369
+ - 🔄 未使用文件清理
370
+ - 🔄 存储空间优化
371
+
372
+ **Phase 3(规划中)**:高级功能
373
+ - 📋 导入/导出功能
374
+ - 📋 团队协作功能
375
+ - 📋 Mock 数据模板库
376
+ - 📋 智能推荐功能
377
+
378
+ #### 具体开发事项拆分
379
+ 1. **后端开发**(5 天)
380
+ - Koa 服务器搭建(0.5 天)
381
+ - 请求拦截逻辑(1 天)
382
+ - Storage API 封装(1 天)
383
+ - 分组管理器(1.5 天)
384
+ - 版本管理器(1 天)
385
+
386
+ 2. **前端开发**(5 天)
387
+ - Vue 项目搭建(0.5 天)
388
+ - 主容器和路由(0.5 天)
389
+ - 列表和详情组件(1.5 天)
390
+ - JSON 编辑器集成(1 天)
391
+ - 分组管理界面(1.5 天)
392
+
393
+ 3. **联调测试**(2 天)
394
+ - 基础功能测试(1 天)
395
+ - 边界情况测试(1 天)
396
+
397
+ #### 工作量评估
398
+ - 总工作量:**12 人天**
399
+ - 开发人员:1 名全栈工程师
400
+ - 开发周期:**2.5 周**(包含设计、开发、测试)
401
+
402
+ #### 联调排期计划
403
+ 无需与后端联调,插件独立运行。测试计划:
404
+ - 单元测试:核心工具函数测试
405
+ - 集成测试:完整流程测试
406
+ - 验收测试:实际项目中使用验证
407
+
408
+ #### 资源依赖
409
+ - ✅ Whistle 2.9.84+(已安装)
410
+ - ✅ Node.js 18+(已安装)
411
+ - ✅ Element UI 2.x(已集成)
412
+ - ✅ jsoneditor 库(已集成)
413
+
414
+ #### 测试验证标准
415
+ 1. **功能完整性**:所有需求点均已实现
416
+ 2. **稳定性**:无崩溃、无数据丢失
417
+ 3. **性能**:响应时间 < 100ms
418
+ 4. **兼容性**:支持主流浏览器(Chrome、Edge、Firefox)
419
+ 5. **用户体验**:操作流畅,UI 友好
420
+
421
+ #### 发布计划
422
+ - ✅ **v1.x.x**:基础功能发布
423
+ - ✅ **v2.0.0**:完全隔离架构 + UI 优化(2025-10-22 已发布)
424
+ - 🔄 **v2.1.0**:存储管理功能(计划中)
425
+ - 📋 **v3.0.0**:团队协作功能(规划中)
426
+
427
+ ---
428
+
429
+ ## 附录
430
+
431
+ ### 项目信息
432
+ - **项目名称**:whistle.mockbubu
433
+ - **npm 包**:https://www.npmjs.com/package/whistle.mockbubu
434
+ - **版本**:2.0.0
435
+ - **License**:MIT
436
+ - **作者**:Zac Chen <zacchen@shein.com>
437
+
438
+ ### 安装使用
439
+ ```bash
440
+ # 全局安装
441
+ npm install whistle.mockbubu -g
442
+
443
+ # 或使用 whistle 命令
444
+ w2 install whistle.mockbubu
445
+ ```
446
+
447
+ ### 核心指标(截至 v2.0.0)
448
+ - 代码行数:~3000 行(前端 + 后端)
449
+ - 文件数量:32 个
450
+ - 打包大小:3.0 MB
451
+ - 解压大小:9.8 MB
452
+ - 测试覆盖率:33 个核心测试用例
@@ -0,0 +1,145 @@
1
+ # mockbubu 捕获功能测试步骤
2
+
3
+ ## 当前状态
4
+ - ✅ Whistle 运行在端口 8899
5
+ - ✅ mockbubu 插件已加载
6
+ - ✅ 规则配置: `*.shein.com mockbubu://`
7
+ - ⚠️ **需要浏览器配置代理才能测试**
8
+
9
+ ## 测试步骤
10
+
11
+ ### 方法 1: Chrome 浏览器测试 (推荐)
12
+
13
+ 1. **安装 SwitchyOmega 插件** (如果还没安装)
14
+ - Chrome 应用商店搜索 "Proxy SwitchyOmega"
15
+ - 或者访问: https://chrome.google.com/webstore/detail/padekgcemlokbadohgkifijomclgjgif
16
+
17
+ 2. **配置代理**
18
+ - 打开 SwitchyOmega 设置
19
+ - 新建情景模式,选择 "代理服务器"
20
+ - 配置:
21
+ - 代理协议: HTTP
22
+ - 代理服务器: 127.0.0.1
23
+ - 代理端口: 8899
24
+ - 保存并启用该情景模式
25
+
26
+ 3. **访问 SHEIN 网站触发 JSON API**
27
+ - 打开: https://m.shein.com/us/
28
+ - 或者: https://www.shein.com/
29
+ - 网站会自动发送很多 JSON API 请求
30
+
31
+ 4. **查看捕获结果**
32
+ - 打开: http://127.0.0.1:8899/whistle.mockbubu/
33
+ - 应该能看到捕获的请求列表
34
+
35
+ ### 方法 2: 系统代理测试
36
+
37
+ 1. **配置系统代理** (macOS)
38
+ ```bash
39
+ # 打开系统偏好设置 > 网络 > 高级 > 代理
40
+ # 勾选 "网页代理(HTTP)"
41
+ # 服务器: 127.0.0.1
42
+ # 端口: 8899
43
+ # 勾选 "安全网页代理(HTTPS)"
44
+ # 服务器: 127.0.0.1
45
+ # 端口: 8899
46
+ ```
47
+
48
+ 2. **访问网站测试**
49
+ - 用任何浏览器打开: https://m.shein.com/
50
+ - 网站会发送 JSON API 请求
51
+
52
+ 3. **查看捕获结果**
53
+ - 打开: http://127.0.0.1:8899/whistle.mockbubu/
54
+
55
+ ### 方法 3: curl 测试 (命令行)
56
+
57
+ 由于 `m.shein.com/us/api/xxx` 这些测试端点不存在,返回的都是 HTML 页面,所以 curl 测试会失败。
58
+
59
+ **需要真实的 API 端点才能测试!**
60
+
61
+ ## 验证方法
62
+
63
+ ### 1. 检查文件是否被捕获
64
+ ```bash
65
+ # 查看 default 组的文件数量
66
+ find ~/.WhistleAppData/.whistle/.plugins/whistle.mockbubu/groups/default/files -type d -mindepth 1 -maxdepth 1 | wc -l
67
+
68
+ # 查看 index.json
69
+ cat ~/.WhistleAppData/.whistle/.plugins/whistle.mockbubu/groups/default/index.json
70
+ ```
71
+
72
+ ### 2. 查看日志
73
+ ```bash
74
+ # 查看 Whistle 主日志
75
+ tail -50 ~/.WhistleAppData/whistle.log
76
+
77
+ # 查找 mockbubu 相关日志
78
+ tail -100 ~/.WhistleAppData/whistle.log | grep mockbubu
79
+ ```
80
+
81
+ ### 3. 查看 UI
82
+ 打开浏览器访问:
83
+ - Whistle 主界面: http://127.0.0.1:8899/
84
+ - mockbubu 插件界面: http://127.0.0.1:8899/whistle.mockbubu/
85
+
86
+ ## 预期结果
87
+
88
+ 当配置正确并访问 shein.com 后,你应该看到:
89
+
90
+ 1. **文件被创建**
91
+ ```bash
92
+ $ ls ~/.WhistleAppData/.whistle/.plugins/whistle.mockbubu/groups/default/files/
93
+ 0a3f2e8b/ 1b4c5d9f/ 2e6a7f0c/ # 每个目录对应一个捕获的请求
94
+ ```
95
+
96
+ 2. **index.json 有数据**
97
+ ```json
98
+ {
99
+ "version": "3.0.0",
100
+ "files": [
101
+ {
102
+ "id": "0a3f2e8b",
103
+ "url": "https://m.shein.com/us/api/user/info",
104
+ "method": "GET",
105
+ "status": 200
106
+ }
107
+ ]
108
+ }
109
+ ```
110
+
111
+ 3. **UI 显示列表**
112
+ - 打开 http://127.0.0.1:8899/whistle.mockbubu/
113
+ - 能看到捕获的请求列表
114
+ - 点击可以查看请求详情
115
+
116
+ ## 常见问题
117
+
118
+ ### Q: 浏览器访问了网站,但没有捕获到请求?
119
+
120
+ **A:** 检查以下几点:
121
+ 1. 浏览器是否配置了代理到 127.0.0.1:8899?
122
+ 2. 代理是否启用?
123
+ 3. 访问的是否是 HTTPS 网站?(需要安装 Whistle 证书)
124
+ 4. Whistle 规则是否启用?
125
+
126
+ ### Q: 如何安装 Whistle 证书?
127
+
128
+ **A:**
129
+ 1. 配置代理后,访问: http://local.whistlejs.com/
130
+ 2. 点击 HTTPS
131
+ 3. 下载根证书并安装到系统
132
+
133
+ ### Q: curl 测试为什么不工作?
134
+
135
+ **A:** 因为测试的 API 端点不存在,返回的是 HTML 而不是 JSON。mockbubu 只捕获 JSON 响应(`Content-Type: application/json` 或 `Accept: application/json`请求)。
136
+
137
+ 需要访问真实的网站来触发真实的 API 请求才能测试。
138
+
139
+ ## 下一步
140
+
141
+ 测试通过后,可以继续:
142
+ 1. 测试 Mock 功能(开启 mock 开关,验证是否返回缓存数据)
143
+ 2. 测试版本管理功能
144
+ 3. 测试分组功能
145
+ 4. 进行完整的端到端测试