当前位置: 首页 > news >正文

【Java项目测试报告】:在线音乐平台(Online-Music)

项目已部署:

在线音乐服务器http://123.249.78.82:9090/list.html

一、项目背景

1.1 测试目标

验证音乐播放器功能完整性,确保用户管理、音乐管理、播放控制、收藏功能等核心模块符合需求。

1.2 项目技术栈

后端:Spring Boot/Spring MVC

数据库:MySQL

前端:原生 HTML/CSS/AJAX

1.3 文档引用

需求文档

在线音乐平台需求文档https://blog.csdn.net/qq_75234423/article/details/148196809?spm=1001.2014.3001.5501

接口文档

在线音乐平台接口设计文档https://blog.csdn.net/qq_75234423/article/details/148201033?spm=1001.2014.3001.5502

1.4 项目源码

GitHub 仓库

在线音乐平台源码https://gitee.com/LGY-beats/java-learning-code/tree/master/Online-Music

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 需求分析测试

用户管理模块

需求覆盖

        注册/登录功能已实现,密码使用 BCrypt 加密存储(代码验证通过)。

缺陷

        密码复杂度未校验(如长度、特殊字符)。

        缺少重复密码输入和验证码功能。

改进建议

        增加密码强度规则(如至少 8 位,含字母和数字)。

        注册页添加“确认密码”输入框及验证码校验。


音乐管理模块

需求覆盖性

        支持单曲删除、批量删除。

        上传功能限制为 MP3 格式,校验文件大小(限制 30MB)。


喜欢列表模块

需求覆盖性

        收藏功能已实现

        移除收藏支持单次操作


搜索模块

需求覆盖性

        支持模糊查询

缺陷:未优化大量数据下的查询性能。

改进建议

        后端实现分页查询


2.2 接口测试:

Postman 在线音乐平台全接口测试https://lgy-576434.postman.co/workspace/lgy's-Workspace~3c22ce88-cfe3-4359-8d22-8ff145ef9ba5/collection/44003634-05e3f0d5-386c-4860-8674-1059a4110032?action=share&creator=44003634

接口测试总结:

接口测试数量:11

接口覆盖率:100%

接口通过率:100%,无明显缺陷,主要功能全部符合预期

接口测试工具:postman 11.40.5 win64

测试时间:2025.5.10~2025.5.12

测试方式:设计每个接口,点击测试


2.3 功能测试

测试用例:

登录注册模块

主界面:

个人收藏界面:

音乐上传界面:


手动测试系统:
游客模式:
登录模式:
 注册页面

登陆失败

登录成功:

模糊查询:

收藏成功:

删除歌曲:

喜欢列表:

下载正常

移除歌曲:

上传页面:

重复上传提示:

上传成功:


功能测试总结:

测试用例:55

功能覆盖率:95%

测试时间:2025.5.24.15:00 ~ 2025.5.24.16:08

测试方式:手动测试

通过率:100%,没有明显功能性错误


2.4 UI自动化测试

 自动化测试覆盖模块:

注册页面,登录页面,游客模式,播放主页面,个人收藏页面,音乐上传页面

2.3.2 自动化测试源码链接:

Online-Music 自动测试源码

部分自动化代码展示:

工具类:

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();}}

播放器主页面:

public class MainPage extends Utils {public static String  url = "http://123.249.78.82:9090/list.html";public MainPage() {super(url);}public void Search() throws IOException {driver.findElement(By.cssSelector("#exampleInputName2")).sendKeys("一");driver.findElement(By.cssSelector("#submit1")).click();wait.until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector("#info > tr:nth-child(1) > td:nth-child(2)")));ScreenShot("主页面模糊搜索结果");}public void ListenMusic() throws IOException, InterruptedException {wait.until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector("#info > tr:nth-child(1) > td:nth-child(4)")));driver.findElement(By.cssSelector("#info > tr:nth-child(1) > td:nth-child(4) > button")).click();Thread.sleep(15000);ScreenShot("主页面播放音乐");}public void SearchNull() throws IOException {driver.findElement(By.cssSelector("#exampleInputName2")).clear();driver.findElement(By.cssSelector("#exampleInputName2")).sendKeys("");driver.findElement(By.cssSelector("#submit1")).click();wait.until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector("#info > tr:nth-child(1) > td:nth-child(2)")));ScreenShot("主页面空搜索结果");}public void AddLoveMusic() throws IOException {driver.findElement(By.cssSelector("#info > tr:nth-child(1) > td:nth-child(5) > button:nth-child(2)")).click();ScreenShot("主页面收藏音乐");// 切换到警告弹窗并接受它——这表示确认弹窗并继续执行后续操作Alert alert = driver.switchTo().alert();alert.accept();}public void ToLoveMusic() throws IOException {driver.findElement(By.cssSelector("#body > nav > ul > li:nth-child(1) > a")).click();wait.until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector("#info > tr:nth-child(1) > td:nth-child(1)")));ScreenShot("收藏音乐列表");}
}
UI自动化测试总结:

测试用例:20

功能覆盖率:80%

框架:Selenium 4.21.0 + Maven

通过率:100%,没有发现功能性bug

测试时间:2025.5.25 15:00 ~ 2025.5.25. 23:10

自动化屏幕关键截图:(通过截图与预期效果比较) 完全一致



2.5 Jmeter 梯度压力测试

线程组设计:

测试结果:

 

Jmeter 梯度压力测试总结:

测试用例:4

高频接口覆盖率:90%

软件:Apache Jmeter  5.5

通过率:100%,没有发现功能性bug

测试时间:2025.5.26 9:00 ~ 2025.5.25. 12:00

结果分析: 系统在测试过程中表现稳定,未出现异常错误。TPS 在高负载下维持在较高水平,系统具有较好的并发处理能力。

性能瓶颈:
登录接口的响应时间在某些时刻显著增加,可能是性能瓶颈所在

三、测试结论与建议

3.1 测试结果汇总

测试汇总:

接口测试:

接口测试数量:11

接口覆盖率:100%

接口通过率:100%,无明显缺陷,主要功能全部符合预期

接口测试工具:postman 11.40.5 win64

测试时间:2025.5.10~2025.5.12

测试方式:设计每个接口,点击测试


功能测试:

测试用例:55

功能覆盖率:95%

测试时间:2025.5.24.15:00 ~ 2025.5.24.16:08

测试方式:手动测试

通过率:100%,没有明显功能性错误


UI自动化测试:

测试用例:20

功能覆盖率:80%

框架:Selenium 4.21.0 + Maven

通过率:100%,没有发现功能性bug

测试时间:2025.5.25 15:00 ~ 2025.5.25. 23:10

自动化屏幕关键截图:已归档至源码代码包


Jmeter 梯度压力测试:

测试用例:4

高频接口覆盖率:90%

软件:Apache Jmeter  5.5

通过率:100%,没有发现功能性bug

测试时间:2025.5.26 9:00 ~ 2025.5.25. 12:00


结论:

需求覆盖性:

核心功能(用户管理、音乐管理、播放控制、收藏功能)已基本实现,但部分需求细节(如密码复杂度校验、分页查询)未完全覆盖。

接口覆盖率与功能覆盖率分别达到 100% 和 95%,满足核心场景需求。

测试通过率:

接口测试、功能测试、自动化测试、性能测试通过率均为 100%,未发现功能性缺陷。

性能表现:

高并发下系统稳定性良好,TPS 表现优异,但登录接口存在潜在性能瓶颈(响应时间波动)。

主要缺陷:

安全性:用户注册缺乏密码复杂度校验与验证码功能。

用户体验:音乐搜索未支持分页查询,批量操作交互未优化。


3.2 通过项

功能实现:

用户注册/登录(BCrypt 加密)、音乐上传(格式与大小校验)、收藏/移除、模糊搜索等功能均符合预期。

接口质量:

11 个接口全部通过测试,逻辑正确且数据交互稳定。

自动化与性能基准:

自动化测试用例执行结果与预期一致,性能测试 TPS 满足高负载场景需求。


3.3 风险项

安全风险:

高优先级:密码未强制复杂度规则(如长度、特殊字符),易导致弱密码漏洞。

中优先级:注册流程无验证码,存在暴力破解或自动化注册风险。

性能风险:

登录接口响应时间波动可能影响高并发场景用户体验。

用户体验风险:

音乐搜索未分页,数据量大时页面加载缓慢。

批量删除操作缺乏二次确认,易误删数据。


3.4 上线建议

优化项:

音乐管理模块批量操作增加二次确认弹窗,防止误操作。

性能调优:

对登录接口进行性能分析(如 SQL 查询优化、缓存机制)。

上线评估:

核心功能稳定且通过全量测试,主功能测试通过,风险可控,建议按计划上线

http://www.xdnf.cn/news/654535.html

相关文章:

  • 开发过的一个Coding项目
  • top查看 CPU使用情况
  • 【Java学习笔记】单例设计模式
  • C++23 std::start_lifetime_as:用于隐式生存期类型的显式生存期管理函数 (P2590R2)
  • Java网络编程中的I/O操作:从字节流到对象序列化
  • DJI上云API官方demo学习
  • JavaSE核心知识点04工具04-01(JDK21)
  • 【opencv】vs2019中配置opencv
  • 同一个核磁共振(MRI)检查中,不同序列的图像之间空间坐标定位如何实现
  • Redis | 缓存技术对后端的重要性
  • STM32之SPI——外部FLASH和RFID
  • 宫格导航--纯血鸿蒙组件库AUI
  • 树莓派超全系列教程文档--(47)如何使用内核补丁
  • QT中常用的类
  • Cesium 实战 26 - 自定义纹理材质 - 实际应用之飞线(抛物线)
  • 并发的产生及对应的解决方案之服务架构说明
  • 第1章第1节:安全运维基础思维与体系建设-安全运维的定义与核心目标
  • Ext系列文件系统
  • 分布式缓存:证明分布式系统的 CAP 理论
  • [闲谈]C语言的面向对象
  • 易境通WMS系统:赋能快消品海外仓高效管理
  • 完美解决Docker镜像无法拉取问题(转载)
  • 服务器的IP是什么东西?
  • uniapp-商城-69-shop(2-商品列表,点击商品展示,商品的详情, vuex的使用,rich-text使用)
  • ESP8266_AP机械手 第三篇Uniapp遥控器
  • ElasticSearch--DSL查询语句
  • 信创 CDC 实战 | OGG、Attunity……之后,信创数据库实时同步链路如何构建?(以 GaussDB 数据入仓为例)
  • FreeRTOS 在物联网传感器节点的应用:低功耗实时数据采集与传输方案
  • 综合实现案例 LVS keepalived mysql 等
  • 《基于Keepalived+LVS+Web+NFS的高可用集群搭建》