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

仿QQ音乐的音乐播放器自动化测

⼀、概述

1.测试的背景

仿 QQ 音乐播放器作为一款音乐类应用,核心定位是为用户提供音乐播放、资源搜索、歌单管理及社交化交互功能,需对齐 QQ 音乐主流用户场景与体验标准。本次自动化测试聚焦功能完整性验证界面交互稳定性,覆盖用户从 “进入应用 - 操作核心功能 - 完成退出” 的全流程,不包含底层性能(如音频解码效率)、网络带宽适配、跨终端数据同步等非功能测试范畴。

2.测试的模块和目标

  • 测试的模块:界面logo、音乐播放控制(播放/暂停/切歌)、搜索功能、歌单管理(导入音乐)、推荐音乐界面,我的音乐等核心功能
  • 目标制定:对仿QQ音乐播放器实现回归测试,验证核心功能稳定性、界面交互响应等

二、测试用例设计

三、代码编写

1.脚本结构

代码模块 / 目录路径说明
测试用例目录tests/所有测试脚本存放的目录,根据页面创建测试文件
公共模块测试用例tests/test_common.py公共模块的测试用例
我喜欢的测试用例tests/test_like.py我喜欢模块的测试用例
本地下载测试用例tests/test_local.py本地下载模块的测试用例
推荐测试用例tests/test_recommend.py推荐模块的测试用例
数据存储目录data/存放通用数据目录
页面元素配置data/elements.yml页面元素配置文件
辅助工具和库目录utils/辅助工具和库的目录
日志工具utils/log_util.py封装日志相关操作
YAML 操作工具utils/yaml_util.py封装 YAML 操作
测试结果输出目录report/测试结果输出目录
动态测试报告输出目录report/allure-results/动态测试报告输出目录
静态测试报告输出目录report/html/静态测试报告输出目录
测试日志目录logs/测试日志目录
夹具配置文件conftest.py存放夹具(fixture)配置文件
pytest 配置文件pytest.inipytest 配置文件

2.核心脚本功能解析

1)夹具:封装程序启动与关闭conftest.py

这部分构建了自动化测试的基础设施,核心工作是封装被测应用——启动与关闭生命周期管理。它定义了一个QQmusicApp类,将应用的启动、窗口定位和关闭操作进行抽象和封装。同时加入了异常处理机制以确保启动失败时能记录错误日志。通过一个pytest的会话级夹具QQMusic_app,将整个应用的启动和关闭与测试框架的生命周期绑定,使得在所有测试用例开始前自动启动一次应用,并在全部测试结束后自动关闭应用,从而为后续的所有测试用例提供了一个稳定、干净的初始测试环境。

2)封装⼯具类/⽅法utils

主要是为音乐播放器自动化测试封装了两个实用工具类和方法。通过自定义日志相关的类和方法,创建了一个 Logger 类,它能根据日志级别(INFO 和 ERROR)将日志分别输出到总日志文件、INFO 专用日志文件和 ERROR 专用日志文件中,同时设置了统一的日志格式,包含时间、级别、名称、文件信息及具体消息等内容,会自动创建 logs 目录用于存储日志,确保测试过程中的各类信息能被规范记录。另外,实现了一个 read_yaml 函数,用于读取指定路径下 elements.yml 文件中的数据,通过传入键值 key 来获取对应的值,方便在测试过程中读取配置或元素信息,为后续的测试脚本提供基础支持。

3)编写用例

测试公共模块test_common.py

这部分是针对仿 QQ 音乐播放器公共模块的自动化测试,通过 pytest 框架编写了 TestCommon 测试类,包含多个测试方法。首先,测试 logo 是否可见,通过读取 yaml 文件中的元素信息定位 logo 元素并验证其可见性。接着测试搜索功能,定位搜索框后点击并输入关键词,确保输入操作正常。对于换肤功能,点击换肤入口唤起弹窗,验证弹窗的显示、文本内容是否正确,以及关闭弹窗后是否不再可见。测试最小化功能时,点击最小化按钮后验证窗口是否已最小化,再将窗口还原。导入音乐测试中,点击导入按钮唤起窗口,选中所有音乐并确认添加,检查窗口是否关闭。播放控制模块的测试包括随机播放、单曲循环和列表循环三种模式:随机播放测试通过多次将歌曲进度拉到尾部,观察下一首是否为非预期歌曲来验证;单曲循环测试切换模式后,多次检查歌曲播放完毕是否重复播放同一首;列表循环测试切换模式后,播放列表最后一首歌曲并拉到进度尾部,验证下一首是否为列表第一首,以此确保各播放模式功能正常。

测试本地下载test_local.py

这部分是针对仿 QQ 音乐播放器本地下载模块的自动化测试,同样基于 pytest 框架编写了 TestLocal 测试类。首先,测试本地下载页面的文本显示,通过点击导航栏的本地下载进入页面后,分别定位 “本地音乐”“歌曲名称”“歌手名称”“专辑名称” 等文本元素,验证其显示内容是否正确。接着测试播放全部功能,点击播放全部按钮后,通过对比点击前后播放进度条的长度变化,确认歌曲是否正常播放。然后测试选择单首歌曲并双击播放的功能,先将歌曲列表滚动到顶部,双击列表中第一首歌曲,再通过对比播放进度条前后的长度差异,验证单首歌曲能否正常播放。最后,为后续 “我喜欢” 模块的测试准备数据,对歌曲列表中的每一首歌曲进行标记喜欢操作,对于列表中靠后的歌曲,会先向下滚动使其显示,再点击对应位置完成标记。

测试我喜欢” 模块test_like.py

这部分是针对仿 QQ 音乐播放器 “我喜欢” 模块的自动化测试,基于 pytest 框架编写了 TestLike 测试类。首先,测试 “我喜欢” 页面的文本显示,通过点击导航栏的 “我喜欢” 进入页面后,分别定位 “我喜欢”“歌曲名称”“歌手名称”“专辑名称” 等文本元素,验证其显示内容是否准确。接着测试播放全部功能,点击播放全部按钮后,通过对比点击前后播放进度条的长度变化,确认 “我喜欢” 列表中的歌曲能否正常播放。然后测试选择单首歌曲并双击播放的功能,获取 “我喜欢” 列表中的第一首歌曲并双击,再通过对比播放进度条前后的长度差异,验证单首歌曲的播放功能是否正常。最后,测试取消标记喜欢的功能,先记录 “我喜欢” 列表中的歌曲数量,点击第一首歌曲的喜欢标记取消喜欢,再对比操作前后的歌曲数量,确认取消标记功能是否生效,即操作后列表数量应比操作前少 1。

测试推荐模块

这部分是针对仿 QQ 音乐播放器推荐模块的自动化测试,基于 pytest 框架编写了 TestRecommend 测试类。首先,测试推荐页面的文本显示,通过点击左侧导航的推荐入口进入页面后,分别定位 “推荐”“今日为你推荐”“你的音乐补给” 等文本元素,验证其显示内容是否正确。接着测试 “今日为你推荐” 区域的滚动功能,先获取滚动前第一项的文本,点击左滚动按钮后再次获取第一项文本,通过对比确认内容是否变化,以此验证左滚动功能;同样的方式,点击右滚动按钮后对比前后第一项文本,验证右滚动功能。然后测试 “你的音乐补给” 区域的滚动功能,先通过鼠标滚动使该区域完整显示,获取滚动前第一排第一项和第二排第一项的文本,点击左滚动按钮后再次获取这两个位置的文本,对比确认内容变化以验证左滚动;同理,点击右滚动按钮后对比前后文本,验证右滚动功能,确保推荐模块的滚动交互正常。

测试歌词模块

这部分是针对仿 QQ 音乐播放器歌词模块的自动化测试,基于 pytest 框架编写了 TestSongWords 测试类。首先,测试歌词页面的标题文本,通过点击歌词入口进入页面后,分别定位并获取歌手名和歌曲名的标题文本,验证其是否与预期的 “刀郎” 和 “2002 年的第一场雪” 一致。接着测试歌词内容,先收起歌词页面,点击 “我喜欢” 模块的播放全部按钮播放歌曲后立即暂停,以获取当前播放的歌手名和歌曲名;再重新进入歌词页面,遍历歌词列表中的内容,检查是否存在包含当前播放歌曲名或歌手名的歌词,若存在则验证通过,若始终未匹配到则抛出异常,以此确保歌词显示与当前播放歌曲相符。

四、代码参考

QQmusic-test测试代码

五、生成测试报告与结果分析

从 Allure 测试报告可知,此次共执行了 13 个测试用例,测试执行时间为 15:38:10 - 15:38:42,耗时 32 秒 08 毫秒。所有测试用例均通过,测试通过率达到 100%,表明被测系统(仿 QQ 音乐播放器相关模块)在此次测试范围内功能正常,未出现测试失败的情况。


文章转载自:

http://uMVUxDr7.nspbj.cn
http://ccDyHLE5.nspbj.cn
http://qWIvbQ2j.nspbj.cn
http://mgzdIdHi.nspbj.cn
http://LDKuaI9M.nspbj.cn
http://RwzJiaRN.nspbj.cn
http://jW9m8D7e.nspbj.cn
http://KkaFZI0u.nspbj.cn
http://vgqE3nyO.nspbj.cn
http://cZzRumla.nspbj.cn
http://Sf3YKDUh.nspbj.cn
http://pGYEICoI.nspbj.cn
http://VFnBt3NY.nspbj.cn
http://ArVct4YQ.nspbj.cn
http://hitaRNZv.nspbj.cn
http://V6oGbM8a.nspbj.cn
http://ieAxxeTx.nspbj.cn
http://9FiiBniU.nspbj.cn
http://HkRCF8k0.nspbj.cn
http://na8VuTX4.nspbj.cn
http://O9lUQqnB.nspbj.cn
http://ylRldAzx.nspbj.cn
http://G9nonK17.nspbj.cn
http://91pIHIWN.nspbj.cn
http://lrD0ECrn.nspbj.cn
http://R1Z3Z7G7.nspbj.cn
http://rbaqJPK6.nspbj.cn
http://YJlsyX8n.nspbj.cn
http://7QysWtyC.nspbj.cn
http://VHa2WotU.nspbj.cn
http://www.dtcms.com/a/376696.html

相关文章:

  • daily notes[18]
  • 网络编程学习
  • App 上架全流程指南,iOS App 上架步骤、App Store 应用发布流程、uni-app 打包上传与审核要点详解
  • Java Flow API — Publisher、Subscriber 与 Processor 实战
  • 基于POI-TL实现动态Word模板数据填充(含图表):从需求到落地的完整开发实践
  • 【大模型-写作】STORM提升文章深度
  • (纯新手教学)计算机视觉(opencv)实战十四——模板与多个对象匹配
  • 论文阅读:arxiv 2024 Large Language Model Enhanced Recommender Systems: A Survey
  • 微店平台商品详情接口技术实现:从接口解析到数据结构化全方案
  • (12)使用 Vicon 室内定位系统(一)
  • 疯狂星期四文案网第65天运营日记
  • 【从零开始】12. 一切回归原点
  • JavaSE之深入浅出 IO 流:字节流、字符流与序列化流详解(含完整代码示例)
  • 【大模型推理】Qwen2.5模型硬件要求与4090Ti多并发推理方案
  • Node 中进程与子进程的区别及使用场景
  • 【C++进阶系列】:万字详解红黑树(附模拟实现的源码)
  • 以供应链思维为钥,启数字化转型之门——读《供应链思维》有感
  • 体验访答浏览器
  • Zynq开发实践(FPGA之spi实现)
  • 2025年度总结
  • Redis 哨兵模式详解:实现高可用的自动故障转移方案
  • 电动汽车充电系统(EVCS)的入侵检测
  • 自定义事件发布器
  • 零基础学AI大模型之从0到1调用大模型API
  • vue3:调用接口的时候怎么只传递一个数组进去,得到一个key-value数据
  • Transformer 训不动:注意力 Mask 用反 / 广播错位
  • Prometheus部署监控实战
  • vue3引入海康监控视频组件并实现非分屏需求一个页面同时预览多个监控视频(2)
  • AGV 智能车驱动仓储效率提升:应用场景,智慧物流自动化实践指南
  • 【全栈实战】Elasticsearch 8.15.2 高可用集群部署与AI搜索全特性指南