一、项目背景
本项目是一个基于SSM框架实现的音乐播放器系统。用户可以通过简洁直观的界面浏览、搜索和播放音乐。系统具备完善的音乐管理功能,可对音乐文件进行收藏。SSM 框架确保了系统的稳定性和高效性,为用户带来流畅的使用体验。无论是音乐爱好者还是普通用户,都能在这个音乐播放器系统中享受美妙的音乐之旅
二、项目功能
1、登录功能:用户可按正常的用户名和密码进行登录,进入到音乐列表页面
2、音乐列表页面:用户可实时查看当前网站所有上传的音乐,提供音乐播放、音乐收藏和音乐删除或者批量删除功能,此外该页面还提供了音乐搜索(关键字搜索)的功能。
3、音乐收藏页面:用户可查看当前自己所收藏的所有上传音乐,并进行音乐的播放。
4、音乐上传:用户可上传本地音乐到服务器,同时系统会将该音乐相关信息存储到对应数据库中
5、音乐播放:借助SewisePlayer播放插件实现对用户上传音乐的播放
三、测试目的
尽可能地发现程序中存在的问题,保证该项目网站的基本功能正常使用,满足用户的基本需求,提供良好的用户体验。
四、测试
功能测试
登录界面
正常登录 -用户名密码都正确
异常登录 -用户名或密码错误
查询音乐
模糊查询
这里查询一颗
也是可以查到的
上传文件
喜欢功能
当音乐已经喜欢将不能再次收藏
删除功能
点击删除键
批量删除
音乐播放
自动化测试
一共四个类
一个公共类
两个功能类
一个启动类
公共类:创建了驱动对象以及自动化过程中的截图
package common;
import io.github.bonigarcia.wdm.WebDriverManager;
import org.apache.commons.io.FileUtils;
import org.openqa.selenium.OutputType;
import org.openqa.selenium.TakesScreenshot;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;
import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.time.Duration;
/**
* @author:niuniu
* @create:2024-10-04 20:15
*/
public class Utils {
public static WebDriver driver;
public static WebDriver createDriver() {
if (driver == null) {
WebDriverManager.chromedriver().setup();
ChromeOptions options = new ChromeOptions();
//允许访问所有的连接
options.addArguments("--remote-allow-origins=*");
driver = new ChromeDriver(options);
//等待
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(2));
}
return driver;
}
public Utils(String url) {
//调用driver对象
driver = createDriver();
//访问Url
driver.get(url);
}
public void getScreenShot(String str) throws IOException {
// ./src/test/image/
SimpleDateFormat sim1 = new SimpleDateFormat("yyyy-MM-dd");
SimpleDateFormat sim2 = new SimpleDateFormat("HHmmssSS");
String dirTime = sim1.format(System.currentTimeMillis());
String fileTime = sim2.format(System.currentTimeMillis());
String filename = "./src/test/image/"+dirTime + "/" + str + "-" + fileTime+".png";
//System.out.println(filename);
File srcFile = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);
FileUtils.copyFile(srcFile,new File(filename));
}
}
音乐的登陆页面 测试了正常登录和异常登录
package tests;
import common.Utils;
import org.openqa.selenium.Alert;
import org.openqa.selenium.By;
import java.io.IOException;
/**
* @author:niuniu
* @create:2024-10-04 21:53
*/
public class LoginPage extends Utils {
public static String url = "http://localhost:8080/login.html";
public LoginPage() {
super(url);
}
/**
* 检查页面是否加载成功
* @throws InterruptedException
*/
public void loginPageRight() throws InterruptedException {
//通过查看页面元素是否存在来检查页面成功与否
driver.findElement(By.cssSelector("body > div > div > h3"));
Thread.sleep(3000);
}
//检查登录功能
public void LoginSuc() throws InterruptedException, IOException {
driver.findElement(By.cssSelector("#username")).clear();
driver.findElement(By.cssSelector("#password")).clear();
driver.findElement(By.cssSelector("#username")).sendKeys("gb");
driver.findElement(By.cssSelector("#password")).sendKeys("123456");
driver.findElement(By.cssSelector("#submit")).click();
Thread.sleep(100);
Alert alert = driver.switchTo().alert();
alert.accept();
//检查登录结果
//driver.findElement(By.cssSelector("body > div.container > div.right > div:nth-child(1) > div.desc"));
String expect = driver.getTitle();
//Thread.sleep(3000);
System.out.println(expect);
getScreenShot(getClass().getName());
assert expect.equals("在线音乐服务器");
driver.navigate().back();
//driver.quit();
}
//测试登录失败
public void LoginFail() throws InterruptedException {
driver.findElement(By.cssSelector("#username")).clear();
driver.findElement(By.cssSelector("#password")).clear();
driver.navigate().refresh();
driver.findElement(By.cssSelector("#username")).sendKeys("gb");
driver.findElement(By.cssSelector("#password")).sendKeys("12345");
driver.findElement(By.cssSelector("#submit")).click();
Thread.sleep(100);
driver.switchTo().alert().accept();
//Thread.sleep(3000);
//driver.quit();
}
}
这里表示音乐播放等页面的各种功能测试
package tests;
import common.Utils;
import org.openqa.selenium.Alert;
import org.openqa.selenium.By;
import java.io.IOException;
/**
* @author:niuniu
* @create:2024-10-04 21:54
*/
public class ListPage extends Utils {
public static String url = "http://localhost:8080/list.html";
public ListPage() {
super(url);
}
/**
* 上传文件测试
* @throws IOException
*/
public void addSong() throws IOException {
driver.findElement(By.cssSelector("body > div.container > div:nth-child(3) > a:nth-child(2)")).click();
driver.findElement(By.cssSelector("body > form > input[type=file]:nth-child(1)")).sendKeys("D:\\桌面\\使一颗心脏免于哀伤.mp3");
driver.findElement(By.cssSelector("body > form > label > input[type=text]")).sendKeys("知更鸟");
driver.findElement(By.cssSelector("body > form > input[type=submit]:nth-child(3)")).click();
String expect = driver.getTitle();
//Thread.sleep(3000);
System.out.println(expect);
getScreenShot(getClass().getName());
assert expect.equals("在线音乐服务器");
//driver.quit();
}
/**
* 删除文件测试
* @throws InterruptedException
* @throws IOException
*/
public void deleteSong() throws InterruptedException, IOException {
driver.findElement(By.cssSelector("#info > tr:nth-child(2) > td:nth-child(5) > button:nth-child(1)")).click();
Thread.sleep(100);
driver.switchTo().alert().accept();
String expect = driver.getTitle();
//Thread.sleep(3000);
System.out.println(expect);
getScreenShot(getClass().getName());
assert expect.equals("在线音乐服务器");
//driver.quit();
}
/**
* 批量删除
*/
public void batchRemove() throws InterruptedException, IOException {
driver.findElement(By.cssSelector("#info > tr:nth-child(1) > th > input")).click();
driver.findElement(By.cssSelector("#info > tr:nth-child(2) > th > input")).click();
driver.findElement(By.cssSelector("#delete")).click();
Thread.sleep(100);
driver.switchTo().alert().accept();
String expect = driver.getTitle();
//Thread.sleep(3000);
System.out.println(expect);
getScreenShot(getClass().getName());
assert expect.equals("在线音乐服务器");
driver.quit();
}
/**
* 添加喜欢
* @throws InterruptedException
*/
public void loveMusic() throws InterruptedException {
//添加喜欢
driver.findElement(By.cssSelector("#info > tr:nth-child(1) > td:nth-child(5) > button:nth-child(2)")).click();
Thread.sleep(100);
driver.switchTo().alert().accept();
Thread.sleep(3000);
//再次添加
driver.findElement(By.cssSelector("#info > tr:nth-child(1) > td:nth-child(5) > button:nth-child(2)")).click();
Thread.sleep(100);
driver.switchTo().alert().accept();
//喜欢列表
driver.findElement(By.cssSelector("#body > div.container > div:nth-child(3) > a:nth-child(1)")).click();
//验证页面
driver.findElement(By.cssSelector("body > div.container > h3"));
//移除操作
driver.findElement(By.cssSelector("#info > tr > td:nth-child(4) > button")).click();
Thread.sleep(100);
driver.switchTo().alert().accept();
//driver.quit();
}
/**
* 查询测试
*/
public void queryMusic() {
//查询
driver.findElement(By.cssSelector("#exampleInputName2")).sendKeys("偏向");
driver.findElement(By.cssSelector("#submit1")).click();
driver.findElement(By.cssSelector("#info > tr > td:nth-child(2)"));
driver.navigate().back();
driver.navigate().forward();
driver.findElement(By.cssSelector("#exampleInputName2")).clear();
driver.findElement(By.cssSelector("#exampleInputName2")).sendKeys("偏");
driver.findElement(By.cssSelector("#submit1")).click();
driver.findElement(By.cssSelector("#info > tr > td:nth-child(2)"));
driver.findElement(By.cssSelector("#exampleInputName2")).clear();
driver.findElement(By.cssSelector("#submit1")).click();
//driver.quit();
}
}
这个类表示启动
import tests.ListPage;
import tests.LoginPage;
import java.io.IOException;
/**
* @author:niuniu
* @create:2024-10-04 22:04
*/
public class RunTests {
public static void main(String[] args) throws InterruptedException, IOException {
LoginPage loginPage = new LoginPage();
loginPage.loginPageRight();
loginPage.LoginSuc();
loginPage.LoginFail();
ListPage listPage = new ListPage();
listPage.queryMusic();
listPage.loveMusic();
listPage.addSong();
listPage.deleteSong();
listPage.batchRemove();
}
}