#!/bin/bash # 聊天应用测试脚本 echo "🧪 聊天应用功能测试" echo "==================" echo # 测试后端API echo "🔧 测试后端API..." # 健康检查 echo -n " 健康检查: " if curl -f -s http://localhost:5000/api/health > /dev/null; then echo "✅ 通过" HEALTH=$(curl -s http://localhost:5000/api/health | jq -r '.status') echo " 状态: $HEALTH" else echo "❌ 失败" fi # 测试注册API echo -n " 注册API: " REGISTER_RESPONSE=$(curl -s -X POST http://localhost:5000/api/register \ -H "Content-Type: application/json" \ -d '{ "username": "testuser", "email": "test@example.com", "password": "testpass123" }') if echo "$REGISTER_RESPONSE" | jq -e '.token' > /dev/null 2>&1; then echo "✅ 通过" TOKEN=$(echo "$REGISTER_RESPONSE" | jq -r '.token') else echo "⚠️ 用户可能已存在" # 尝试登录 LOGIN_RESPONSE=$(curl -s -X POST http://localhost:5000/api/login \ -H "Content-Type: application/json" \ -d '{ "email": "test@example.com", "password": "testpass123" }') if echo "$LOGIN_RESPONSE" | jq -e '.token' > /dev/null 2>&1; then echo " 登录成功" TOKEN=$(echo "$LOGIN_RESPONSE" | jq -r '.token') else echo " ❌ 登录失败" TOKEN="" fi fi # 测试获取消息API if [ -n "$TOKEN" ]; then echo -n " 消息API: " if curl -f -s -H "Authorization: Bearer $TOKEN" http://localhost:5000/api/messages > /dev/null; then echo "✅ 通过" else echo "❌ 失败" fi fi echo # 测试前端 echo "🌐 测试前端服务..." echo -n " 前端可访问性: " if curl -f -s http://localhost:3000 > /dev/null; then echo "✅ 通过" else echo "❌ 失败" fi echo -n " 静态资源: " if curl -f -s http://localhost:3000/vite.svg > /dev/null; then echo "✅ 通过" else echo "❌ 失败" fi echo # 测试数据库 echo "📊 测试数据库..." echo -n " MongoDB连接: " if docker exec chat-mongo mongosh --eval "db.adminCommand('ping')" > /dev/null 2>&1; then echo "✅ 通过" # 获取数据库统计 echo " 数据库统计:" docker exec chat-mongo mongosh chatapp --eval " print(' 用户数量: ' + db.users.countDocuments()); print(' 消息数量: ' + db.messages.countDocuments()); " 2>/dev/null else echo "❌ 失败" fi echo # 测试Socket.IO连接 echo "🔌 测试Socket.IO..." echo -n " WebSocket连接: " # 使用Node.js测试Socket.IO连接 node -e " const io = require('socket.io-client'); const socket = io('http://localhost:5000'); socket.on('connect', () => { console.log('✅ 通过'); socket.disconnect(); process.exit(0); }); socket.on('connect_error', (error) => { console.log('❌ 失败:', error.message); process.exit(1); }); setTimeout(() => { console.log('❌ 超时'); process.exit(1); }, 5000); " 2>/dev/null || echo "⚠️ 需要安装socket.io-client进行测试" echo # 性能测试 echo "⚡ 性能测试..." echo -n " API响应时间: " RESPONSE_TIME=$(curl -o /dev/null -s -w '%{time_total}' http://localhost:5000/api/health) echo "${RESPONSE_TIME}s" echo -n " 前端加载时间: " FRONTEND_TIME=$(curl -o /dev/null -s -w '%{time_total}' http://localhost:3000) echo "${FRONTEND_TIME}s" echo # 安全测试 echo "🔒 基础安全检查..." echo -n " CORS配置: " CORS_HEADER=$(curl -s -I http://localhost:5000/api/health | grep -i "access-control-allow-origin") if [ -n "$CORS_HEADER" ]; then echo "✅ 已配置" else echo "⚠️ 未检测到CORS头" fi echo -n " JWT验证: " UNAUTH_RESPONSE=$(curl -s -o /dev/null -w '%{http_code}' http://localhost:5000/api/messages) if [ "$UNAUTH_RESPONSE" = "401" ]; then echo "✅ 正常(未授权访问被拒绝)" else echo "⚠️ 可能存在安全问题" fi echo # 总结 echo "📋 测试总结" echo "===========" echo "✅ 通过的测试将显示绿色勾号" echo "❌ 失败的测试将显示红色叉号" echo "⚠️ 警告或需要注意的项目将显示黄色感叹号" echo echo "💡 如果有测试失败,请检查:" echo " 1. 服务是否正常启动" echo " 2. 端口是否被占用" echo " 3. 防火墙设置" echo " 4. Docker容器状态" echo echo "🔧 查看详细日志: make logs" echo "📊 查看监控信息: ./monitor.sh"