|
|
# 集成测试运行指南
|
|
|
|
|
|
## 运行测试
|
|
|
|
|
|
### 1. 运行所有测试
|
|
|
|
|
|
```bash
|
|
|
cd D:\Projects\nnet
|
|
|
go test ./test/integration -v
|
|
|
```
|
|
|
|
|
|
### 2. 运行特定测试
|
|
|
|
|
|
```bash
|
|
|
# 运行基础测试
|
|
|
go test ./test/integration -v -run TestBasicServerClient
|
|
|
|
|
|
# 运行路由测试
|
|
|
go test ./test/integration -v -run TestRouter
|
|
|
|
|
|
# 运行协议测试
|
|
|
go test ./test/integration -v -run TestProtocol
|
|
|
|
|
|
# 运行拦截器测试
|
|
|
go test ./test/integration -v -run TestInterceptor
|
|
|
|
|
|
# 运行编解码器测试
|
|
|
go test ./test/integration -v -run TestCodec
|
|
|
```
|
|
|
|
|
|
### 3. 运行测试并显示覆盖率
|
|
|
|
|
|
```bash
|
|
|
go test ./test/integration -v -cover
|
|
|
```
|
|
|
|
|
|
### 4. 运行测试并生成覆盖率报告
|
|
|
|
|
|
```bash
|
|
|
go test ./test/integration -v -coverprofile=coverage.out
|
|
|
go tool cover -html=coverage.out -o coverage.html
|
|
|
```
|
|
|
|
|
|
### 5. 运行测试并设置超时
|
|
|
|
|
|
```bash
|
|
|
go test ./test/integration -v -timeout 60s
|
|
|
```
|
|
|
|
|
|
## 获取测试结果
|
|
|
|
|
|
### 1. 控制台输出
|
|
|
|
|
|
测试结果会直接输出到控制台,包括:
|
|
|
- 测试名称
|
|
|
- 测试状态(PASS/FAIL)
|
|
|
- 测试日志(t.Logf输出)
|
|
|
- 错误信息(如果有)
|
|
|
|
|
|
### 2. 保存测试结果到文件
|
|
|
|
|
|
```bash
|
|
|
# 保存到文件
|
|
|
go test ./test/integration -v > test_results.txt 2>&1
|
|
|
|
|
|
# 或者使用PowerShell
|
|
|
go test ./test/integration -v 2>&1 | Tee-Object -FilePath test_results.txt
|
|
|
```
|
|
|
|
|
|
### 3. 使用JSON格式输出
|
|
|
|
|
|
```bash
|
|
|
go test ./test/integration -v -json > test_results.json
|
|
|
```
|
|
|
|
|
|
## 如何将测试结果告知我
|
|
|
|
|
|
### 方式1: 复制测试输出
|
|
|
|
|
|
1. 运行测试命令
|
|
|
2. 复制控制台输出
|
|
|
3. 将输出粘贴给我
|
|
|
|
|
|
### 方式2: 保存到文件并分享
|
|
|
|
|
|
1. 运行测试并保存到文件:
|
|
|
```bash
|
|
|
go test ./test/integration -v > test_results.txt 2>&1
|
|
|
```
|
|
|
2. 将 `test_results.txt` 文件内容分享给我
|
|
|
|
|
|
### 方式3: 只分享失败信息
|
|
|
|
|
|
如果测试失败,可以只分享失败的部分:
|
|
|
```bash
|
|
|
go test ./test/integration -v 2>&1 | Select-String -Pattern "FAIL|Error|timeout" -Context 5
|
|
|
```
|
|
|
|
|
|
## 测试结果格式说明
|
|
|
|
|
|
### 成功的测试
|
|
|
|
|
|
```
|
|
|
=== RUN TestBasicServerClient
|
|
|
--- PASS: TestBasicServerClient (1.23s)
|
|
|
```
|
|
|
|
|
|
### 失败的测试
|
|
|
|
|
|
```
|
|
|
=== RUN TestBasicServerClient
|
|
|
integration_test.go:75: Response for 'hello': ""
|
|
|
integration_test.go:77:
|
|
|
Error Trace: D:/Projects/nnet/test/integration/basic_test.go:77
|
|
|
Error: Received unexpected error:
|
|
|
read tcp 127.0.0.1:61899->127.0.0.1:61895: i/o timeout
|
|
|
Test: TestBasicServerClient
|
|
|
Messages: Request should succeed
|
|
|
--- FAIL: TestBasicServerClient (15.45s)
|
|
|
```
|
|
|
|
|
|
## 注意事项
|
|
|
|
|
|
1. **Windows防火墙**: 第一次运行时,Windows防火墙可能会弹出确认对话框,需要点击"允许访问"
|
|
|
|
|
|
2. **端口占用**: 测试使用随机端口,通常不会出现端口冲突。如果出现端口占用错误,可以:
|
|
|
- 等待几秒钟后重试
|
|
|
- 检查是否有其他进程占用端口
|
|
|
|
|
|
3. **超时设置**: 测试默认超时时间为3秒。如果测试经常超时,可以:
|
|
|
- 增加超时时间:`-timeout 60s`
|
|
|
- 检查服务器启动时间
|
|
|
- 查看KNOWN_ISSUES.md了解已知问题
|
|
|
|
|
|
4. **日志级别**: 测试使用info级别日志。如果需要更详细的日志,可以:
|
|
|
- 修改测试代码中的日志级别为debug
|
|
|
- 查看服务器日志输出
|
|
|
|
|
|
## 常见问题
|
|
|
|
|
|
### 1. 测试超时
|
|
|
|
|
|
**现象**: 测试超时,客户端无法收到响应
|
|
|
|
|
|
**可能原因**:
|
|
|
- 服务器启动慢
|
|
|
- 网络延迟
|
|
|
- gnet AsyncWrite机制问题(参见KNOWN_ISSUES.md)
|
|
|
|
|
|
**解决方法**:
|
|
|
- 增加超时时间
|
|
|
- 检查服务器日志
|
|
|
- 查看KNOWN_ISSUES.md
|
|
|
|
|
|
### 2. 端口冲突
|
|
|
|
|
|
**现象**: 错误信息显示端口已被占用
|
|
|
|
|
|
**解决方法**:
|
|
|
- 等待几秒钟后重试
|
|
|
- 检查是否有其他进程占用端口
|
|
|
- 测试使用随机端口,通常不会冲突
|
|
|
|
|
|
### 3. 防火墙阻止
|
|
|
|
|
|
**现象**: Windows防火墙弹出确认对话框
|
|
|
|
|
|
**解决方法**:
|
|
|
- 点击"允许访问"
|
|
|
- 在防火墙设置中添加例外(参见KNOWN_ISSUES.md)
|
|
|
|
|
|
## 测试文件说明
|
|
|
|
|
|
- `basic_test.go` - 基础测试(服务器-客户端通信、Echo路由、多客户端)
|
|
|
- `router_test.go` - 路由测试(帧数据路由、路由中间件)
|
|
|
- `protocol_test.go` - 协议测试(协议版本管理)
|
|
|
- `interceptor_test.go` - 拦截器测试(拦截器验证)
|
|
|
- `codec_test.go` - 编解码器测试(JSON、二进制编解码器)
|
|
|
- `simple_test.go` - 简单测试(用于调试)
|
|
|
- `integration_test.go` - 测试工具函数
|
|
|
- `helper.go` - 测试辅助函数
|
|
|
|
|
|
## 下一步
|
|
|
|
|
|
运行测试后,请将测试结果(特别是失败信息)分享给我,我会根据结果进行相应的修复和改进。
|
|
|
|