This commit is contained in:
hailin 2025-11-24 03:26:09 -08:00
parent 4cdd0b07b9
commit ff65cdf3c1
3 changed files with 318 additions and 7 deletions

View File

@ -0,0 +1,235 @@
# 测试和健康检查脚本
## 使用流程
### 1⃣ 启动 Redis如果未启动
```bash
# 启动 Redis
redis-server --daemonize yes
# 或者使用后台启动
redis-server &
```
### 2⃣ 启动 Identity Service
```bash
# 在项目根目录
npm run start:dev
```
### 3⃣ 运行健康检查
```bash
# 进入 scripts 目录
cd scripts
# 运行健康检查
./health-check.sh
```
**期望输出:**
```
🏥 开始健康检查...
=== 数据库服务 ===
Checking PostgreSQL ... ✓ OK
=== 缓存服务 ===
Checking Redis ... ✓ OK
=== 消息队列服务 ===
Checking Kafka ... ✓ OK
=== 应用服务 ===
Checking Identity Service ... ✓ OK
=== API 文档 ===
Checking Swagger UI ... ✓ OK
======================================
健康检查完成!
正常: 5
异常: 0
======================================
✓ 所有服务正常!
现在可以运行测试:
./scripts/quick-test.sh
```
### 4⃣ 运行快速功能测试
```bash
./quick-test.sh
```
这个脚本会自动测试所有核心功能:
- ✅ 账户创建
- ✅ 个人资料管理
- ✅ 设备管理
- ✅ Token 刷新
- ✅ 助记词恢复
- ✅ 推荐码查询
- ✅ KYC 提交
- ✅ 错误场景处理
---
## 如果健康检查失败
`health-check.sh` 显示服务异常时,它会给出修复建议:
```bash
✗ 存在异常的服务!
修复建议:
• Redis: redis-server --daemonize yes
• Identity Service: npm run start:dev
或者运行一键启动脚本:
./scripts/start-all.sh
```
### 手动修复步骤
#### Redis 未启动
```bash
redis-server --daemonize yes
```
#### Identity Service 未启动
```bash
# 在项目根目录
npm run start:dev
```
#### PostgreSQL 未启动
```bash
# Ubuntu/Debian
sudo systemctl start postgresql
# macOS
brew services start postgresql
# Windows
# 使用 PostgreSQL 服务管理器
```
---
## 一键启动(推荐)
如果想一次性启动所有服务:
```bash
./scripts/start-all.sh
```
这个脚本会:
1. ✅ 启动 Redis如果未运行
2. ✅ 检查 PostgreSQL 状态
3. ✅ 检查 Kafka 状态
4. ✅ 启动 Identity Service
5. ✅ 等待服务就绪
6. ✅ 自动运行健康检查
---
## 脚本说明
### `health-check.sh`
- **作用**: 检查所有依赖服务是否正常运行
- **使用场景**: 部署前、调试时
- **前置条件**: 所有服务需要已启动
### `quick-test.sh`
- **作用**: 快速测试所有核心 API 功能
- **使用场景**: 验证功能完整性、回归测试
- **前置条件**: `health-check.sh` 通过
### `start-all.sh`
- **作用**: 一键启动所有服务
- **使用场景**: 初次启动、快速启动环境
- **前置条件**: 依赖已安装PostgreSQL、Redis、Kafka
---
## 常见问题
### Q: 为什么 `curl: command not found`?
**A:** 安装 curl
```bash
# Ubuntu/Debian
sudo apt-get install curl
# macOS (通常已安装)
brew install curl
```
### Q: 为什么 `jq: command not found`?
**A:** `quick-test.sh` 需要 jq 来解析 JSON
```bash
# Ubuntu/Debian
sudo apt-get install jq
# macOS
brew install jq
```
### Q: Redis 启动失败?
**A:** 检查是否已经在运行
```bash
# 查看 Redis 进程
ps aux | grep redis
# 如果已运行,先停止
redis-cli shutdown
# 然后重新启动
redis-server --daemonize yes
```
### Q: Identity Service 启动失败?
**A:** 检查日志
```bash
# 查看启动日志
npm run start:dev
# 常见问题:
# 1. 端口 3000 已被占用 → 修改 PORT 环境变量
# 2. 数据库连接失败 → 检查 .env 配置
# 3. Redis 连接失败 → 确保 Redis 已启动
```
---
## 完整测试流程
```bash
# 1. 进入项目目录
cd ~/work/rwadurian/backend/services/identity-service
# 2. 安装依赖(首次)
npm install
# 3. 启动所有服务
./scripts/start-all.sh
# 4. 运行健康检查
./scripts/health-check.sh
# 5. 运行快速测试
./scripts/quick-test.sh
# 6. 运行完整测试
npm test
npm run test:e2e
```
---
## 下一步
所有脚本通过后,可以进行:
- 📊 [集成测试](../test/integration-checklist.md)
- 🔒 [安全测试](../test/security-test-checklist.md)
- ⚡ [性能测试](../test/performance-test.md)
- 📝 [手动测试](../test/manual-test-scenarios.md)

View File

@ -1,24 +1,25 @@
#!/bin/bash #!/bin/bash
# 健康检查脚本 - 检查所有依赖服务是否正常 # 健康检查脚本 - 检查所有依赖服务是否正常
set -e
echo "🏥 开始健康检查..." echo "🏥 开始健康检查..."
echo "" echo ""
GREEN='\033[0;32m' GREEN='\033[0;32m'
RED='\033[0;31m' RED='\033[0;31m'
YELLOW='\033[1;33m' YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' NC='\033[0m'
# 检查计数 # 检查计数
PASS=0 PASS=0
FAIL=0 FAIL=0
FAILED_SERVICES=()
# 检查函数 # 检查函数
check_service() { check_service() {
local service_name=$1 local service_name=$1
local check_command=$2 local check_command=$2
local fix_command=$3
echo -n "Checking $service_name ... " echo -n "Checking $service_name ... "
@ -28,28 +29,29 @@ check_service() {
else else
echo -e "${RED}✗ FAIL${NC}" echo -e "${RED}✗ FAIL${NC}"
FAIL=$((FAIL + 1)) FAIL=$((FAIL + 1))
FAILED_SERVICES+=("$service_name:$fix_command")
fi fi
} }
# 检查 PostgreSQL # 检查 PostgreSQL
echo -e "${YELLOW}=== 数据库服务 ===${NC}" echo -e "${YELLOW}=== 数据库服务 ===${NC}"
check_service "PostgreSQL" "pg_isready -h localhost -p 5432" check_service "PostgreSQL" "pg_isready -h localhost -p 5432" "sudo systemctl start postgresql"
# 检查 Redis # 检查 Redis
echo -e "${YELLOW}=== 缓存服务 ===${NC}" echo -e "${YELLOW}=== 缓存服务 ===${NC}"
check_service "Redis" "redis-cli -h localhost -p 6379 ping" check_service "Redis" "redis-cli -h localhost -p 6379 ping" "redis-server --daemonize yes"
# 检查 Kafka # 检查 Kafka
echo -e "${YELLOW}=== 消息队列服务 ===${NC}" echo -e "${YELLOW}=== 消息队列服务 ===${NC}"
check_service "Kafka" "nc -zv localhost 9092" check_service "Kafka" "nc -zv localhost 9092" "启动 Kafka (需要手动启动)"
# 检查应用服务 # 检查应用服务
echo -e "${YELLOW}=== 应用服务 ===${NC}" echo -e "${YELLOW}=== 应用服务 ===${NC}"
check_service "Identity Service" "curl -f http://localhost:3000/health" check_service "Identity Service" "curl -f http://localhost:3000/health" "npm run start:dev"
# 检查 Swagger 文档 # 检查 Swagger 文档
echo -e "${YELLOW}=== API 文档 ===${NC}" echo -e "${YELLOW}=== API 文档 ===${NC}"
check_service "Swagger UI" "curl -f http://localhost:3000/api" check_service "Swagger UI" "curl -f http://localhost:3000/api" "等待 Identity Service 启动"
echo "" echo ""
echo -e "${YELLOW}======================================${NC}" echo -e "${YELLOW}======================================${NC}"
@ -60,8 +62,21 @@ echo -e "${YELLOW}======================================${NC}"
if [ $FAIL -eq 0 ]; then if [ $FAIL -eq 0 ]; then
echo -e "${GREEN}✓ 所有服务正常!${NC}" echo -e "${GREEN}✓ 所有服务正常!${NC}"
echo ""
echo -e "${BLUE}现在可以运行测试:${NC}"
echo " ./scripts/quick-test.sh"
exit 0 exit 0
else else
echo -e "${RED}✗ 存在异常的服务!${NC}" echo -e "${RED}✗ 存在异常的服务!${NC}"
echo ""
echo -e "${BLUE}修复建议:${NC}"
for service_info in "${FAILED_SERVICES[@]}"; do
service_name="${service_info%%:*}"
fix_command="${service_info#*:}"
echo -e "${YELLOW}$service_name:${NC} $fix_command"
done
echo ""
echo -e "${BLUE}或者运行一键启动脚本:${NC}"
echo " ./scripts/start-all.sh"
exit 1 exit 1
fi fi

View File

@ -0,0 +1,61 @@
#!/bin/bash
# 一键启动所有服务
set -e
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m'
echo -e "${YELLOW}🚀 启动所有服务...${NC}"
echo ""
# 1. 启动 Redis
echo -e "${YELLOW}启动 Redis...${NC}"
if ! pgrep -x "redis-server" > /dev/null; then
redis-server --daemonize yes
echo -e "${GREEN}✓ Redis 已启动${NC}"
else
echo -e "${GREEN}✓ Redis 已在运行${NC}"
fi
# 2. 检查 PostgreSQL
echo -e "${YELLOW}检查 PostgreSQL...${NC}"
if pg_isready -h localhost -p 5432 > /dev/null 2>&1; then
echo -e "${GREEN}✓ PostgreSQL 已在运行${NC}"
else
echo -e "${YELLOW}⚠ PostgreSQL 未运行,请手动启动${NC}"
fi
# 3. 检查 Kafka
echo -e "${YELLOW}检查 Kafka...${NC}"
if nc -zv localhost 9092 > /dev/null 2>&1; then
echo -e "${GREEN}✓ Kafka 已在运行${NC}"
else
echo -e "${YELLOW}⚠ Kafka 未运行,请手动启动${NC}"
fi
# 4. 启动 Identity Service
echo -e "${YELLOW}启动 Identity Service...${NC}"
cd "$(dirname "$0")/.."
npm run start:dev &
# 等待服务启动
echo "等待服务启动 (最多 30 秒)..."
for i in {1..30}; do
if curl -f http://localhost:3000/health > /dev/null 2>&1; then
echo -e "${GREEN}✓ Identity Service 已启动${NC}"
break
fi
sleep 1
echo -n "."
done
echo ""
echo -e "${GREEN}✓ 所有服务已启动!${NC}"
echo ""
echo "运行健康检查:"
echo " ./scripts/health-check.sh"
echo ""
echo "运行快速测试:"
echo " ./scripts/quick-test.sh"