听吧音乐项目测试

news/2024/5/3 5:53:49/文章来源:https://blog.csdn.net/weixin_50901244/article/details/126908302

听吧音乐项目

听吧音乐测试

  • 1.项目背景
  • 2.需求分析
    • 2.1 用户需求
    • 2.2 软件需求
  • 3. 测试点分析及测试用例
  • 4. 自动化测试代码
    • 4.1 注册登录注销模块自动化测试代码
    • 4.2 专辑播放自动化测试代码
  • 5. 测试报告

1.项目背景

听吧音乐是一个在线听歌网站,游客通过首页可以在线收听其他创作者发布的专辑歌曲。创作者可以创建专辑并为专辑绑定歌曲,歌曲可以从本地上传同时也可以在线录制。

2.需求分析

需求包含用户需求和软件需求。

2.1 用户需求

用户需求:实现一个在线听歌网站,用户可以创建专辑并为专辑绑定歌曲。

2.2 软件需求

登录注册注销模块:用户可以正常登录注册注销。
音频管理模块:用户可以从本地上传音频文件还可以录制音频上传,音频列表可以正常显示。
专辑管理模块:用户可以新建专辑并为专辑绑定歌曲,同时可以正常显示已创建的专辑。

3. 测试点分析及测试用例

在这里插入图片描述

用例编号测试内容测试方式测试数据操作步骤预期结果实际结果
001界面测试手工1.用户访问听吧音乐网站 2.对每个页面进行测试每个界面无显示问题每个界面无显示问题
002注册功能测试自动化测试用户名:小赵
用户密码:123
1.进入网站
2.点击注册按钮
3.输入用户名和密码
用户成功注册用户成功注册
003注册功能测试自动化测试用户名:
用户密码:123
1.进入网站
2.点击注册按钮
3.输入密码
用户注册失败用户成功注册
004注册功能测试自动化测试用户名:小钱
用户密码:
1.进入网站
2.点击注册按钮
3.输入用户名
用户注册失败用户成功注册
005登录功能测试自动化测试用户名:
用户密码:123
1.进入网站
2.点击登录按钮
3.输入密码
用户登录成功用户成功登录
006登录功能测试自动化测试用户名:小钱
用户密码:
1.进入网站
2.点击登录按钮
3.输入用户名
用户登录失败用户登录失败
007音频上传测试手工用户名:小赵
用户密码:123
音频文件
1.进入网站
2.用户登录
3.点击上传按钮
4.选择文件上传
文件上传成功文件上传成功
008音频上传测试手工用户名:小赵
用户密码:123
音频文件
1.进入网站
2.用户登录
3.点击上传按钮
4.选择文件上传
文件上传成功文件上传成功
009首页专辑播放测试自动化1.进入网站
2.点击专辑名称
3.点击播放按钮
音频成功播放音频成功播放

4. 自动化测试代码

4.1 注册登录注销模块自动化测试代码

import unittest
from selenium import webdriver
import time
from ddt import ddt, data, unpack, file_data
coding = "utf-8"from selenium.webdriver.common.by import By@ddt
class login(unittest.TestCase):def setUp(self):  # 测试固件print("************setUp************")self.driver = webdriver.Chrome()self.url = "http://43.143.178.204:8080/studio/"self.driver.maximize_window()time.sleep(5)# tearDown:测试环境的清理def tearDown(self):print("************tearDown************")self.driver.quit()# @unittest.skip("skipping")# 测试注册用户@data(['小赵', '123'], ['小钱', '123'],['小孙', ''],['', '123'],['小钱', '123'])@unpack  # 将数据绑定在一起def test_aaRegister(self,username,password):driver = self.driverurl = self.urldriver.get(url)time.sleep(2)driver.find_element(By.LINK_TEXT, "注册").click()driver.implicitly_wait(3)driver.find_element(By.NAME, "username").send_keys(username)driver.find_element(By.NAME, "password").send_keys(password)driver.find_element(By.TAG_NAME, "button").click()# time.sleep(5)print("************注册成功************")# @unittest.skip("skipping")@data(['小赵', '123'], ['小钱', '123'], ['小孙', ''], ['', '123'])@unpack  # 将数据绑定在一起def test_bbLogin(self,username,password):driver = self.driverurl = self.urldriver.get(url)time.sleep(2)driver.find_element(By.LINK_TEXT, "登录").click()driver.implicitly_wait(5)driver.find_element(By.NAME, "username").send_keys(username)driver.find_element(By.NAME, "password").send_keys(password)driver.find_element(By.TAG_NAME, "button").click()# time.sleep(5)print("*********登录成功*********")# @unittest.skip("skipping")def test_cQuit(self):driver = self.driverurl = self.urldriver.get(url)time.sleep(2)driver.find_element(By.LINK_TEXT, "注销").click()time.sleep(5)print("*********登录成功*********")if __name__ == "__main__":unittest.main(verbosity=2)

4.2 专辑播放自动化测试代码

from selenium import webdriver
import unittest
import timecoding = "utf-8"from selenium.webdriver.common.by import By# 点击进入网站首页(已发布专辑列表页面),任意点击一个专辑,播放音频,切换下一首、上一首、暂停,返回首页,点击进入创作中心
class publishedAlbumList(unittest.TestCase):def setUp(self):print("************setUp************")# self.driver,driver 就是全局变量了self.driver = webdriver.Chrome()self.url = "http://43.143.178.204:8080/"self.driver.maximize_window()time.sleep(5)# tearDown:测试环境的清理def tearDown(self):print("************tearDown************")self.driver.quit()def test_aChoiceAlbum(self):driver = self.driverurl = self.urldriver.get(url)time.sleep(2)# 点击专辑名称(进入专辑)driver.find_element(By.LINK_TEXT, "华语私人定制").click()# 固定等待(必须等够设置的时长)time.sleep(5)# 隐式等待(只能等待,等到页面上的元素加载出来之后就去执行下一条指令)# driver.implicitly_wait(5);print("************进入专辑啦************")time.sleep(2)# 进人播放页面(开始播放)play = driver.find_element(By.CSS_SELECTOR, '.fa-play')driver.execute_script("arguments[0].click();", play)time.sleep(15)# 下一首print("************开始播放啦************")driver.find_element(By.ID, "next").click()time.sleep(15)print("************播放下一首************")# 上一首driver.find_element(By.ID, "prev").click()time.sleep(15)print("************播放上一首************")# 暂停driver.execute_script("arguments[0].click();", play)print("************暂停************")time.sleep(3)# 返回首页driver.find_element(By.LINK_TEXT, "听吧音乐").click()time.sleep(3)print("************返回首页************")driver.find_element(By.LINK_TEXT, "创作中心").click()time.sleep(3)print("************进入创作中心************")if __name__ == "__main__":unittest.main(verbosity=2)

5. 测试报告

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_9295.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

WinUI 3 踩坑记:第一个窗口

本文是 WinUI 3 踩坑记 的一部分,该系列发布于 GitHub@Scighost/WinUI3Keng,文中的代码也在此仓库中,若内容出现冲突以 GitHub 上的为准。WinUI 3 应用的入口和 UWP 类似,也是继承自 Application 的一个类,略有不同的是没有 UWP 那么多的启动方式可供重写,只有一个 OnLau…

python计算离散积分

前言 本文是傅立叶及其python应用系列的第一篇文章对应的仓库地址为https://github.com/yuanzhoulvpi2017/tiny_python/tree/main/Fourier_Series 介绍 本篇文章将要介绍一个非常小众的scipy函数:simpson. 这个函数的一大功能就是可以对离散数据积分。之所以要介…

P39 事件处理

P39 事件处理1.事件模型的流程2.事件监听器2.1 动作监听器(ActionListener)2.2 焦点监听器(FocusListener)2.3 鼠标监听器(MouseListener)2.4 鼠标移动/拖动监听器(MouseMotionListener&#xf…

SpringAOP的概述与实现

目录 SpringAOP的概述 什么是AOP AOP能干什么 AOP的特点 AOP底层实现 AOP基本概念 连接点 切入点 通知 切面 目标对象 织入 引入 谈谈你对AOP的理解? SpringAOP的实现 依赖引用 spring.xml配置 注解实现 1.定义切面 设置通知 2.开启aop 3.测试 …

金仓数据库KingbaseES客户端编程开发框架-MyBatis(2. 概述 3. MyBatis配置说明)

2. 概述 MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息, 将接口和 Java 的 POJOs(Plain Old Ja…

Sourcemap 配置详解

前言 之前在脚手架工具内整合将sourcemap上传sentry能力的时候,考虑bundle分割对.map文件关联的限制:比如TerserWebpackPlugin(JS压缩)只对 devtool 选项的 source-map,inline-source-map,hidden-source-m…

后端研发工程师面经——JAVA语言

文章目录2. JAVA语言2.1 面向对象的三大特性2.2 JAVA异常2.2.1 异常产生的原因2.2.2 异常的分类2.2.3 异常的处理方式2.3 序列化和反序列化2.3.1 概念2.3.2 JAVA中的序列化和反序列化2.3.3 序列化和反序列化的接口2.3.4 Serialization接口详解2.3.5 Externalizable接口详解2.3.…

3D建模师做多了女人会不会找不到老婆?次世代美少女战士建模流程讲解

什么是次世代? 次世代是个舶来语,“次世代游戏”指代和同类游戏相比下更加先进的游戏,即“下一代游戏”。 次世代是利用高模烘焙的法线贴图回帖到低模上,让低模在游戏引擎里可以及时显示高模的视觉效果。模型面数比较高&#xf…

算法 - 计数排序(Counting_Sort)

目录 引言: 学习: 什么是计数排序(Counting_sort)? 定义: 算法思想: 排序过程: Step 1 : Step 2 : Step 3 : Step 4 : Step 5 &…

单片机项目式实训总篇

采取新方法,让自己尽快变强,为了更好的再次见面。停止大脑内斗。 总学习目标:(完成后此文字支持跳转) 基础知识 端口操作 显示 高级输入 时间控制 综合 Flag: 一周破解C51程序 学习内容: 了解单片…

DeepExploit——当Metasploit遇上机器学习

Metasploit Meets Machine Learning 文章目录Metasploit Meets Machine Learning1. Metasploit准备1.1 与外部项目的合作1.1.1 启用RPC API1.1.2 使用RPC API操作Metasploit2. 创建机器学习模型2.1 DQN2.2 A3C2.2.1 CartPole2.2.2 分布式学习机制3. 深度利用3.1 代理任务3.2 当…

JVM——GC垃圾回收机制

文章目录JVM——GC垃圾回收机制一、如何判断哪些对象应该被回收——对象判活算法引用计数算法可达性分析算法引用最终判定二、对象应该怎么被回收——垃圾回收算法分代收集理论标记-清除算法标记-复制算法标记-整理算法三、内存对象什么时候被回收——触发条件年轻代GC(Minor G…

如期而至的SVN服务器迁移引来一个大瓜XAMPP

文章目录前言方案评估前奏XAMMP搭建svn服务准备软件包安装必要环境和工具安装xampp运行xampp编辑xampp访问xampp安装subversion安装svnmanager创建svn仓库目录修改配置文件为svnmanager创建MySQL用户重启xammp服务访问svnmanager登录svnmanager可能遇到的错误查看服务器目录信息…

10 nginx 中的 slab

前言 这里主要是描述 nginx 中的 slab 内存分配相关 slab 在很多的地方都有使用, 比如 linux, nginx, netty 等等 主要的作用是 内存管理, 复用 简略 nginx 中的 slab 的流程 # slab relatedvoid* poolPtr malloc(2048);ngx_slab_pool_t *pool (ngx_slab_pool_t *)poo…

Pytorch深度学习——线性回归实现 04(未完)

文章目录1 问题假设2 步骤3 学习使用Pytorch的API来搭建模型3.1 nn.Model3.2 优化器类3.3 评估模式和训练模式3.4 使用GPUdata和item的区别1 问题假设 假设我们的基础模型就是y wxb,其中w和b均为参数,我们使用y 3x0.8来构造数据x、y,所以最后通过模型…

0.django部署(基础知识)

我们前面的代码都是在我们自己的电脑(通常是Windows操作系统)上面运行的,因为我们还处于开发过程中。 当我们完成一个阶段的开发任务后,就需要把我们开发的网站服务,给真正的用户使用了。 那就需要我们的 网站 部署在…

【二次分配问题】基于遗传算法 (GA)、粒子群优化 (PSO) 和萤火虫算法 (FA) 求解二次分配( QAP)问题(MATLAB 实现)

目录 1 概述 3 Matlab代码及文章阅读 4 运行结果 4.1 萤火虫算法 4.2 粒子群优化算法 4.3 遗传算法 5 参考文献 1 概述 目前,该问题已经得到深入的研究,进化策略(evolutionstrategies)、遗传算法(genetic algorithms)、遗传规划(geneticprogramm…

警惕利用「以太坊合并」的 3 种骗局

原文作者:茉莉 距离以太坊合并还有不到 6 小时,这条被视作下一代互联网 Web3.0 底层基础设施的区块链网络将彻底改变共识机制,从工作量证明的 PoW 机制转向权益证明的 PoS。 在合并即将到来前,去中心化安全网络市场 PolySwarm 创…

各语言转wasm-js调用

起源是 我司应该是抄袭某家player , 也用wasm做的 , 所以我也研究一下 关于标题 我估计需要大家一起完善了 , 我只会讲一下 go c 别的都不会 webassembly( wasm ) 可以编译的如图 我想起我这边应用啊 也就无非播放器~~ 本地文件压缩啊加密啊或直接就上传了, 或者在操作数据…

RestHighLevelClient创建索引时报错[299 Elasticsearch-7.12.1

RestHighLevelClient创建索引时报错[299 Elasticsearch-7.12.1出现原因 : 这是因为在使用create方法时 , 会有两个选择 , 其中一个已经过时了 client.indices().create(request, RequestOptions.DEFAULT); 其中的create方法 , 有两个版本 , 有一个显示已经过时了 , 两个方法虽然…