在线音乐服务器测试报告

2024-02-07 23:28

本文主要是介绍在线音乐服务器测试报告,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、项目背景

       在线音乐服务器采用前后端分离的方法来实现,同时使用了数据库来存储相关的数据,同时将其部署到云服务器上。前端主要有个页面构成:登录页、音乐列表页、收藏音乐页等,以上模拟实现了最简单的在线音乐服务器。其结合后端实现了以下的主要功能:登录、上传音乐、播放音乐、查询音乐、删除音乐、收藏音乐、取消收藏音乐等功能。该音乐服务器可以实现用户简单的听音乐,收藏音乐等需求。

二、项目功能

       在线音乐服务器主要实现了以下几个功能:登录、上传音乐、播放音乐、查询音乐、删除音乐、收藏音乐、取消收藏音乐等功能。

  1. 登录功能:用户输入用户名和密码,如果输入正确的用户名和密码则登录成功并跳转到个人博客列表页面;如果输入错误的用户名和密码则提示用户输入的信息有误,登录失败。

  2. 上传音乐功能:用户上传格式正确的音乐文件,以及填写音乐所属的歌手名,最终能成功上传到服务器保存。

  3. 播放音乐功能:用户点击播放音乐,音乐能够正常播放。

  4. 查询音乐功能:用户可以通过模糊查询和精确查询所要想搜索的音乐。

  5. 删除音乐功能:用户可以单个删除音乐,也可以通过勾选批量删除多个音乐。

  6. 收藏音乐功能:用户选择喜欢的音乐可进行收藏,成功收藏后可保存在个人收藏列表页。

  7. 展示收藏音乐功能:展示用户收藏的喜欢的音乐,并且能够进行正常的播放等操作。

  8. 取消收藏音乐功能:用户在收藏音乐的列表中可以选择删除取消收藏的音乐。

三、Web自动化测试

一)测试用例设计
在这里插入图片描述

二)代码编写

  1. 登录功能测试
    ① 创建驱动,并打开页面;
    ② 测试页面是否正常打开;
    ③ 测试正常登录:使用正确的用户名和密码进行等;
    ④ 测试异常登录:用户名/密码不正确,登录失败,多参数测试;
    ⑤ 注意测试的顺序,使用Order注解指定,否则可能会因为执行顺序不对导致测试失败;
    ⑥ 注意清空内容后才能再次输入用户名、密码。
package com.musicAutoTest.Tests;import com.musicAutoTest.common.AutotestUtils;
import org.junit.jupiter.api.*;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.CsvSource;
import org.openqa.selenium.Alert;
import org.openqa.selenium.By;
import org.openqa.selenium.chrome.ChromeDriver;import java.time.Duration;@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
public class LoginTest extends AutotestUtils {private static ChromeDriver driver = createDriver();@BeforeAllstatic void baseControl() {driver.get("http://localhost:8888/login.html");}/*** 页面可以正常显示*/@Test@Order(1)void LoginLoadRight() {driver.findElement(By.cssSelector("#body > div > div:nth-child(3) > label"));driver.findElement(By.cssSelector("#body > div > div.alert.alert-warning.alert-dismissible"));}/*** 正常登录*/@Test@Order(3)void LoginSuc() throws InterruptedException {driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));driver.findElement(By.cssSelector("#user")).clear();driver.findElement(By.cssSelector("#password")).clear();driver.findElement(By.cssSelector("#user")).sendKeys("shuai");driver.findElement(By.cssSelector("#password")).sendKeys("123456");driver.findElement(By.cssSelector("#submit")).click();Thread.sleep(5);Alert alert = driver.switchTo().alert();alert.accept();//检查是否登录成功driver.findElement(By.cssSelector("#body > div.container > h3"));driver.findElement(By.cssSelector("#body > div.container > div:nth-child(3) > a:nth-child(1)"));driver.navigate().back();}/*** 异常登录*/@ParameterizedTest@Order(2)@CsvSource({"'',''","'',123","'',123","123,123"})void LoginFail(String name, String password) throws InterruptedException {driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));driver.findElement(By.cssSelector("#user")).clear();driver.findElement(By.cssSelector("#password")).clear();driver.findElement(By.cssSelector("#user")).sendKeys(name);driver.findElement(By.cssSelector("#password")).sendKeys(password);driver.findElement(By.cssSelector("#submit")).click();Thread.sleep(5);Alert alert = driver.switchTo().alert();alert.accept();//检查是否登录没成功driver.findElement(By.cssSelector("#body > div > div:nth-child(3) > label"));driver.findElement(By.cssSelector("#body > div > div.alert.alert-warning.alert-dismissible"));}
}
  1. 上传音乐功能测试
    ① 如若驱动已经创建好则不需再次创建驱动,打开页面;
    ② 测试页面是否正常打开;
    ③ 正常的上传,上传正确格式的音乐文件;
    ④ 测试异常上传:上传非音乐格式的文件。
package com.musicAutoTest.Tests;import com.musicAutoTest.common.AutotestUtils;
import org.junit.jupiter.api.*;
import org.openqa.selenium.By;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;import java.time.Duration;
import java.util.List;@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
public class UploadMusicTest extends AutotestUtils {private static ChromeDriver driver = createDriver();@BeforeAllstatic void baseControl() {driver.get("http://localhost:8888/list.html");}/*** 检查页面能否正常打开*/@Test@Order(1)void pageLoadRight() {driver.findElement(By.cssSelector("#body > div.container > h3"));driver.findElement(By.cssSelector("#body > div.container > div:nth-child(3)"));}/*** 上传音乐*/@Test@Order(2)void uploadSuc() {driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));List<WebElement> list1 = driver.findElements(By.name("tr"));int count1 = list1.size();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("C:/music.mp3");driver.findElement(By.cssSelector("body > form > label > input[type=text]")).sendKeys("user");driver.findElement(By.cssSelector("body > form > input[type=submit]:nth-child(3)")).click();List<WebElement> list2 = driver.findElements(By.name("tr"));int count2 = list2.size();int suc = count2 - count1;Assertions.assertEquals("1",suc+"");}}
  1. 播放音乐功能测试
    ① 如若驱动已经创建好则不需再次创建驱动,打开页面;
    ② 测试页面是否正常打开;
    ③ 点击播放音乐按钮;
    ④ 测试音乐是否播放,检查点为属性值。
package com.musicAutoTest.Tests;import com.musicAutoTest.common.AutotestUtils;
import org.junit.jupiter.api.*;
import org.openqa.selenium.By;
import org.openqa.selenium.chrome.ChromeDriver;@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
public class RunMusicTest extends AutotestUtils {private static ChromeDriver driver = createDriver();//打开页面@BeforeAllstatic void baseControl() {driver.get("http://localhost:8888/list.html");}//页面能否正常显示@Test@Order(1)void pageLoadRight() {driver.findElement(By.cssSelector("#body > div.container > h3"));driver.findElement(By.cssSelector("#body > div.container > div:nth-child(3)"));}//能否正常播放音乐@Test@Order(2)void runMusicSuc() {driver.findElement(By.cssSelector("#info > tr:nth-child(1) > td:nth-child(4) > button")).click();//检查点,属性值String text = driver.findElement(By.cssSelector("#body > div:nth-child(2) > div > div > div.controlbar > ul > li:nth-child(1) > a")).getAttribute("style");System.out.println(text);Assertions.assertEquals("display: none;",text);}}
  1. 查询音乐功能
    ① 如若驱动已经创建好则不需再次创建驱动,打开页面;
    ② 测试页面是否正常打开;
    ③ 输入空字符进行查询;
    ④ 分别进行模糊查询和精确查询测试是否能查询到。
package com.musicAutoTest.Tests;import com.musicAutoTest.common.AutotestUtils;
import org.junit.jupiter.api.*;
import org.openqa.selenium.By;
import org.openqa.selenium.chrome.ChromeDriver;import java.time.Duration;@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
public class SelectMusicTest extends AutotestUtils {private static ChromeDriver driver = createDriver();//打开页面@BeforeAllstatic void baseControl() {driver.get("http://localhost:8888/list.html");}//页面能否正常显示@Test@Order(1)void pageLoadRight() {driver.findElement(By.cssSelector("#body > div.container > h3"));driver.findElement(By.cssSelector("#body > div.container > div:nth-child(3)"));}//精确查询@Test@Order(2)void searchOne() {driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));driver.findElement(By.cssSelector("#exampleInputName2")).clear();driver.findElement(By.cssSelector("#exampleInputName2")).sendKeys("music");driver.findElement(By.cssSelector("#submit1")).click();String text = driver.findElement(By.cssSelector("#info > tr > td:nth-child(2)")).getText();Assertions.assertEquals("music",text);}//模糊查询@Test@Order(3)void searchMore() {driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));driver.findElement(By.cssSelector("#exampleInputName2")).clear();driver.findElement(By.cssSelector("#exampleInputName2")).sendKeys("mu");driver.findElement(By.cssSelector("#submit1")).click();String text = driver.findElement(By.cssSelector("#info > tr > td:nth-child(2)")).getText();Assertions.assertEquals("music",text);}
}
  1. 收藏音乐功能
    ① 如若驱动已经创建好则不需再次创建驱动,打开页面;
    ② 测试页面是否正常打开;
    ③ 点击收藏音乐,测试是否被收藏。
package com.musicAutoTest.Tests;import com.musicAutoTest.common.AutotestUtils;
import org.junit.jupiter.api.*;
import org.openqa.selenium.Alert;
import org.openqa.selenium.By;
import org.openqa.selenium.chrome.ChromeDriver;@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
public class LoveMusicTest extends AutotestUtils {private static ChromeDriver driver = createDriver();//打开页面@BeforeAllstatic void baseControl() {driver.get("http://localhost:8888/list.html");}//页面能否正常显示@Test@Order(1)void pageLoadRight() {driver.findElement(By.cssSelector("#body > div.container > h3"));driver.findElement(By.cssSelector("#body > div.container > div:nth-child(3)"));}//点击喜欢@Test@Order(2)void loveMusicSuc() throws InterruptedException {driver.findElement(By.cssSelector("#info > tr:nth-child(1) > td:nth-child(5) > button:nth-child(2)")).click();Thread.sleep(5);Alert alert = driver.switchTo().alert();String text = alert.getText();alert.accept();Assertions.assertEquals("加入喜欢的列表成功",text);}//重复点击@Test@Order(3)void loveMusicFail() throws InterruptedException {driver.findElement(By.cssSelector("#info > tr:nth-child(1) > td:nth-child(5) > button:nth-child(2)")).click();Thread.sleep(8);Alert alert = driver.switchTo().alert();String text = alert.getText();alert.accept();Assertions.assertNotEquals("加入喜欢的列表成功",text);}}
  1. 展示收藏音乐列表功能
    ① 如若驱动已经创建好则不需再次创建驱动,打开页面;
    ② 测试页面是否正常打开;
    ③ 测试刚收藏的音乐是否再列表中展示。
package com.musicAutoTest.Tests;import com.musicAutoTest.common.AutotestUtils;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Test;
import org.openqa.selenium.By;
import org.openqa.selenium.chrome.ChromeDriver;public class ShowLoveMusicTest extends AutotestUtils {private static ChromeDriver driver = createDriver();@BeforeAllstatic void baseControl() {driver.get("http://localhost:8888/loveMusic.html");}/*** 展示收藏的音乐列表*/@Testvoid showSuc() {String text = driver.findElement(By.cssSelector("#info > tr > td:nth-child(2)")).getText();Assertions.assertEquals("music",text);}}
  1. 取消收藏音乐功能
    ① 如若驱动已经创建好则不需再次创建驱动,打开页面;
    ② 测试页面是否正常打开;
    ③ 点击取消收藏音乐,检查音乐是否已经被移除收藏列表。
package com.musicAutoTest.Tests;import com.musicAutoTest.common.AutotestUtils;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Test;
import org.openqa.selenium.By;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;import java.util.List;public class DeleteLoveMusicTest extends AutotestUtils {private static ChromeDriver driver = createDriver();@BeforeAllstatic void baseControl() {driver.get("http://localhost:8888/loveMusic.html");}/*** 取消收藏的音乐*/@Testvoid deleteLoveMusic() {List<WebElement> list = driver.findElements(By.name("#tr"));int count1 = list.size();driver.findElement(By.cssSelector("#info > tr > td:nth-child(5) > button")).click();//统计数量List<WebElement> list2 = driver.findElements(By.name("tr"));int count2 = list2.size();//再统计数量int suc = count1 - count2;Assertions.assertEquals("1",suc+"");}}
  1. 删除音乐功能
    ① 如若驱动已经创建好则不需再次创建驱动,打开页面;
    ② 测试页面是否正常打开;
    ③ 点击删除音乐,检查音乐是否被删除。
package com.musicAutoTest.Tests;import com.musicAutoTest.common.AutotestUtils;
import org.junit.jupiter.api.*;
import org.openqa.selenium.By;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;import java.util.List;@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
public class DeleteMusicTest extends AutotestUtils {private static ChromeDriver driver = createDriver();@BeforeAllstatic void baseControl() {driver.get("http://localhost:8888/loveMusic.html");}/*** 删除音乐*/@Testvoid deleteMusic() {List<WebElement> list = driver.findElements(By.name("#tr"));int count1 = list.size();driver.findElement(By.cssSelector("#info > tr:nth-child(1) > td:nth-child(5) > button:nth-child(1)")).click();//统计数量List<WebElement> list2 = driver.findElements(By.name("tr"));int count2 = list2.size();//再统计数量int suc = count1 - count2;Assertions.assertEquals("1",suc+"");}
}
  1. 屏幕截图
    /*** 动态生成时间*/public List<String> getTime() {//文件夹按照天的维度进行保存//文件格式 20240109-123030SimpleDateFormat simpleDateFormat1 = new SimpleDateFormat("yyyyMMdd-HHmmssSS");SimpleDateFormat simpleDateFormat2 = new SimpleDateFormat("yyyyMMdd");String filename = simpleDateFormat1.format(System.currentTimeMillis());String dirname = simpleDateFormat2.format(System.currentTimeMillis());List<String> list = new ArrayList<>();list.add(dirname);list.add(filename);return list;}/*** 获取屏幕截图,把所有的测试用例执行的结果保存下来*/public void getScreenShor(String str) throws IOException {List<String> list = getTime();//dir+filename// ./src/test/java/com/blogWebAutoTest/dirname/filenameString fileName = "./src/test/java/com/blogWebAutoTest/"+list.get(0) + "/" + str + "-" + list.get(1) + ".png";File srcfile = driver.getScreenshotAs(OutputType.FILE);//把屏幕截图生成的文件放到指定的路径FileUtils.copyFile(srcfile,new File(fileName));String filename = "my";}

三)代码测试
在这里插入图片描述

四、总结

  1. 使用了Junit5中提供的注解:避免生成过多的对象,造成资源和时间的浪费,提高了自动化的执行效率。
  2. 只创建一次驱动对象,避免每个用例重复创建驱动对象造成时间和资源的浪费。
  3. 使用参数化:保持用例的简洁,提高代码的可读性。
  4. 使用测试套件:降低了测试人员的工作量,通过套件一次执行所有要运行的测试用例。
  5. 使用了等待:提高了自动化的运行效率,提高了自动化的稳定性,减小误报的可能性。
  6. 使用了屏幕截图:方便问题的追溯以及问题的解决。
  7. 使用了无头模式:只注重结果,可以留出屏幕。

这篇关于在线音乐服务器测试报告的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/689237

相关文章

使用Python实现快速搭建本地HTTP服务器

《使用Python实现快速搭建本地HTTP服务器》:本文主要介绍如何使用Python快速搭建本地HTTP服务器,轻松实现一键HTTP文件共享,同时结合二维码技术,让访问更简单,感兴趣的小伙伴可以了... 目录1. 概述2. 快速搭建 HTTP 文件共享服务2.1 核心思路2.2 代码实现2.3 代码解读3.

CentOS 7部署主域名服务器 DNS的方法

《CentOS7部署主域名服务器DNS的方法》文章详细介绍了在CentOS7上部署主域名服务器DNS的步骤,包括安装BIND服务、配置DNS服务、添加域名区域、创建区域文件、配置反向解析、检查配置... 目录1. 安装 BIND 服务和工具2.  配置 BIND 服务3 . 添加你的域名区域配置4.创建区域

Windows Server服务器上配置FileZilla后,FTP连接不上?

《WindowsServer服务器上配置FileZilla后,FTP连接不上?》WindowsServer服务器上配置FileZilla后,FTP连接错误和操作超时的问题,应该如何解决?首先,通过... 目录在Windohttp://www.chinasem.cnws防火墙开启的情况下,遇到的错误如下:无法与

Windows server服务器使用blat命令行发送邮件

《Windowsserver服务器使用blat命令行发送邮件》在linux平台的命令行下可以使用mail命令来发送邮件,windows平台没有内置的命令,但可以使用开源的blat,其官方主页为ht... 目录下载blatBAT命令行示例备注总结在linux平台的命令行下可以使用mail命令来发送邮件,Win

Ubuntu 22.04 服务器安装部署(nginx+postgresql)

《Ubuntu22.04服务器安装部署(nginx+postgresql)》Ubuntu22.04LTS是迄今为止最好的Ubuntu版本之一,很多linux的应用服务器都是选择的这个版本... 目录是什么让 Ubuntu 22.04 LTS 变得安全?更新了安全包linux 内核改进一、部署环境二、安装系统

nginx配置多域名共用服务器80端口

《nginx配置多域名共用服务器80端口》本文主要介绍了配置Nginx.conf文件,使得同一台服务器上的服务程序能够根据域名分发到相应的端口进行处理,从而实现用户通过abc.com或xyz.com直... 多个域名,比如两个域名,这两个域名其实共用一台服务器(意味着域名解析到同一个IP),一个域名为abc

pycharm远程连接服务器运行pytorch的过程详解

《pycharm远程连接服务器运行pytorch的过程详解》:本文主要介绍在Linux环境下使用Anaconda管理不同版本的Python环境,并通过PyCharm远程连接服务器来运行PyTorc... 目录linux部署pytorch背景介绍Anaconda安装Linux安装pytorch虚拟环境安装cu

MySQL 中的服务器配置和状态详解(MySQL Server Configuration and Status)

《MySQL中的服务器配置和状态详解(MySQLServerConfigurationandStatus)》MySQL服务器配置和状态设置包括服务器选项、系统变量和状态变量三个方面,可以通过... 目录mysql 之服务器配置和状态1 MySQL 架构和性能优化1.1 服务器配置和状态1.1.1 服务器选项

ElasticSearch+Kibana通过Docker部署到Linux服务器中操作方法

《ElasticSearch+Kibana通过Docker部署到Linux服务器中操作方法》本文介绍了Elasticsearch的基本概念,包括文档和字段、索引和映射,还详细描述了如何通过Docker... 目录1、ElasticSearch概念2、ElasticSearch、Kibana和IK分词器部署

部署Vue项目到服务器后404错误的原因及解决方案

《部署Vue项目到服务器后404错误的原因及解决方案》文章介绍了Vue项目部署步骤以及404错误的解决方案,部署步骤包括构建项目、上传文件、配置Web服务器、重启Nginx和访问域名,404错误通常是... 目录一、vue项目部署步骤二、404错误原因及解决方案错误场景原因分析解决方案一、Vue项目部署步骤