一、项目概述
1、项目背景
本项目是一个基于 WebSocket 的多用户一对一聊天室。用户可以通过浏览器注册/登录,选择在线用户进行私聊,实现消息的实时收发。系统采用 Java 作为后端语言,使用 WebSocket 实现通信,前端使用 HTML/CSS/JavaScript 构建页面。
2、需求分析
(1)功能需求
用户管理:支持新用户注册、已注册用户登录,用户名唯一。
好友列表:展示所有好友,支持点击用户开始聊天。
会话列表:展示所有会话,展示会话对象及最新消息。
一对一私聊:用户 A 可选择用户 B,发送文本消息,用户 B 实时接收并显示。
消息记录:聊天记录保存到数据库,支持查看历史消息。
离线消息:当目标用户不在线时,消息暂存,待用户上线后补发。
消息展示:每条消息显示发送者、接收者、发送时间(服务器时间)。
(2)非功能需求
响应时间:消息从发送到对方接收的延迟应小于 200ms(局域网/本机测试)。
并发支持:支持至少 20 个用户同时在线并发聊天,服务器不崩溃。
安全性:防止 XSS 注入,消息内容需转义。
兼容性:主流浏览器(Chrome / Edge)下功能正常,页面布局不严重错乱。
二、测试环境与范围
1、测试环境
| 配置项 | 详情 |
|---|---|
| 操作系统 | Windows 11 |
| 后端 | Java 17, Spring Boot 4.0.6, WebSocket |
| 前端 | HTML / CSS / JavaScript |
| 浏览器 | Chrome 148.0.7778.179, Edge 148.0.3967.83 |
| 数据库(若有) | MySQL 5.7 |
| 开发工具 | IntelliJ IDEA |
2、测试范围
(1)已测功能
用户注册(成功、重复用户名、含特殊字符的用户名)
用户登录(正确密码、错误密码)
一对一消息发送与接收(文本、空消息、超长消息)
消息顺序的正确性
浏览器兼容性(Chrome、Edge)
(2)未测功能
群聊(项目未实现)
文件/图片发送
消息已读/未读回执
大规模压力测试(>100 并发连接)
数据库持久化性能测试
移动端 App 测试(仅网页)
三、设计测试用例与执行

四、接口测试
使用 Postman 对后端核心 API 进行了功能验证。测试覆盖用户注册、登录、创建会话、发送消息等接口。共设计 10 个接口测试用例,包括正常场景和异常场景(如参数缺失、格式错误等)。



五、测试过程中发现并修复的问题
1、XSS 漏洞(安全性测试)
问题描述:发送 <script>alert('XSS')</script> 时,对方页面会执行脚本。
修复措施:将消息显示从 innerHTML 改为 textContent,并对特殊字符进行转义。
javascript
//把历史消息加进来
function addMessage(messageShowDiv,message){
//判断消息是自己发的还是好友发的
let selfName=document.querySelector('.main .left .user').innerHTML;
let messageDiv=document.createElement('div');
if(selfName==message.fromName){
messageDiv.className='message message-right';
}else{
messageDiv.className='message message-left';
}
//转义,防止恶意脚本
let boxDiv = document.createElement('div');
boxDiv.className = 'box';
let h4 = document.createElement('h4');
h4.textContent = message.fromName;
let p = document.createElement('p');
p.textContent = message.content;
boxDiv.appendChild(h4);
boxDiv.appendChild(p);
messageDiv.appendChild(boxDiv);
// messageDiv.innerHTML='<div class="box">'
// +'<h4>'+message.fromName+'</h4>'
// +'<p>'+message.content+'</p>'
// +'</div>';
messageShowDiv.appendChild(messageDiv);
}
2、空消息和超长消息未拦截(功能测试)
问题描述:用户可以发送空白(仅空格)或超过 200 字符的消息。
修复措施:前端增加校验,空白消息提示"不能发送空消息",超长消息提示"消息长度不能超过200字符"。
javascript
// 1. 空消息或只含空白字符(空格、换行等)
if (rawMessage.trim() == '') {
alert('不能发送空消息');
return;
}
// 2. 超长消息(超过200个字符)
if (rawMessage.length > 200) {
alert('消息长度不能超过200个字符');
return;
}
3、表情符号导致连接断开(功能测试)
问题描述:发送 Emoji 表情后,WebSocket 连接异常关闭。
修复措施:前端检测表情符号并拦截,提示"暂不支持发送表情"。
javascript
// 3. 检测是否包含表情符号(Emoji)
function containsEmoji(str) {
for (let ch of str) {
if (ch.codePointAt(0) > 0xFFFF) {
return true;
}
}
return false;
}
if (containsEmoji(rawMessage)) {
alert('暂不支持发送表情符号,请使用文字');
return;
}
六、测试结论与后续优化
1、测试结论
本次测试对"Java 多用户一对一网页聊天室"项目进行了全面的功能、界面、性能、可靠性、安全性及接口测试,共执行 40 条测试用例 ,通过率 100%。
核心功能:用户注册/登录、一对一私聊、消息实时收发均正常。
异常处理:空消息、超长消息、表情符号等非法输入已被正确拦截。
安全性:XSS 漏洞已修复,特殊字符正常显示。
性能:单对消息延迟 < 50ms,模拟多用户在线服务器稳定。
可靠性:断网重连后消息不丢失,服务器重启后手动刷新可恢复。
2、后续优化
自动重连:实现服务器重启后的自动重连机制,减少用户手动刷新。
离线消息:增加离线消息存储和上线拉取功能。
消息已读未读:添加已读回执,提升用户体验。
自动化测试:将 Postman 用例集成到 CI 中,并补充前端 Selenium 自动化回归测试。
性能压测:使用 JMeter 模拟 100+ 并发用户,进一步验证服务器承载能力。