1. 项目介绍
“乐潮在线”是基于 SSM 框架实现的音乐播放系统。它为用户提供丰富的音乐资源,界面简洁美观,操作便捷。通过 SSM 的整合,确保系统的稳定性与高效性。用户可以轻松搜索、播放喜爱的音乐,创建个性化播放列表。系统还具备完善的用户管理功能,支持用户注册、登录与个人信息设置。同时,不断更新音乐库,紧跟音乐潮流,为音乐爱好者打造一个高品质、个性化的在线音乐平台,让用户随时随地畅享音乐盛宴。
2. 测试环境
- 操作系统:Windows 11
- 浏览器:Chrome 版本 128.0.6613.138
- 开发工具:IntelliJ IDEA Community Edition 2022.3.3
- 数据库:MySQL 5.7
3. 测试
3.1 功能测试
3.1.1 登录功能
测试编号 | 测试步骤 | 预期结果 |
---|---|---|
1 | 打开 “乐潮在线”。 不输入账号和密码,点击登录按钮。 | 提示 “ 账号或密码为空,请输入后再来登录!”。 |
2 | 输入正确的账号,不输入密码,点击登录按钮。 | 提示 “密码不能为空”。 |
3 | 输入不存在的账号,输入正确的密码,点击登录按钮。 | 提示 “账号不存在”。 |
4 | 输入正确的账号,输入错误的密码,点击登录按钮。 | 提示 “密码错误”。 |
5 | 输入正确的账号和密码,点击登录按钮。 | 登录成功,进入 “乐潮在线”首页。 |
部分测试用例效果图:
图1 输入正确的用户名和错误的密码,登录失败
图2 输入正确的用户名和正确的密码,登录成功
3.1.2 注册功能
测试编号 | 测试步骤 | 预期结果 |
---|---|---|
1 | 不输入邮箱、密码、确认密码和邮箱验证码,点击注册按钮。 | 提示 “ 请输入邮箱 ”。 |
2 | 输入邮箱,不输入密码、确认密码和邮箱验证码,点击注册按钮。 | 提示 “ 请输入验证码 ”。 |
3 | 输入邮箱和密码,不输入确认密码和邮箱验证码,点击注册按钮。 | 提示 “请输入验证码 ”。 |
4 | 输入邮箱、密码和确认密码,不输入邮箱验证码,点击注册按钮。 | 提示 “ 请输入验证码 ”。 |
5 | 输入邮箱、密码、确认密码和邮箱验证码,密码和确认密码不一致,点击注册按钮。 | 提示 “ 两次密码长度不一致,请重新输入~”。 |
6 | 输入已存在的邮箱,输入密码、确认密码和邮箱验证码,点击注册按钮。 | 提示 “ 该邮箱不可以同时绑定多个账号,请换个邮箱再来注册~”。 |
7 | 输入符合要求的邮箱、密码、确认密码和邮箱验证码,点击注册按钮。 | 注册成功,提示 “注册成功”。 |
部分测试用例效果图:
图3 不输入邮箱、密码、确认密码和邮箱验证码,注册失败
图4 输入邮箱、密码、确认密码和邮箱验证码,密码和确认密码不一致,注册失败
图5 输入符合要求的邮箱、密码、确认密码和邮箱验证码,注册成功
3.1.3 找回密码功能
部分测试用例效果图:
图6 不输入邮箱、重置密码、确认密码和邮箱验证码,修改失败
图7 输入不存在的邮箱,输入重置密码、确认密码,修改失败
图8 输入符合要求的邮箱、重置密码、确认密码和邮箱验证码,修改成功
3.1.4 查询歌曲功能
测试编号 | 测试步骤 | 预期结果 |
---|---|---|
1 | 在搜索框中输入歌曲名,点击查询按钮。 | 显示相关歌曲的搜索结果。 |
2 | 在搜索框中输入歌手名,点击查询按钮。 | 显示该歌手的相关歌曲搜索结果。 |
3 | 输入不存在的歌曲名或歌手名,点击查询按钮。 | 提示 “ 在音乐库当中没有找到您要找的歌曲~ ”。 |
部分测试用例效果图:
图9 输入不存在的歌曲名或歌手名,点击查询按钮,查询失败
3.1.5 上传歌曲功能
测试编号 | 测试步骤 | 预期结果 |
---|---|---|
1 | 打开 “乐潮在线”,点击上传歌曲按钮, 不选择文件,直接输入歌手名,点击上传按钮。 | 提示 “ 请选择要上传的音频文件 ”。 |
2 | 选择音频文件,不输入歌手名,点击上传按钮。 | 提示 “请输入歌手名”。 |
3 | 选择音频文件,输入歌手名,点击上传按钮。 | 上传成功,歌曲显示在用户的歌曲列表中。 |
4 | 上传格式不支持的音频文件。 | 提示 “不支持该格式的音频文件”。 |
部分测试用例效果图:
图10 选择音频文件,输入歌手名,点击上传按钮,上传成功
3.1.6 播放歌曲功能
部分测试用例效果图:
图11 选择一首歌曲,播放过程中,暂停歌曲,再次点击播放按钮,歌曲从暂停处继续播放
3.1.7 删除歌曲功能
部分测试用例效果图:
图12、图13 选择一首歌曲,点击删除按钮,歌曲被成功删除
3.1.8 添加喜欢歌曲功能
部分测试用例效果图:
图14 再次选择该歌曲,点击喜欢按钮,显示“ 歌曲已经收藏过了,无需再收藏~ ”
3.1.9 查询喜欢歌曲列表功能
测试编号 | 测试步骤 | 预期结果 |
---|---|---|
1 | 点击喜欢列表按钮。 | 显示用户喜欢的歌曲列表。 |
部分测试用例效果图:
图15 点击喜欢列表按钮,显示用户喜欢的歌曲列表
3.1.10 发布评论功能
测试编号 | 测试步骤 | 预期结果 |
---|---|---|
1 | 播放一首歌曲,点击评论按钮,输入评论内容,点击提交。 | 评论成功发布,显示在该歌曲的评论列表中。 |
2 | 发布评论过程中,取消发布。 | 评论未被发布。 |
部分测试用例效果图:
图16 点击评论按钮,输入评论内容,点击提交,评论成功
3.1.11 播放评论功能
部分测试用例效果图:
图17 选择一首有评论的歌曲,点击播放评论按钮,成功播放该歌曲的评论
3.2 自动化测试
本项目是用Junit + Selenium 工具编写代码,进行自动化测试。
3.2.1 登录
1. 设计测试用例
2. 部分代码实现
//登录成功测试用例
//输入正确的账号,输入正确的密码
@ParameterizedTest
@CsvSource({"'http://127.0.0.1:8089/login.html','http://127.0.0.1:8089/list.html'"})
void Login(String login_url,String exp_url) throws InterruptedException {
webDriver.get(login_url);
sleep(1000);
//输入正确的账号
webDriver.findElement(By.cssSelector("#user")).sendKeys("2923101535");
//输入正确的密码
webDriver.findElement(By.cssSelector("#password")).sendKeys("test123456..");
sleep(1000);
//点击登录
webDriver.findElement(By.cssSelector("#submit")).click();
sleep(1000);
//点击确定,跳转到音乐列表页
webDriver.switchTo().alert().accept();
sleep(1000);
//校验URL是否正确
String act_url = webDriver.getCurrentUrl();
Assertions.assertEquals(exp_url,act_url,"测试不通过:登录失败!");
}
3.2.2 上传歌曲
1. 设计测试用例
2. 部分代码实现
//上传成功测试用例
@Test
void Upload() throws InterruptedException {
login();
//点击"上传歌曲"
webDriver.findElement(By.cssSelector("#body > div.container > div:nth-child(3) > button")).click();
sleep(1000);
//点击"选择文件"按钮,选择歌曲
webDriver.findElement(By.cssSelector("#addmusic > input[type=file]:nth-child(1)")).sendKeys("D:\\music\\Kiiiu - 你懂得我的固执 (变速版).mp3");
sleep(1000);
//输入歌手名字
webDriver.findElement(By.cssSelector("#addmusic > label > input[type=text]")).sendKeys("Kiiiu");
sleep(1000);
//点击"上传"按钮
webDriver.findElement(By.cssSelector("#up")).click();
sleep(1000);
//获取提示文本
String act_text = webDriver.switchTo().alert().getText();
sleep(1000);
//校验提示是否正确
Assertions.assertEquals("上传成功~",act_text);
//点击确定
webDriver.switchTo().alert().accept();
sleep(1000);
//校验是否上传成功
String music = webDriver.findElement(By.cssSelector("#info > tr:nth-child(3) > td:nth-child(2)")).getText();
sleep(1000);
Assertions.assertEquals("Kiiiu - 你懂得我的固执 (变速版)",music,"测试不通过:歌曲查询不正确!");
}
3.2.3 查询歌曲
1. 设计测试用例
2. 部分代码实现
//查询成功测试用例
//输入曲库中有的歌曲名
@Test
void Search() throws InterruptedException {
login();
//在查询搜索框中输入歌曲名
webDriver.findElement(By.cssSelector("#exampleInputName2")).sendKeys("水星记");
//点击“查询”按钮
webDriver.findElement(By.cssSelector("#submit1")).click();
//获取页面歌曲标签
String music = webDriver.findElement(By.cssSelector("#info > tr > td:nth-child(2)")).getText();
//校验是否正确
Assertions.assertEquals("郭顶 - 水星记",music,"测试不通过:歌曲查询不正确!");
}
//查询失败测试用例
//输入不存在的歌手名
@Test
void SearchError() throws InterruptedException {
login();
//在查询搜索框中输入不存在的歌曲名
webDriver.findElement(By.cssSelector("#exampleInputName2")).sendKeys("周杰伦");
//点击“查询”按钮
webDriver.findElement(By.cssSelector("#submit1")).click();
sleep(1000);
//输入账号();
//获取提示信息
String act_text = webDriver.switchTo().alert().getText();
//校验是否正确
Assertions.assertEquals("在音乐库当中没有找到您要找的歌曲~",act_text,"测试不通过:歌手查询不正确!");
}
3.2.4 播放歌曲
1. 设计测试用例
2. 部分代码实现
//播放歌曲测试用例
//1.选择一首歌曲,点击播放按钮
//2.一首歌曲正在播放,选择另外一首,点击播放按钮(涵盖1)
@Test
void PlayMusic() throws UnsupportedEncodingException, InterruptedException {
login();
//点击列表第一首歌的”播放“按钮
webDriver.findElement(By.cssSelector("#info > tr:nth-child(1) > td:nth-child(4) > button:nth-child(1)")).click();
sleep(1000);
//获取当前信息
String Song_src = webDriver.findElement(By.cssSelector("#body > div:nth-child(4) > div > audio")).getAttribute("src");
String Song_Path = Song_src.split("path=")[1].split("\\.mp3")[0] + ".mp3";
String Song_information = URLDecoder.decode(Song_Path, "UTF-8");
//检查当前播放歌曲信息是否正确
Assertions.assertEquals("郭顶 - 水星记.mp3",Song_information,"测试不通过:当前播放歌曲信息不正确!");
//点击列表第二首歌的”播放“按钮
webDriver.findElement(By.cssSelector("#info > tr:nth-child(2) > td:nth-child(4) > button:nth-child(1)")).click();
sleep(1000);
//获取当前信息
String Song_src1 = webDriver.findElement(By.cssSelector("#body > div:nth-child(4) > div > audio")).getAttribute("src");
String Song_Path1 = Song_src1.split("path=")[1].split("\\.mp3")[0] + ".mp3";
String Song_information1 = URLDecoder.decode(Song_Path1, "UTF-8");
//检查当前播放歌曲信息是否正确
Assertions.assertEquals("迪丽热巴 - 第十幕 (Episode X).mp3",Song_information1,"测试不通过:当前播放歌曲信息不正确!");
}
3.2.5 删除歌曲
1. 设计测试用例
2. 部分代码实现
//删除歌曲测试用例
//选择列表第一首歌曲,点击”删除“按钮
@Test
void Delete() throws InterruptedException {
login();
//点击列表第一首歌的”删除“按钮
webDriver.findElement(By.cssSelector("#info > tr:nth-child(1) > td:nth-child(5) > button:nth-child(1)")).click();
sleep(1000);
//获取提示信息,检查提示信息是否正确
String act_text = webDriver.switchTo().alert().getText();
Assertions.assertEquals("删除成功",act_text,"测试不通过:删除失败!");
//点击确定
webDriver.switchTo().alert().accept();
sleep(1000);
//查询列表第一首歌的信息
String music = webDriver.findElement(By.cssSelector("#info > tr:nth-child(1) > td:nth-child(2)")).getText();
Assertions.assertNotEquals("郭顶 - 水星记",music,"测试不通过:删除失败!");
}
运行结果:
3.2.6 添加喜欢歌曲
1. 设计测试用例
2. 部分代码实现
//添加喜欢歌曲测试用例
@Test
void Love() throws InterruptedException {
login();
//点击列表第一首歌的“喜欢”按钮
webDriver.findElement(By.cssSelector("#info > tr:nth-child(1) > td:nth-child(5) > button:nth-child(2)")).click();
sleep(1000);
//获取提示信息,检查提示信息是否正确
String message1 = webDriver.switchTo().alert().getText();
Assertions.assertEquals("收藏成功~",message1,"测试不通过:收藏失败!");
//点击确定
webDriver.switchTo().alert().accept();
sleep(1000);
//点击”喜欢列表“按钮,跳转到喜欢列表页面
webDriver.findElement(By.cssSelector("#body > div.container > div:nth-child(3) > a:nth-child(1)")).click();
sleep(1000);
//获取当前页面URL,检查URL是否正确
String act_url = webDriver.getCurrentUrl();
Assertions.assertEquals("http://127.0.0.1:8089/loveMusic.html",act_url,"测试不通过:查询喜欢列表失败!");
//校验喜欢列表页面中,是否有刚收藏的歌曲
String act_music = webDriver.findElement(By.cssSelector("#info > tr:nth-child(1) > td:nth-child(1)")).getText();
Assertions.assertEquals("迪丽热巴 - 第十幕 (Episode X)",act_music,"测试不通过:歌曲未添加到喜欢列表!");
//点击回到首页
webDriver.findElement(By.cssSelector("#body > div.container > div:nth-child(3) > a")).click();
sleep(1000);
//再次点击第一首歌的”喜欢“按钮
webDriver.findElement(By.cssSelector("#info > tr:nth-child(1) > td:nth-child(5) > button:nth-child(2)")).click();
sleep(1000);
//获取提示信息,检查提示信息是否正确
String message2 = webDriver.switchTo().alert().getText();
Assertions.assertEquals("歌曲已经收藏过了,无需再收藏~",message2,"测试不通过:再次收藏失败!");
}
3.2.7 发表评论
1. 设计测试用例
2. 部分代码实现
//发表评论成功测试用例
@Test
void AddComment() throws InterruptedException {
login();
//选择第一首歌曲,点击”评论“按钮
webDriver.findElement(By.cssSelector("#info > tr:nth-child(1) > td:nth-child(5) > button:nth-child(3)")).click();
sleep(1000);
//在评论输入框中输入”太好听啦!!!“
webDriver.findElement(By.cssSelector("#commente")).sendKeys("太好听啦!!!");
sleep(1000);
//点击”提交按钮“
webDriver.findElement(By.cssSelector("#sendComment")).click();
sleep(1000);
//获取提示信息,校验提示信息是否正确
String message = webDriver.switchTo().alert().getText();
Assertions.assertEquals("评论成功~",message,"测试不通过:评论失败!");
sleep(1000);
//点击确定
webDriver.switchTo().alert().accept();
//点击该歌曲的”播放评论“按钮
webDriver.findElement(By.cssSelector("#info > tr:nth-child(1) > td:nth-child(4) > button:nth-child(2)")).click();
sleep(5000);
//获取页面信息,校验评论是否已经播放
String comment = webDriver.findElement(By.cssSelector("#body > div.container > span")).getText();
Assertions.assertNotNull(comment,"测试不通过:播放评论失败!");
}
运行结果: