236 lines
4.2 KiB
Markdown
236 lines
4.2 KiB
Markdown
# 测试和健康检查脚本
|
||
|
||
## 使用流程
|
||
|
||
### 1️⃣ 启动基础服务
|
||
|
||
```bash
|
||
# 启动 Redis
|
||
redis-server --daemonize yes
|
||
|
||
# 或使用 Docker
|
||
docker compose up -d redis
|
||
```
|
||
|
||
### 2️⃣ 启动 Blockchain Service
|
||
|
||
```bash
|
||
# 在项目根目录
|
||
npm run start:dev
|
||
```
|
||
|
||
### 3️⃣ 运行健康检查
|
||
|
||
```bash
|
||
# 进入 scripts 目录
|
||
cd scripts
|
||
|
||
# 运行健康检查
|
||
./health-check.sh
|
||
```
|
||
|
||
**期望输出:**
|
||
```
|
||
🏥 开始健康检查...
|
||
|
||
=== 数据库服务 ===
|
||
Checking PostgreSQL ... ✓ OK
|
||
=== 缓存服务 ===
|
||
Checking Redis ... ✓ OK
|
||
=== 消息队列服务 ===
|
||
Checking Kafka ... ✓ OK
|
||
=== 区块链 RPC ===
|
||
Checking KAVA RPC ... ✓ OK
|
||
Checking BSC RPC ... ✓ OK
|
||
=== 应用服务 ===
|
||
Checking Blockchain Service ... ✓ OK
|
||
=== API 文档 ===
|
||
Checking Swagger UI ... ✓ OK
|
||
|
||
======================================
|
||
健康检查完成!
|
||
正常: 7
|
||
异常: 0
|
||
======================================
|
||
✓ 所有服务正常!
|
||
|
||
现在可以运行测试:
|
||
./scripts/quick-test.sh
|
||
```
|
||
|
||
### 4️⃣ 运行快速功能测试
|
||
|
||
```bash
|
||
./quick-test.sh
|
||
```
|
||
|
||
这个脚本会自动测试所有核心功能:
|
||
- ✅ 健康检查
|
||
- ✅ 余额查询(单链/多链)
|
||
- ✅ 地址派生
|
||
- ✅ 用户地址查询
|
||
- ✅ 错误场景处理
|
||
- ✅ API 文档可访问性
|
||
|
||
---
|
||
|
||
## 脚本说明
|
||
|
||
### `health-check.sh`
|
||
- **作用**: 检查所有依赖服务是否正常运行
|
||
- **使用场景**: 部署前、调试时
|
||
- **检查项目**:
|
||
- PostgreSQL 数据库
|
||
- Redis 缓存
|
||
- Kafka 消息队列
|
||
- KAVA/BSC RPC 端点
|
||
- Blockchain Service 应用
|
||
|
||
### `quick-test.sh`
|
||
- **作用**: 快速测试所有核心 API 功能
|
||
- **使用场景**: 验证功能完整性、回归测试
|
||
- **前置条件**: `health-check.sh` 通过
|
||
|
||
### `start-all.sh`
|
||
- **作用**: 一键启动所有服务
|
||
- **使用场景**: 初次启动、快速启动环境
|
||
- **前置条件**: 依赖已安装
|
||
|
||
### `stop-service.sh`
|
||
- **作用**: 停止 Blockchain Service
|
||
- **使用场景**: 需要停止服务时
|
||
|
||
### `rebuild-kafka.sh`
|
||
- **作用**: 重建 Kafka 容器
|
||
- **使用场景**: Kafka 配置变更后
|
||
|
||
---
|
||
|
||
## 主要 API 端点
|
||
|
||
| 端点 | 方法 | 描述 |
|
||
|------|------|------|
|
||
| `/health` | GET | 健康检查 |
|
||
| `/health/ready` | GET | 就绪检查 |
|
||
| `/balance` | GET | 查询单链余额 |
|
||
| `/balance/multi-chain` | GET | 查询多链余额 |
|
||
| `/internal/derive-address` | POST | 从公钥派生地址 |
|
||
| `/internal/user/:userId/addresses` | GET | 获取用户地址 |
|
||
| `/api` | GET | Swagger 文档 |
|
||
|
||
---
|
||
|
||
## 部署脚本 (deploy.sh)
|
||
|
||
主部署脚本位于项目根目录,提供以下命令:
|
||
|
||
```bash
|
||
# 构建 Docker 镜像
|
||
./deploy.sh build
|
||
|
||
# 启动服务
|
||
./deploy.sh start
|
||
|
||
# 停止服务
|
||
./deploy.sh stop
|
||
|
||
# 重启服务
|
||
./deploy.sh restart
|
||
|
||
# 查看日志
|
||
./deploy.sh logs
|
||
|
||
# 健康检查
|
||
./deploy.sh health
|
||
|
||
# 运行数据库迁移
|
||
./deploy.sh migrate
|
||
|
||
# 打开 Prisma Studio
|
||
./deploy.sh prisma-studio
|
||
|
||
# 进入容器 shell
|
||
./deploy.sh shell
|
||
|
||
# 查询余额
|
||
./deploy.sh check-balance KAVA 0x1234...
|
||
|
||
# 触发区块扫描
|
||
./deploy.sh scan-blocks
|
||
```
|
||
|
||
---
|
||
|
||
## 常见问题
|
||
|
||
### Q: 为什么 RPC 检查失败?
|
||
**A:** 检查网络连接,或者 RPC 端点可能暂时不可用
|
||
|
||
### Q: Redis 启动失败?
|
||
**A:** 检查是否已经在运行
|
||
```bash
|
||
ps aux | grep redis
|
||
redis-cli shutdown # 如果已运行
|
||
redis-server --daemonize yes
|
||
```
|
||
|
||
### Q: Kafka 连接失败?
|
||
**A:** 重建 Kafka 容器
|
||
```bash
|
||
./scripts/rebuild-kafka.sh
|
||
```
|
||
|
||
---
|
||
|
||
## 完整测试流程
|
||
|
||
```bash
|
||
# 1. 进入项目目录
|
||
cd ~/work/rwadurian/backend/services/blockchain-service
|
||
|
||
# 2. 安装依赖(首次)
|
||
npm install
|
||
|
||
# 3. 生成 Prisma Client
|
||
npx prisma generate
|
||
|
||
# 4. 运行数据库迁移
|
||
npx prisma migrate dev
|
||
|
||
# 5. 启动所有服务
|
||
./scripts/start-all.sh
|
||
|
||
# 6. 运行健康检查
|
||
./scripts/health-check.sh
|
||
|
||
# 7. 运行快速测试
|
||
./scripts/quick-test.sh
|
||
|
||
# 8. 运行完整测试
|
||
npm test
|
||
npm run test:e2e
|
||
```
|
||
|
||
---
|
||
|
||
## 区块链特定测试
|
||
|
||
### 测试余额查询
|
||
```bash
|
||
# KAVA 链
|
||
curl "http://localhost:3012/balance?chainType=KAVA&address=0x..."
|
||
|
||
# 多链查询
|
||
curl "http://localhost:3012/balance/multi-chain?address=0x..."
|
||
```
|
||
|
||
### 测试地址派生
|
||
```bash
|
||
curl -X POST "http://localhost:3012/internal/derive-address" \
|
||
-H "Content-Type: application/json" \
|
||
-d '{
|
||
"userId": "12345",
|
||
"publicKey": "0x02..."
|
||
}'
|
||
```
|