被测试项目已部署:登录页面http://123.249.78.82:8080/login.html
一、项目背景
1.1 测试目标
验证系统功能完整性,确保用户管理、消息传输、好友管理等核心模块符合需求。
1.2 项目技术栈
后端:Spring Boot/Spring MVC/WebSocket
数据库:MySQL
前端:原生HTML/CSS
1.3 文档引用
1.3.1 项目需求文档:
在线聊天平台(Online-Chat)需求文档
1.3.2 项目接口文档:
在线聊天平台(Online-Chat)接口文档
1.4 项目源码:
在线聊天平台(Online-Chat)项目源码
1.5. 测试环境
类别 | 配置/版本 |
---|---|
硬件 | Lenovo Y9000P 2022 |
手动测试浏览器 | Microsoft Edge 125.0.2535.85 |
开发工具 | IntelliJ IDEA 2023.3.1 |
自动化测试工具 | Selenium 4.21.0 |
操作系统 | Windows 11 家庭中文版 |
自动化测试浏览器 | Google Chrome 137.0.7151.41 |
二、测试分类:
2.1 需求分析测试
1. 用户管理模块
需求覆盖性
注册/登录功能满足基础用户认证需求,但缺乏密码安全机制(如强度校验、重复密码输入、验证码)
改进建议:
增加密码复杂度规则(如至少8位,含字母和数字)
2. 主界面模块
改进建议:
明确昵称来源:注册时增加“昵称”字段,或默认使用用户名
3. 好友管理模块
需求覆盖性
模糊搜索功能需明确匹配规则(如前缀匹配、全字段匹配),避免性能问题,
好友申请流程完整,但未说明申请记录存储方式(如数据库表设计)
改进建议:
优化搜索性能:后端分页查询 + 缓存机制。
补充好友申请状态管理(如“待处理”“已通过”“已拒绝”)。
4. 会话管理模块
需求覆盖性
首次选中好友自动生成会话合理,但未定义会话删除或归档逻辑
历史消息加载需考虑数据量过大时的分页加载策略
改进建议:
增加会话删除功能
历史消息采用懒加载或分页机制,提升响应速度
5. 消息传输模块
需求覆盖性
实时消息推送(WebSocket)与非实时存储(MySQL)方案合理,但未设计消息去重或重试机制
改进建议:
补充消息状态标识(如“已发送”“已送达”“已读”)
增加消息存储策略(如超过1年的消息自动归档)
6. 非功能需求
可行性分析
实时性:WebSocket 适合小规模高并发,需结合负载均衡技术应对大规模场景
数据持久化:MySQL 需设计索引优化查询效率(如按用户ID、时间戳索引)
2.2 功能测试
2.2.1测试用例设计
登录页面测试:
注册页面测试:
主页面测试:
2.2.2 手动测试系统
1. 注册页面
正常注册:
重复用户注册:
2. 登录页面
正常登录:
密码或者用户名错误登录:
3. 主界面:
4. 会话消息列表
5. 实时信息交流
2.2.3 功能测试结果:
测试用例:105
覆盖率:90%
测试方式:手动测试
通过率:99%,出现bug一处,已解决(用户注册模块用户名长度校验缺失)
2.3 UI自动化测试:
2.3.1 自动化测试覆盖模块:
注册页面,登录页面,“关于我们”,主页面,添加好友页面,好友页面,会话页面,消息发送页面
2.3.2 自动化测试源码链接:
Online-Chat 自动化测试源码
部分自动化代码展示:
工具类:
package common;public class Utils {public static WebDriver driver = null;public WebDriverWait wait = null;//调用driver对象public Utils(String url){driver = createDriver();driver.get(url);wait = new WebDriverWait(driver, Duration.ofSeconds(3));}private WebDriver createDriver() {//获取驱动对象if(driver==null){//下载驱动//WebDriverManager.chromedriver().setup();//使用本地驱动System.setProperty("webdriver.chrome.driver", "D:/chromedriver-win64 (4)/chromedriver-win64/chromedriver.exe"); //添加配置,允许访问所有网站ChromeOptions options = new ChromeOptions();options.addArguments("--remote-allow-origins=*");//创建驱动对象driver = new ChromeDriver(options);}//显示等待wait = new WebDriverWait(driver, Duration.ofSeconds(5));return driver;}/*** 屏幕截图* 屏幕截图文件目录* ./src/test/java/images/* /2025-04-29/* /test01-20123010.png* /test02-20133510.png* /2025-04-30/* /test01-20123010.png* * /test02-20133510.png**str:方法名/类名*/public void ScreenShot(String str) throws IOException {//年月日SimpleDateFormat sim1 = new SimpleDateFormat("yyyy-MM-dd");//时分秒SimpleDateFormat sim2 = new SimpleDateFormat("HHmmssSS");String dirTime = sim1.format(System.currentTimeMillis());String fileTime = sim2.format(System.currentTimeMillis());//图片文件名:路径+图片名称// ./src/test/java/images/2025-04-29/test01-20123010.pngString filename = "./src/test/java/images/" + dirTime + "/" + str + "-" + fileTime + ".png";//获取WebDriver实例的截图并保存为文件File srcFile = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);//将截图文件复制到目标文件路径FileUtils.copyFile(srcFile,new File(filename));}/*** 销毁driver对象——关闭浏览器*/public static void quit(){if(driver != null)driver.quit();}}
主页面测试方法:
package Tests;public class ClientPage extends Utils {public static String url = "http://123.249.78.82:8080/client.html";public ClientPage() {super(url);}public void searchAndAddFriends() {WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(5));// 输入搜索内容wait.until(ExpectedConditions.elementToBeClickable(By.cssSelector("#search-input"))).sendKeys("u");// 点击搜索按钮wait.until(ExpectedConditions.elementToBeClickable(By.cssSelector("#search-button"))).click();wait.until(ExpectedConditions.elementToBeClickable(By.cssSelector("#search-input"))).clear();//等待结果列表可见wait.until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector("#friend-result:not(.hide)")));// 点击第一个结果按钮wait.until(ExpectedConditions.elementToBeClickable(By.cssSelector("#friend-result > div:first-child > button"))).click();// 处理弹窗wait.until(ExpectedConditions.alertIsPresent());driver.switchTo().alert().accept();
}public void createSession() {WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(10));// 1. 点击好友标签切换视图wait.until(ExpectedConditions.elementToBeClickable(By.cssSelector("#friend-tab"))).click();// 2. 等待好友列表可见wait.until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector("#friend-list:not(.hide)")));// 3. 等待列表项加载完成wait.until(d -> d.findElements(By.cssSelector("#friend-list > li")).size() > 0);// 4. 使用JavaScript点击确保稳定性WebElement lastFriend = driver.findElement(By.cssSelector("#friend-list > li:last-child"));((JavascriptExecutor)driver).executeScript("arguments[0].click();", lastFriend);}public void sendMessage() throws IOException {// 1. 等待会话列表容器可见wait.until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector("#session-list")));driver.findElement(By.xpath("/html/body/div[2]/div/div[2]/textarea")).clear();driver.findElement(By.xpath("/html/body/div[2]/div/div[2]/textarea")).sendKeys("hello");ScreenShot(Thread.currentThread().getStackTrace()[1].getMethodName());driver.findElement(By.cssSelector("#buttonsendtext")).click();}public void cilckSession() {// 定位到 session-list 下的第一个 <li> 元素并点击driver.findElement(By.xpath("//*[@id='session-list']/li[1]")).click();//隐式等待1000毫秒driver.manage().timeouts().implicitlyWait(Duration.ofMillis(5000));}public void cilckSession2() {driver.manage().timeouts().implicitlyWait(Duration.ofMillis(5000));// 定位到 session-list 下的第一个 <li> 元素并点击driver.findElement(By.xpath("//*[@id='session-list']/li[1]")).click();}
}
2.3.3 自动化测试结果
测试用例:15
覆盖率:90%
框架:Selenium+Maven
通过率:98%,发现bug两处,已修复(登录输入未注册用户卡死、注册密码单个字符也可成功)
自动化屏幕关键截图:
三、测试结论与建议
3.1 测试结果汇总
功能测试结果
测试用例:105
覆盖率:90%(覆盖核心功能及部分非功能性需求)
测试方式:手动测试
通过率:99%,发现1处Bug(用户注册模块用户名长度校验缺失),已修复。
自动化测试结果
测试用例:20
覆盖率:90%(覆盖主流程及关键交互场景)
框架:Selenium + Maven
通过率:98%,发现2处Bug(登录输入未注册用户卡死、注册密码单个字符也可成功),
已修复。
自动化屏幕关键截图:已归档至测试报告源码代码包。
需求覆盖性总结
基于2.1需求分析测试,各模块需求覆盖情况如下:
-
用户管理模块:覆盖基础注册/登录功能,但密码安全机制未完全实现(如复杂度校验)。
-
好友管理模块:模糊搜索功能覆盖。
-
会话管理模块:会话生成功能通过,删除与历史消息分页逻辑未测试。
-
消息传输模块:实时推送与存储方案验证通过,消息状态标识未补充。
3.2 通过项
核心功能通过率99%,包括:
用户注册/登录流程
好友添加与申请管理
实时消息收发
会话自动生成与历史消息加载
3.3 风险项
高风险项
高并发场景未充分测试:当前仅验证WebSocket单节点性能,未结合负载均衡进行分布式压测。
建议:使用JMeter模拟1000+并发用户,验证消息推送延迟及MySQL连接池稳定性。
遗留风险
部分需求未完全覆盖:
密码复杂度规则未实现(需开发补充)。
好友搜索缓存机制未落地(潜在性能瓶颈)。
测试时间紧张:
主功能优先,部分边缘场景(如昵称默认规则、消息自动归档)未覆盖。
3.4 上线建议
上线条件:
主功能测试通过,修复Bug已验证,风险可控,建议按计划上线。
上线后监控措施:
高优观察项:
实时消息推送延迟(重点关注高峰时段)。
好友搜索接口响应时间(监控ES或缓存命中率)。
用户反馈:
收集用户密码设置体验,评估安全机制补充优先级。
跟踪会话删除需求反馈,纳入迭代优化。
后续优化建议:
需求侧补充:
密码强度校验(至少8位,字母+数字组合)。
消息状态标识(“已读/未读”)及年度归档策略。
技术侧优化:
引入Redis缓存好友搜索结果,降低数据库压力。
历史消息分页加载(每页20条,懒加载触发)。