blob: 690b6a9b367ab7639c3b44a95a003ebc309e6624 [file] [view]
# E2E 测试 Debug 指南
本文档说明如何调试 E2E 测试。
## 方法一:使用 VS Code Debug 配置(推荐)
项目已配置好多个 debug 启动配置,位于 `.vscode/launch.json`
### 1. Debug E2E Tests
调试所有 E2E 测试
**使用步骤:**
1. `F5` 或点击 VS Code 左侧的"运行和调试"图标
2. 选择 "Debug E2E Tests"
3. 点击绿色播放按钮或按 `F5`
### 2. Debug Current E2E Test File
调试当前打开的测试文件
**使用步骤:**
1. VS Code 中打开要调试的测试文件(如 `Session.test.ts`
2. `F5` 或选择 "Debug Current E2E Test File"
3. 在代码中设置断点(点击行号左侧)
### 3. Debug Unit Tests
调试所有单元测试
### 4. Debug All Tests
调试所有测试(单元测试 + E2E 测试)
## 方法二:使用命令行脚本
### Debug E2E 测试
```bash
npm run test:e2e:debug
```
### Debug 所有测试
```bash
npm run test:debug
```
**使用步骤:**
1. 运行上述命令
2. 打开 Chrome 浏览器,访问 `chrome://inspect`
3. 点击 "inspect" 链接
4. Chrome DevTools 中设置断点和调试
## 环境变量配置
E2E 测试需要连接到 IoTDB 实例。可以通过环境变量配置连接信息:
```bash
export IOTDB_HOST=localhost
export IOTDB_PORT=6667
export IOTDB_USER=root
export IOTDB_PASSWORD=root
export LOG_LEVEL=DEBUG # 开启详细日志
```
### 使用 .env 文件(可选)
创建 `.env` 文件:
```bash
IOTDB_HOST=localhost
IOTDB_PORT=6667
IOTDB_USER=root
IOTDB_PASSWORD=root
LOG_LEVEL=DEBUG
```
然后在终端中执行:
```bash
source .env
npm run test:e2e:debug
```
## 设置断点
### VS Code 中设置断点
1. 在代码行号左侧点击,会出现红色圆点
2. 或者将光标放在要断点的行,按 `F9`
### 常见断点位置
- 测试文件中的 `test()` 函数内部
- Session SessionPool 方法调用前后
- 数据处理逻辑
- 错误处理 `catch`
## Debug 技巧
### 1. 使用 `--runInBand`
所有 debug 配置都使用了 `--runInBand` 参数,这会:
- 串行运行测试(而非并行)
- 使调试更稳定
- 避免多个测试同时运行的干扰
### 2. 调试单个测试
在测试文件中,可以临时使用 `test.only()` 来只运行特定测试:
```typescript
test.only("Should execute query statement", async () => {
// 只运行这个测试
});
```
### 3. 查看详细日志
设置 `LOG_LEVEL=DEBUG` 环境变量可以看到更详细的日志输出:
- Thrift 连接详情
- SQL 语句执行
- 数据序列化/反序列化过程
### 4. 使用 debugger 语句
在代码中直接添加 `debugger;` 语句:
```typescript
test("Should insert data", async () => {
const tablet = {
/* ... */
};
debugger; // 执行到这里会自动暂停
await session.insertTablet(tablet);
});
```
## 使用 Docker 启动 IoTDB 实例
如果没有运行的 IoTDB 实例,可以使用 Docker 快速启动:
### 单节点(推荐用于调试)
```bash
docker-compose -f docker-compose-1c1d.yml up -d
```
### 3节点集群
```bash
docker-compose -f docker-compose-3c3d.yml up -d
```
### 停止 IoTDB
```bash
docker-compose -f docker-compose-1c1d.yml down
```
## 故障排查
### 问题:无法连接到 IoTDB
**解决方案:**
1. 检查 IoTDB 是否正在运行
2. 确认环境变量 `IOTDB_HOST` `IOTDB_PORT` 是否正确
3. 查看 IoTDB 日志:`docker logs iotdb-datanode`
### 问题:断点不生效
**解决方案:**
1. 确保使用了 `--inspect-brk` 参数(已在配置中)
2. 检查是否使用了 `--runInBand` 参数(已在配置中)
3. 尝试重启 VS Code
### 问题:测试超时
**解决方案:**
1. `jest.config.js` 中增加超时时间
2. 或在具体测试中设置:`test('...', async () => {...}, 120000)`
## 高级用法
### 条件断点
VS Code 中右键点击断点,选择"编辑断点" "表达式",可以设置条件:
```javascript
row.length > 10; // 只在满足条件时暂停
```
### Logpoint(日志点)
不想停止执行,只想输出日志?右键断点选择"Logpoint"
```javascript
result.rows.length: {result.rows.length}
```
### Watch 表达式
Debug 面板的 "WATCH" 区域添加表达式,实时监控变量值。
## 示例:调试一个失败的测试
1. 打开 `tests/e2e/Session.test.ts`
2. 在失败的测试中设置断点
3. 选择 "Debug Current E2E Test File" 配置
4. `F5` 开始调试
5. 使用 Debug 工具栏:
- Continue (F5): 继续执行
- Step Over (F10): 单步跳过
- Step Into (F11): 单步进入
- Step Out (Shift+F11): 跳出当前函数
6. 查看变量面板中的值
7. Debug Console 中执行表达式查看状态
## 参考资源
- [VS Code Debugging Guide](https://code.visualstudio.com/docs/editor/debugging)
- [Jest Debugging Guide](https://jestjs.io/docs/troubleshooting)
- [Node.js Debugging Guide](https://nodejs.org/en/docs/guides/debugging-getting-started/)