镜像自地址
https://github.com/lhly/search-syntax-pro.git
已同步 2026-10-20 22:37:48 +08:00
- 新增全局快捷键支持(Ctrl+Shift+F/Command+Shift+F) - 添加快捷键命令类型定义(chrome-commands.d.ts) - 实现版本管理工具(version.ts) - 新增模板和快捷键相关类型定义 - 优化搜索表单组件支持外部控制高级选项 - 新增引擎选择器组件(EngineSelector) - 改进全局样式和按钮样式 - 在设置页面新增快捷键配置选项 - 添加测试页面和调试工具 - 更新文档包括发布说明和测试指南 本次提交包含多项功能新增和优化,主要围绕快捷键功能的实现和用户体验提升。
240 行
5.4 KiB
Markdown
240 行
5.4 KiB
Markdown
# Round 2 修复验证测试指南
|
||
|
||
**版本**: v1.6.1
|
||
**测试时间**: 2025-11-11
|
||
|
||
---
|
||
|
||
## 快速验证清单
|
||
|
||
### 1. 并发初始化保护测试 (P0)
|
||
|
||
**测试步骤**:
|
||
1. 打开 Chrome DevTools 控制台
|
||
2. 快速刷新 Popup 页面 3-5 次
|
||
3. 观察控制台日志
|
||
|
||
**预期结果**:
|
||
```
|
||
[ShortcutManager] 开始初始化 (scope: popup)
|
||
[ShortcutManager] ✓ 注册新的键盘监听器
|
||
[ShortcutManager] 初始化完成 (scope: popup)
|
||
```
|
||
|
||
**通过标准**:
|
||
- ✅ 每次刷新只看到一组初始化日志
|
||
- ✅ 不会出现"等待正在进行的初始化完成"的日志(因为单次刷新)
|
||
- ✅ 没有重复注册监听器的警告
|
||
|
||
---
|
||
|
||
### 2. Scope 隔离测试 (P0)
|
||
|
||
**测试步骤**:
|
||
1. 同时打开 Popup 和 Options 页面
|
||
2. 在控制台过滤 "[ShortcutManager]" 日志
|
||
3. 观察初始化 scope
|
||
|
||
**预期结果**:
|
||
```
|
||
Popup 页面:
|
||
[ShortcutManager] 开始初始化 (scope: popup)
|
||
|
||
Options 页面:
|
||
[ShortcutManager] 开始初始化 (scope: options)
|
||
```
|
||
|
||
**通过标准**:
|
||
- ✅ Popup 页面使用 'popup' scope
|
||
- ✅ Options 页面使用 'options' scope
|
||
- ✅ 两个页面的监听器不会相互干扰
|
||
|
||
---
|
||
|
||
### 3. 防抖机制测试 (P1)
|
||
|
||
**测试步骤**:
|
||
1. 打开 Options → 快捷键设置页面
|
||
2. 打开控制台,过滤 "[ShortcutManager]" 日志
|
||
3. 快速连续修改 3 个快捷键(间隔 < 250ms)
|
||
4. 观察"开始重新加载配置"的日志出现次数
|
||
|
||
**预期结果**:
|
||
```
|
||
[ShortcutManager] 检测到快捷键配置变化
|
||
[ShortcutManager] 检测到快捷键配置变化
|
||
[ShortcutManager] 检测到快捷键配置变化
|
||
[ShortcutManager] 开始重新加载配置... // 只出现 1 次
|
||
```
|
||
|
||
**通过标准**:
|
||
- ✅ "检测到配置变化"出现 3 次
|
||
- ✅ "开始重新加载"只出现 1 次(防抖生效)
|
||
- ✅ 最后一次修改后 250ms 才触发重载
|
||
|
||
---
|
||
|
||
### 4. React Strict Mode 兼容性测试 (P0)
|
||
|
||
**测试步骤**:
|
||
1. 确保 `src/main.tsx` 中包含 `<React.StrictMode>`
|
||
2. 在开发模式下刷新 Popup 页面
|
||
3. 观察控制台日志
|
||
|
||
**预期结果** (开发模式):
|
||
```
|
||
第一次 mount:
|
||
[ShortcutManager] 开始初始化 (scope: popup)
|
||
[ShortcutManager] 初始化完成 (scope: popup)
|
||
|
||
Strict Mode unmount:
|
||
(destroy 被调用)
|
||
|
||
第二次 mount:
|
||
[ShortcutManager] 开始初始化 (scope: popup)
|
||
[ShortcutManager] 初始化完成 (scope: popup)
|
||
```
|
||
|
||
**通过标准**:
|
||
- ✅ 两次初始化都正常完成
|
||
- ✅ 没有错误或警告
|
||
- ✅ 监听器不会重复注册
|
||
|
||
---
|
||
|
||
### 5. 日志增强验证 (P1)
|
||
|
||
**测试步骤**:
|
||
1. 刷新任意页面
|
||
2. 观察控制台日志的详细程度
|
||
|
||
**预期结果**:
|
||
```
|
||
[ShortcutManager] 开始初始化 (scope: popup)
|
||
[ShortcutManager] ✓ 注册新的键盘监听器
|
||
[ShortcutManager] 初始化完成 (scope: popup)
|
||
```
|
||
|
||
刷新后再次加载:
|
||
```
|
||
[ShortcutManager] 已初始化 (scope: popup),跳过重复初始化
|
||
```
|
||
|
||
**通过标准**:
|
||
- ✅ 日志包含清晰的步骤标识(✓ 符号)
|
||
- ✅ scope 信息明确显示
|
||
- ✅ 重复初始化有明确提示
|
||
|
||
---
|
||
|
||
## 完整功能回归测试
|
||
|
||
### 基础功能
|
||
- [ ] 快捷键正常触发
|
||
- [ ] 搜索执行正常
|
||
- [ ] 引擎切换正常
|
||
- [ ] 历史记录正常
|
||
|
||
### 快捷键管理
|
||
- [ ] 自定义快捷键保存成功
|
||
- [ ] 快捷键冲突检测正常
|
||
- [ ] 重置快捷键功能正常
|
||
- [ ] 快捷键实时同步正常
|
||
|
||
### 跨上下文
|
||
- [ ] Popup 和 Options 同时打开无冲突
|
||
- [ ] Options 修改快捷键,Popup 实时更新
|
||
- [ ] Popup 使用快捷键不影响 Options
|
||
|
||
---
|
||
|
||
## 性能测试
|
||
|
||
### 1. 内存泄漏检测
|
||
**测试步骤**:
|
||
1. 打开 Chrome DevTools → Performance → Memory
|
||
2. 录制 heap snapshot
|
||
3. 刷新 Popup 10 次
|
||
4. 再次录制 heap snapshot
|
||
5. 对比两次快照的监听器数量
|
||
|
||
**通过标准**:
|
||
- ✅ 监听器数量保持稳定(1-2 个)
|
||
- ✅ 内存增长在合理范围内
|
||
- ✅ 没有未清理的定时器
|
||
|
||
### 2. 防抖性能测试
|
||
**测试步骤**:
|
||
1. 在 Options 页面快速修改 10 个快捷键
|
||
2. 观察控制台日志中"重新加载"的次数
|
||
3. 对比修复前后的差异
|
||
|
||
**通过标准**:
|
||
- ✅ 修复前: 10 次重载
|
||
- ✅ 修复后: 1 次重载
|
||
- ✅ 性能提升约 90%
|
||
|
||
---
|
||
|
||
## 自动化测试建议
|
||
|
||
### 单元测试 (可选)
|
||
```typescript
|
||
describe('ShortcutManager - 并发初始化', () => {
|
||
it('应该防止并发初始化', async () => {
|
||
const manager = new ShortcutManager();
|
||
|
||
// 同时调用 3 次 initialize
|
||
const promises = [
|
||
manager.initialize('popup'),
|
||
manager.initialize('popup'),
|
||
manager.initialize('popup')
|
||
];
|
||
|
||
await Promise.all(promises);
|
||
|
||
// 验证只初始化一次
|
||
expect(setupListenersCalls).toBe(1);
|
||
});
|
||
});
|
||
|
||
describe('ShortcutManager - 防抖', () => {
|
||
it('应该防抖重载配置', async () => {
|
||
jest.useFakeTimers();
|
||
|
||
// 快速触发 3 次变化
|
||
fireStorageChange();
|
||
fireStorageChange();
|
||
fireStorageChange();
|
||
|
||
// 快进 250ms
|
||
jest.advanceTimersByTime(250);
|
||
|
||
// 验证只重载一次
|
||
expect(reloadShortcutsCalls).toBe(1);
|
||
});
|
||
});
|
||
```
|
||
|
||
---
|
||
|
||
## 通过标准总结
|
||
|
||
### 最低通过要求
|
||
- ✅ 所有 P0 测试 100% 通过
|
||
- ✅ 所有 P1 测试至少 80% 通过
|
||
- ✅ 无编译错误或警告
|
||
- ✅ 无控制台错误
|
||
|
||
### 生产就绪标准
|
||
- ✅ 所有测试 100% 通过
|
||
- ✅ 性能提升可量化(防抖测试)
|
||
- ✅ 内存稳定,无泄漏
|
||
- ✅ 日志清晰,便于调试
|
||
|
||
---
|
||
|
||
**预计测试时间**: 15-20 分钟
|
||
**建议测试环境**: Chrome 120+ (开发模式 + 生产模式各测一遍)
|
||
**测试完成标准**: 所有测试项通过,质量评分 ≥90/100
|