仿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.ini | pytest 配置文件 |
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 音乐播放器相关模块)在此次测试范围内功能正常,未出现测试失败的情况。