一、报告概述
1. 项目背景
AI聊天服务器是一个基于C++开发的智能对话系统,旨在为用户提供统一的AI模型访问接口,支持多种主流AI模型的集成与管理。项目通过RESTful API架构设计,实现了跨平台、多模型的智能对话能力,为开发者和终端用户提供了便捷的AI服务访问方式。
系统包含的核心模块:
- ChatSDK:核心SDK,负责模型管理和AI交互
- HTTP服务器:提供RESTful API接口
- Web前端:用户交互界面
- 模型集成:支持DeepSeek、ChatGPT(因网络限制无法访问)和本地Ollama模型
2. 测试目的
- 功能验证
- 确保核心功能能实现,如模型管理、会话管理、消息处理
- 验证服务器启动和运行正常
- 检查API接口的完整性及正确性
- 用户体验
- 评估前端界面布局的合理性和易用性
- 检查页面上的按钮和功能是否能正常使用
- 检验AI响应的质量和速度
- 兼容性测试
- 确保常用浏览器下能正常使用
- 测试多个用户同时访问是否正常
3. 所需技术与开发环境
所需技术
- C++ STL 标准库
- cpp-httplib 第三方开源网络库
- jsoncpp 第三方开源序列化、反序列化库
- gflags 命令行参数解析库
- spdlog 日志库
- HTML/CSS/JavaScript 前端技术
- Fetch API 技术
- DeepSeek/OpenAI/Ollama API
- RESTful API
- SSE协议
- CORS
开发环境
- Ubuntu 22.04 云服务器
- VSCode
- CMake
测试环境
- 操作系统:Windows 11
- 浏览器:Edge、微信浏览器
- 测试工具:curl、Apifox、Selenium、PyCharm 2024.1.7
二、测试用例
|-------|----------|------------------------------------------------------------------------------------------|--------------------|
| 用例编号 | 测试项 | 测试步骤 | 预期结果 |
| TC001 | 服务器启动 | 执行启动命令,设置环境变量 | 服务器成功启动,监听8080端口 |
| TC002 | 模型列表获取 | GET /api/models | 返回所有可用模型列表 |
| TC003 | 会话创建 | POST /api/session with model参数 | 返回session_id和model |
| TC004 | 发送消息(全量) | POST /api/message | 返回完整的AI响应 |
| TC005 | 发送消息(流式) | POST /api/message/async | 流式返回AI响应 |
| TC006 | 获取历史消息 | GET /api/session/{session_id}/history | 返回该会话的所有历史消息 |
| TC007 | 删除会话 | DELETE /api/session/{session_id} | 会话被成功删除 |
| TC008 | 前端访问 | 浏览器访问 http://182.61.53.128:8080 | 显示欢迎界面 |
| TC009 | 新建对话 | 点击"新建对话"按钮 | 显示模型选择对话框 |
| TC010 | 模型切换 | 在不同会话中使用不同模型 | 各模型独立工作 |
三、手动测试
1. 服务器启动测试
测试场景一:正常启动服务器
- 测试步骤:设置环境变量,执行启动命令


- 预期结果:服务器成功启动,监听8080端口
- 实际结果:服务器启动成功,监听8080端口


测试场景二:缺少API密钥启动
- 测试步骤:不设置任何API密钥启动

- 预期结果:服务器启动失败或提示错误
- 实际结果:服务器启动失败并提示错误

2. API接口测试
测试场景一:获取模型列表
- 测试步骤:使用GET命令请求 /api/models
- 预期结果:返回所有可用模型列表
- 实际结果:返回了所有可用模型列表

测试场景二:创建会话
- 测试步骤:使用POST命令请求 /api/session 创建会话
- 预期结果:返回session_id和model
- 实际结果:成功创建并返回session_id和model


测试场景三:发送消息
- 测试步骤:使用POST命令请求 /api/message 发送消息
- 预期结果:返回AI的响应
- 实际结果:返回AI的响应,跟我打招呼

3. 前端界面测试
测试场景一:访问首页
- 测试步骤:在浏览器中输入 http://182.61.53.128:8080
- 预期结果:显示AI聊天助手欢迎界面
- 实际结果:显示AI聊天助手欢迎界面

测试场景二:新建对话
- 测试步骤:点击"新建对话"按钮
- 预期结果:显示模型选择对话框
- 实际结果:显示模型选择对话框

测试场景三:发送消息
- 测试步骤:在聊天界面输入消息并发送
- 预期结果:显示用户消息和AI响应
- 实际结果:用户发出消息后ai给予了响应


测试场景四:查看历史会话
- 测试步骤:点击侧边栏历史会话
- 预期结果:显示历史消息
- 实际结果:正常显示历史消息

测试场景五:删除会话
- 测试步骤:点击删除会话按钮
- 预期结果:会话被删除
- 实际结果:会话被成功删除


4. 多模型测试
测试场景一:DeepSeek模型测试
- 测试步骤:使用deepseek-chat模型发送消息

- 预期结果:返回DeepSeek的响应
- 实际结果:成功返回

测试场景二:ChatGPT模型测试
- 测试步骤:使用gpt-4o-mini模型发送消息
- 预期结果:返回ChatGPT的响应
- 实际结果:返回失败,出现网络问题

测试场景三:Ollama本地模型测试
- 测试步骤:使用deepseek-r1:1.5b模型发送消息
- 预期结果:返回本地模型的响应
- 实际结果:返回失败,出现网络问题

5. 兼容性测试
在微信浏览器中可正常打开并使用:


在edge浏览器中可正常打开并使用:


四、自动化测试
1. API接口自动化测试
创建一个测试工具类,方便测试各个API接口
python
import requests
import json
class APITester:
def __init__(self, base_url):
self.base_url = base_url
def get_models(self):
"""测试获取模型列表接口"""
url = f"{self.base_url}/api/models"
response = requests.get(url)
return response.json()
def create_session(self, model):
"""测试创建会话接口"""
url = f"{self.base_url}/api/session"
data = {"model": model}
response = requests.post(url, json=data)
return response.json()
def send_message(self, session_id, message):
"""测试发送消息接口(全量返回)"""
url = f"{self.base_url}/api/message"
data = {"session_id": session_id, "message": message}
response = requests.post(url, json=data)
return response.json()
def get_history(self, session_id):
"""测试获取历史消息接口"""
url = f"{self.base_url}/api/session/{session_id}/history"
response = requests.get(url)
return response.json()
def delete_session(self, session_id):
"""测试删除会话接口"""
url = f"{self.base_url}/api/session/{session_id}"
response = requests.delete(url)
return response.json()
API接口测试示例
python
def test_api_functions():
tester = APITester("http://182.61.53.128:8080")
# 测试获取模型列表
print("=== 测试获取模型列表 ===")
models = tester.get_models()
print(f"模型列表: {json.dumps(models, indent=2, ensure_ascii=False)}")
# 测试创建会话
print("\n=== 测试创建会话 ===")
session = tester.create_session("deepseek-chat")
session_id = session.get("data", {}).get("session_id")
print(f"创建会话: {json.dumps(session, indent=2, ensure_ascii=False)}")
# 测试发送消息
if session_id:
print("\n=== 测试发送消息 ===")
response = tester.send_message(session_id, "你好,请介绍一下你自己")
print(f"消息响应: {json.dumps(response, indent=2, ensure_ascii=False)}")
# 测试获取历史消息
if session_id:
print("\n=== 测试获取历史消息 ===")
history = tester.get_history(session_id)
print(f"历史消息: {json.dumps(history, indent=2, ensure_ascii=False)}")
# 测试删除会话
if session_id:
print("\n=== 测试删除会话 ===")
delete_response = tester.delete_session(session_id)
print(f"删除会话: {json.dumps(delete_response, indent=2, ensure_ascii=False)}")
if __name__ == "__main__":
test_api_functions()
自动化测试通过:





2. 前端界面自动化测试
使用Selenium进行前端界面测试
python
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import time
class FrontendTester:
def __init__(self, url):
self.url = url
self.driver = webdriver.Chrome()
self.driver.implicitly_wait(10)
def test_homepage(self):
"""测试首页访问"""
self.driver.get(self.url)
# 检查首页元素
title = self.driver.find_element(By.CSS_SELECTOR, "h1")
assert "AI聊天助手" in title.text
print("首页访问测试通过")
def test_create_session(self):
"""测试创建会话"""
self.driver.get(self.url)
# 点击新建对话按钮
new_session_btn = self.driver.find_element(By.CSS_SELECTOR, ".new-session-btn")
new_session_btn.click()
# 选择模型
model_item = self.driver.find_element(By.CSS_SELECTOR, ".model-item")
model_item.click()
# 点击确定按钮
confirm_btn = self.driver.find_element(By.CSS_SELECTOR, ".confirm-btn")
confirm_btn.click()
# 检查是否进入聊天界面
chat_interface = self.driver.find_element(By.CSS_SELECTOR, ".chat-interface")
assert chat_interface.is_displayed()
print("创建会话测试通过")
def test_send_message(self):
"""测试发送消息"""
# 先创建会话
self.test_create_session()
# 输入消息
message_input = self.driver.find_element(By.CSS_SELECTOR, "#messageInput")
message_input.send_keys("你好,请介绍一下你自己")
# 点击发送按钮
send_btn = self.driver.find_element(By.CSS_SELECTOR, ".send-btn")
send_btn.click()
# 等待AI响应
time.sleep(5)
# 检查是否有AI响应
messages = self.driver.find_elements(By.CSS_SELECTOR, ".message")
assert len(messages) > 0
print("发送消息测试通过")
def close(self):
self.driver.quit()
def test_frontend_functions():
tester = FrontendTester("http://182.61.53.128:8080")
try:
tester.test_homepage()
tester.test_create_session()
tester.test_send_message()
print("前端界面测试全部通过")
finally:
tester.close()
if __name__ == "__main__":
test_frontend_functions()
前端界面自动化测试通过: 
五、性能测试
1. 响应时间测试
|---------|---------------|-------|-------|
| 测试项 | 测试方法 | 预期指标 | 实际数据 |
| API响应时间 | 测量各API接口的响应时间 | < 5秒 | < 2秒 |
| 前端加载时间 | 测量页面加载时间 | < 3秒 | < 1秒 |
| 流式响应延迟 | 测试流式返回的延迟 | < 1秒 | < 1秒 |
2. 并发测试
|--------|-------------|----------|----------|
| 测试项 | 测试方法 | 预期指标 | 实际数据 |
| 并发请求处理 | 同时发送多个请求 | 正常处理所有请求 | 正常处理所有请求 |
| 会话管理能力 | 创建多个会话并同时使用 | 各会话独立工作 | 各会话独立工作 |
| 内存占用 | 监控服务器内存使用 | < 500MB | < 30MB |

六、问题记录
|--------|--------------------|------|-----|--------|
| 问题编号 | 问题描述 | 严重程度 | 状态 | 备注 |
| BUG001 | ChatGPT模型无法使用 | 高 | 待修复 | 疑似网络问题 |
| BUG001 | Ollama本地模型无法使用 | 高 | 待修复 | 疑似网络问题 |
七、测试总结
本次测试覆盖的功能、性能、安全性等核心指标大都满足上线标准 ,但有一模型功能无法使用,建议尽快处理。