仿QQ音乐桌面客户端------测试报告
一、项目介绍
1.1 项目背景
QQ音乐是腾讯公司推出的一款网络音乐服务产品,提供海量音乐在线试听、新歌热歌首发、歌词翻译、手机铃声下载、高品质无损音乐试听、正版音乐下载、免费空间背景音乐设置、MV观看等功能。桌面客户端作为QQ音乐的重要终端,承载了用户日常听歌、管理本地音乐、收藏歌单等核心场景。
随着QQ音乐桌面客户端功能的不断迭代,客户端的稳定性、功能完整性和用户体验直接影响着亿万用户的使用感受。为确保客户端在发布前各项功能正常运行、界面布局合理、性能表现达标,我们开展了本次全面的测试工作。本次测试以QQ音乐Windows桌面客户端为测试对象,覆盖功能测试、UI布局测试、性能测试三大维度,通过手工测试与自动化测试相结合的方式,系统性地保障客户端质量。
1.2 测试目的
本次测试围绕以下核心目标展开:
1.2.1 功能正确性与完整性
验证QQ音乐桌面客户端的核心功能模块是否正常运行,包括客户端启动、左侧导航切换、本地下载管理、我喜欢收藏、底部播放控制、窗口操作等。确保各功能模块的业务逻辑正确,模块间衔接无断点,符合用户实际使用习惯。
1.2.2 用户体验与界面一致性
验证客户端界面布局是否合理,控件在不同窗口大小下是否自适应排列,有无重叠、越界、文字截断等问题。验证选中高亮、收藏图标、音质标签等视觉元素是否正常渲染,确保用户体验流畅一致。
1.2.3 性能与稳定性
验证客户端在高频操作场景下的性能表现,包括高频切歌时的CPU和内存占用、大量本地歌曲加载耗时、长时间持续播放时的内存泄漏情况。确保客户端在长时间运行和高频操作下保持稳定,无崩溃、无明显性能衰减。
1.2.4 自动化测试体系建设
搭建基于Python + pywinauto的桌面端UI自动化测试框架,采用POM(Page Object Model)三层架构,实现核心功能的自动化回归测试,提高测试效率,降低人工回归成本。
1.3 测试环境
| 项目 | 配置 |
|---|---|
| 操作系统 | Windows 10 / Windows 11 |
| 测试对象 | QQ音乐 Windows桌面客户端 |
| 自动化语言 | Python 3.9 |
| GUI自动化框架 | pywinauto 0.6.8(UIA backend) |
| 测试框架 | pytest 8.3.2 |
| 性能监控 | psutil 5.9.0 |
| 测试报告 | Allure 2.13.5 + pytest-html 4.2.0 |
| 控件探查工具 | UIspy / inspect.exe |
二、设计测试用例
测试用例设计锚定需求分析,结合等价类划分与边界值分析,再通过场景测试模拟用户实际操作。本次测试用例分为三大类:功能测试、UI布局测试、性能测试。
2.1 功能测试用例
功能测试覆盖客户端的核心功能模块,共设计9个模块、37个测试用例:
| 测试模块 | 用例数 | 测试内容 |
|---|---|---|
| 冒烟测试 | 3 | 应用启动、截图功能、窗口标题校验 |
| 导航测试 | 5 | 主页加载、左侧导航切换、返回推荐、导航不中断播放、我的音乐导航 |
| 播放器测试 | 8 | 播放暂停、上下曲切换、播放状态、进度条拖拽、音量按钮、音量调节、播放模式切换、播放信息展示 |
| 搜索框测试 | 4 | 搜索框存在性、输入功能、焦点获取、导航后持久化 |
| 本地下载页 | 7 | 页面加载、列表表头、列表有歌曲、添加本地歌曲、歌曲信息、双击播放、播放全部 |
| 我喜欢页 | 8 | 页面加载、列表展示、收藏歌曲、双击播放、播放全部、取消收藏、收藏多首、收藏信息校验 |
| 窗口操作 | 2 | 最大化还原、最小化还原 |
2.2 UI布局测试用例
UI布局测试验证客户端界面在不同窗口大小下的自适应表现,共设计4个测试用例:
| 用例名称 | 测试内容 |
|---|---|
| 窗口缩放控件无重叠 | 缩放窗口到1024x768、1280x720、1600x900,验证底部播放栏控件无重叠、无越界 |
| 选中歌曲高亮样式 | 点击列表歌曲,验证选中状态,截图保存供人工确认高亮样式 |
| 收藏图标与音质标签渲染 | 验证本地下载列表中收藏图标(红心)、音质标签(SQ/HQ)正常渲染 |
| 播放控件自适应布局 | 拉伸窗口宽度到1000/1200/1400/1800,验证播放控件保持水平排列、间距合理 |
2.3 性能测试用例
性能测试验证客户端在高频操作和长时间运行下的性能表现,共设计3个测试用例:
| 用例名称 | 测试内容 | 性能指标 |
|---|---|---|
| 高频切歌CPU/内存监控 | 连续切歌20次,每5次采样一次CPU和内存 | 平均CPU≤80%,峰值CPU≤90%,内存增长≤100MB |
| 页面加载耗时统计 | 从推荐页导航到本地下载页,测量列表元素出现耗时,重复5次取平均 | 平均加载耗时≤5000ms |
| 长时间播放内存泄漏 | 持续播放2分钟,每10秒采样一次内存,前后半段内存增长率对比 | 内存增长率≤10%,最终内存≤初始内存150% |
三、手动测试
自动化测试已覆盖客户端启动、导航切换、播放控制、本地下载、我喜欢、窗口操作、UI布局、性能等46个可量化的功能点。手动测试聚焦于自动化无法覆盖的视觉细节、交互体验、异常边界场景,与自动化测试形成互补,不重复覆盖。
3.1 客户端启动与窗口视觉
| 编号 | 测试项目 | 测试步骤 | 预期结果 | 实际结果 | 结论 |
|---|---|---|---|---|---|
| MT-01 | 启动加载过程 | 双击QQ音乐快捷方式,观察从启动到主窗口完全加载的过程 | 启动后无闪退、无白屏,主窗口在合理时间内加载完成,左侧导航、中间内容区、底部播放栏三栏布局完整 | 启动正常,三栏布局完整展示 | 通过 |
| MT-02 | 主窗口视觉布局 | 观察主窗口整体布局比例 | 左侧导航栏宽度适中,中间内容区占据主要空间,底部播放栏高度合理,三栏比例协调,无内容溢出或大面积空白 | 三栏比例协调,布局正常 | 通过 |
| MT-03 | 窗口拖拽移动 | 按住窗口标题栏拖拽移动窗口 | 窗口跟随鼠标平滑移动,移动过程中无卡顿、无残影 | 窗口拖拽平滑,无卡顿 | 通过 |
| MT-04 | 窗口边缘拖拽调整大小 | 拖拽窗口右边缘调整宽度,拖拽下边缘调整高度 | 拖拽过程中显示窗口大小预览,松开后窗口尺寸更新,内容区自适应调整 | 窗口大小调整正常,内容区自适应 | 通过 |

【MT-01------MT-04客户端启动与窗口视觉】
3.2 左侧导航栏交互体验
| 编号 | 测试项目 | 测试步骤 | 预期结果 | 实际结果 | 结论 |
|---|---|---|---|---|---|
| MT-05 | 导航项悬停效果 | 鼠标悬停在左侧导航项(推荐/排行榜/歌手等)上,不点击 | 悬停项背景色或文字颜色发生变化,给出视觉反馈 | 悬停时有颜色变化反馈 | 通过 |
| MT-06 | 导航项选中状态 | 点击某个导航项,观察选中样式 | 选中项高亮显示,背景色/文字颜色与未选中项有明显区别,可能伴有左侧指示条 | 选中项高亮明显,有指示条 | 通过 |
| MT-07 | 导航切换过渡 | 连续点击不同导航项,观察页面切换过程 | 页面切换流畅,无明显卡顿或白屏闪烁,切换后新页面内容加载完整 | 切换流畅,内容加载正常 | 通过 |
| MT-08 | 导航图标与文字对齐 | 观察左侧导航项的图标与文字排版 | 图标与文字水平居中对齐,间距均匀,无错位 | 图标文字对齐正常 | 通过 |
【MT-05~MT-08 截图位置:左侧导航栏交互体验】
3.3 本地下载页面视觉与交互
| 编号 | 测试项目 | 测试步骤 | 预期结果 | 实际结果 | 结论 |
|---|---|---|---|---|---|
| MT-09 | 列表表头样式 | 进表头展示歌名、歌手、专辑、音质等列名,列宽分配合理,文字对齐统一 | 表头列名完整,列宽合理 | 通过 | |
| MT-10 | 歌曲行悬停效果 | 鼠标悬停在某首歌曲行上,不点击 | 悬停行背景色发生变化,与其他行区分开 | 悬停行背景色变化 | 通过 |
| MT-11 | 歌曲行选中效果 | 单击某首歌曲行,观察选中样式 | 选中行高亮显示,背景色明显区别于未选中行 | 选中行高亮明显 | 通过 |
| MT-12 | 红心收藏图标状态 | 观察未收藏歌曲和已收藏歌曲的红心图标 | 未收藏时红心为空心/灰色,已收藏时红心为实心/红色,两种状态视觉区分明显 | 未收藏灰色,已收藏红色,区分明显 | 通过 |
| MT-13 | 红心悬停效果 | 鼠标悬停在红心图标上 | 红心图标有视觉反馈(颜色加深或放大),提示可点击 | 悬停时有视觉反馈 | 通过 |
| MT-14 | 音质标签样式 | 观察歌曲行中的音质标签(SQ/HQ/无损等) | 音质标签以小标签形式展示在歌名旁,不同音质可能有不同颜色区分,标签不遮挡歌名 | 音质标签展示正常,不遮挡歌名 | 通过 |
| MT-15 | 播放全部按钮样式 | 观察播放全部按钮的默认状态和悬停状态 | 按钮文字/图标清晰,悬停时有颜色或背景变化反馈 | 按钮清晰,悬停有反馈 | 通过 |
| MT-16 | 添加本地歌曲交互 | 点击底部"+"按钮,在文件选择对话框中选择音乐文件,确认后观察反馈 | 弹出系统文件选择对话框,选择文件确认后,歌曲出现在本地下载列表中,可能伴有添加成功提示 | 文件选择对话框正常弹出,添加后歌曲出现在列表 | 通过 |
| MT-17 | 空列表占位提示 | 清空本地下载列表(或首次进入无歌曲时),观察页面展示 | 展示空列表占位图和提示文字,可能伴有"添加本地音乐"引导按钮,引导用户添加歌曲 | 展示占位图和提示文字,有引导按钮 | 通过 |
【MT-09~MT-17 截图位置:
】
3.4 我喜欢页面视觉与交互
| 编号 | 测试项目 | 测试步骤 | 预期结果 | 实际结果 | 结论 |
|---|---|---|---|---|---|
| MT-18 | 页面标题样式 | 进入我喜欢页,观察页面标题 | 页面标题"我喜欢"清晰展示,字体大小/颜色与页面风格一致 | 标题展示正常 | 通过 |
| MT-19 | 收藏歌曲列表展示 | 收藏多首歌曲后进入我喜欢页,观察列表 | 收藏的歌曲按收藏时间或指定顺序展示,列表项包含歌名、歌手、红心等信息 | 收藏歌曲正常展示,信息完整 | 通过 |
| MT-20 | 取消收藏红心状态 | 在我喜欢页点击某首歌的红心取消收藏,观察红心变化 | 点击后红心从实心红色变为空心灰色,状态即时反馈 | 红心状态切换正常 | 通过 |
| MT-21 | 我喜欢页空列表占位 | 取消所有收藏后,观察我喜欢页 | 展示空列表占位图和提示文字,引导用户收藏歌曲 | 展示占位图和提示文字 | 通过 |
【MT-18~MT-21 截图位置:】
3.5 底部播放控制栏交互细节
| 编号 | 测试项目 | 测试步骤 | 预期结果 | 实际结果 | 结论 |
|---|---|---|---|---|---|
| MT-22 | 播放/暂停图标切换 | 播放状态下观察按钮图标,点击暂停后再观察 | 播放状态显示"暂停"图标(两条竖线),暂停状态显示"播放"图标(三角形),图标随状态即时切换 | 图标随状态正确切换 | 通过 |
| MT-23 | 上一曲/下一曲悬停效果 | 鼠标悬停在上一曲/下一曲按钮上 | 按钮有颜色或背景变化,给出可点击的视觉反馈 | 悬停有视觉反馈 | 通过 |
| MT-24 | 播放模式图标切换 | 连续点击播放模式按钮,观察图标变化 | 依次切换顺序播放→单曲循环→随机播放三种模式,每种模式对应不同图标,图标切换清晰可辨 | 三种模式图标切换正常 | 通过 |
| MT-25 | 进度条悬停时间提示 | 鼠标悬停在播放进度条上,不点击 | 悬停位置显示时间提示气泡,展示该位置对应的播放时间 | 悬停显示时间气泡 | 通过 |
| MT-26 | 进度条拖拽手感 | 按住进度条滑块拖拽到不同位置,松开 | 拖拽时滑块跟随鼠标移动,可能伴有时间预览;松开后播放位置跳转到对应时间,播放继续 | 拖拽流畅,跳转准确 | 通过 |
| MT-27 | 音量面板展开/收起 | 点击音量按钮,观察音量面板;再次点击或点击其他区域 | 点击后音量面板平滑展开,展示音量滑块和静音按钮;再次点击或点击外部后面板收起 | 面板展开/收起正常 | 通过 |
| MT-28 | 音量滑块拖拽 | 拖拽音量滑块调整音量大小 | 滑块跟随鼠标移动,音量随滑块位置实时变化,可能伴有音量百分比提示 | 音量调节正常 | 通过 |
| MT-29 | 静音按钮图标切换 | 点击静音按钮,观察图标变化 | 静音状态显示静音图标(喇叭带叉),取消静音后恢复正常喇叭图标 | 静音图标切换正常 | 通过 |
| MT-30 | 歌曲封面图展示 | 播放歌曲时观察底部播放栏左侧的封面图 | 展示当前播放歌曲的专辑封面图,图片清晰,无拉伸变形 | 封面图展示正常 | 通过 |
| MT-31 | 歌曲名过长省略处理 | 播放歌名较长的歌曲,观察底部播放栏歌名展示 | 歌名超出显示区域时以省略号(...)结尾,不溢出到其他控件区域,鼠标悬停可能显示完整歌名 | 长歌名以省略号结尾,不溢出 | 通过 |
| MT-32 | 播放时间格式 | 观察底部播放栏的时间显示 | 以"当前时间/总时长"格式展示,如"01:23/04:56",时间格式统一,进度条位置与时间同步 | 时间格式正确,与进度同步 | 通过 |
【MT-22~MT-32 截图位置:】
3.6 异常与边界场景
| 编号 | 测试项目 | 测试步骤 | 预期结果 | 实际结果 | 结论 |
|---|---|---|---|---|---|
| MT-33 | 快速连续点击播放/暂停 | 在1秒内快速连续点击播放/暂停按钮5次以上 | 客户端不崩溃,最终状态与最后一次点击一致,播放状态正确响应 | 快速点击无崩溃,状态响应正确 | 通过 |
| MT-34 | 快速连续点击下一曲 | 在1秒内快速连续点击下一曲按钮10次以上 | 客户端不崩溃,歌曲快速切换,最终播放最后一次切换后的歌曲,无卡顿或闪退 | 快速切换无崩溃,最终歌曲正确 | 通过 |
| MT-35 | 播放中关闭客户端 | 歌曲播放状态下直接点击窗口关闭按钮 | 客户端正常关闭,进程退出,无残留进程,无报错弹窗 | 关闭正常,无残留进程 | 通过 |
| MT-36 | 无歌曲时点击播放全部 | 本地下载列表为空时,点击播放全部按钮 | 无歌曲时播放全部按钮可能禁用,或点击后无异常报错,不崩溃 | 无歌曲时操作无异常 | 通过 |
| MT-37 | 无歌曲时双击列表区域 | 本地下载列表为空时,双击列表空白区域 | 无异常报错,不崩溃,可能无任何响应或提示"暂无歌曲" | 双击无异常 | 通过 |
| MT-38 | 搜索框输入特殊字符 | 在搜索框中输入特殊字符(!@#$%^&*())和超长文本(100字以上) | 输入正常,无崩溃,特殊字符正常显示,超长文本可能以省略号显示或横向滚动 | 特殊字符和长文本输入正常 | 通过 |
【MT-33~MT-38 截图位置:】
3.7 主观体验评估
| 编号 | 评估项目 | 评估内容 | 评估结果 |
|---|---|---|---|
| MT-39 | 启动速度 | 从双击快捷方式到主窗口可操作的主观感受 | 启动速度较快,约3-5秒可操作 |
| MT-40 | 页面切换流畅度 | 导航切换、页面加载的流畅度主观感受 | 切换流畅,无明显卡顿 |
| MT-41 | 播放操作响应 | 点击播放/暂停/切歌后响应速度主观感受 | 操作响应即时,无明显延迟 |
| MT-42 | 整体UI美观度 | 客户端整体视觉设计、配色、排版的主观评价 | UI设计现代,配色协调,排版清晰 |
【MT-39~MT-42 为主观评估,无需截图】
四、兼容性测试
| 测试项 | 测试内容 | 测试结果 |
|---|---|---|
| 操作系统兼容性 | Windows 10、Windows 11 下客户端启动、功能运行正常 | 通过 |
| 窗口分辨率适配 | 1024x768、1280x720、1600x900、1920x1080 等常见分辨率下界面布局正常 | 通过 |
| 窗口大小自适应 | 拖拽窗口边缘调整大小,控件自适应排列,无重叠越界 | 通过 |
五、自动化测试
5.1 自动化测试框架设计
本次自动化测试采用 Python + pywinauto + pytest 技术栈,基于 POM(Page Object Model)三层架构 设计,框架结构如下:
QQMusic-AutoTest/
├── config/
│ └── config.yaml # 配置文件(程序路径、超时、测试数据)
├── pageobjects/ # 页面对象层(POM)
│ ├── base_page.py # 页面基类
│ ├── main_page.py # 主页/导航页面对象
│ ├── player_page.py # 底部播放控制栏页面对象
│ ├── search_page.py # 搜索框页面对象
│ ├── local_page.py # 本地下载页面对象
│ └── like_page.py # 我喜欢页面对象
├── tests/ # 测试用例层
│ ├── test_common.py # 冒烟测试
│ ├── test_navigation.py # 导航测试
│ ├── test_player.py # 播放器测试
│ ├── test_search.py # 搜索框测试
│ ├── test_local_page.py # 本地下载页测试
│ ├── test_like_page.py # 我喜欢页测试
│ ├── test_window.py # 窗口操作测试
│ ├── test_ui_layout.py # UI布局测试
│ └── test_performance.py # 性能测试
├── Utils/ # 工具层
│ ├── commonUtils.py # 通用操作(点击、输入、等待、截图)
│ ├── configUtils.py # 配置文件读取
│ └── logUtils.py # 日志封装
├── conftest.py # pytest fixtures + 失败自动截图
├── pytest.ini # pytest配置
├── run.py # 测试运行入口
└── requirements.txt # 依赖清单
5.1.1 POM三层架构设计思路
- 页面对象层(pageobjects):将每个页面的元素定位和操作方法封装为独立的页面对象类,测试用例不直接操作控件,而是调用页面对象的方法。当页面元素发生变化时,只需修改对应页面对象,无需修改测试用例,提高了代码的可维护性。
- 测试用例层(tests):只关心业务逻辑和断言,通过调用页面对象的方法完成测试步骤。每个测试用例独立、清晰,关注"测什么"而非"怎么测"。
- 工具层(Utils):封装通用的底层操作,如元素点击、文本输入、显式等待、截图、日志、配置读取等,供页面对象层调用,避免重复代码。
5.1.2 自绘控件处理方案
QQ音乐桌面客户端基于Qt框架开发,部分控件(如歌曲列表、红心收藏按钮)为自绘虚拟化控件,UIA无法暴露子元素文本和状态。针对这一问题,采用以下处理方案:
- 列表项操作:通过坐标双击实现。先获取列表控件的rectangle区域,计算第一首歌的中心坐标(列表left + width/2,列表top + 30),使用pywinauto的mouse.double_click()模拟双击。
- 红心收藏按钮:通过坐标点击实现。红心位置在歌曲行左侧(列表left + 20,列表top + 30 + 行号*35),使用mouse.click()模拟点击。
- 歌曲信息校验:由于无法直接获取列表项文本,通过底部播放器的歌名/歌手文本间接验证。双击播放后,读取播放器显示的歌曲名,判断播放是否成功。
- 列表非空判断:自绘列表无法获取子元素数量,通过列表区域的可见性(rectangle宽高是否合理)和双击后播放器是否有歌曲信息来间接判断列表是否有内容。
5.1.3 测试稳定性保障
- 自动聚焦窗口:每个测试用例执行前通过autouse fixture自动聚焦QQ音乐窗口,确保鼠标操作在前台窗口执行。
- 显式等待:所有元素操作前调用wait("exists visible")等待元素出现并可见,避免因页面加载延迟导致的操作失败。
- 点击回退机制:优先使用UIA的click()(发送InvokePattern),对于Text等不支持click()的控件,回退到click_input()模拟鼠标点击。
- 鼠标操作重试:针对Windows SetCursorPos偶发错误,对click_input()和坐标双击操作增加5次重试,每次间隔1秒,提高测试稳定性。
- 失败自动截图:通过pytest_runtest_makereport钩子,在用例失败时自动截图并嵌入HTML报告,便于问题定位。
5.2 自动化测试用例清单
本次自动化测试共实现 46个测试用例,全部通过:
| 测试文件 | 测试类 | 用例数 | 用例列表 |
|---|---|---|---|
| test_common.py | TestCommon | 3 | test_app_launch、test_screenshot、test_window_title |
| test_navigation.py | TestNavigation | 5 | test_main_page_loaded、test_left_navigation、test_back_to_recommend、test_nav_my_music_items、test_nav_song_not_interrupted |
| test_player.py | TestPlayer | 10 | test_play_pause、test_next_prev_song、test_playing_status、test_volume_button、test_play_mode、test_playback_info_display、test_volume_adjust、test_progress_bar_seek 、test_play_mode_effect、test_play_mode_sequence_vs_random |
| test_search.py | TestSearchBox | 4 | test_search_box_exists、test_search_box_input、test_search_box_focus、test_search_box_persist_after_nav |
| test_local_page.py | TestLocalPage | 7 | test_local_page_title、test_local_list_headers、test_local_list_has_songs、test_add_local_song、test_local_first_song_info、test_local_double_click_play、test_local_play_all |
| test_like_page.py | TestLikePage | 8 | test_like_page_load、test_like_list_display、test_add_to_like、test_like_page_play、test_like_play_all、test_cancel_like、test_like_multiple_songs、test_like_song_info_match |
| test_window.py | TestWindow | 2 | test_window_maximize_restore、test_window_minimize_restore |
| test_ui_layout.py | TestUILayout | 4 | test_window_resize_no_overlap、test_selected_song_highlight、test_icons_and_quality_labels、test_player_controls_responsive |
| test_performance.py | TestPerformance | 3 | test_high_frequency_switch_song、test_page_load_time、test_memory_leak_during_playback |
| 合计 | 46 |
5.3 性能测试实现方案
性能测试使用 psutil 库监控QQ音乐进程的CPU和内存占用,实现方案如下:
5.3.1 高频切歌性能测试
- 测试步骤:导航到本地下载页,双击播放第一首歌,连续点击"下一曲"按钮20次,每5次采样一次CPU和内存。
- 监控指标:平均CPU、峰值CPU、内存增长量、切歌成功率。
- 通过标准:平均CPU≤80%,峰值CPU≤90%,内存增长≤100MB,切歌成功率≥90%,进程不崩溃。
5.3.2 页面加载耗时测试
- 测试步骤:从推荐页导航到本地下载页,测量从点击导航到列表元素出现的耗时,重复5次取平均值。
- 监控指标:平均加载耗时、最大加载耗时、最小加载耗时。
- 通过标准:平均加载耗时≤5000ms。
5.3.3 内存泄漏测试
- 测试步骤:导航到本地下载页播放歌曲,持续播放2分钟,每10秒采样一次内存,计算前半段和后半段的平均内存增长率。
- 监控指标:前半段平均内存、后半段平均内存、内存增长率、最终内存。
- 通过标准:内存增长率≤10%,最终内存≤初始内存的150%,进程不崩溃。
5.4 自动化测试运行结果
collected 46 items
tests/test_common.py::TestCommon::test_app_launch PASSED
tests/test_common.py::TestCommon::test_screenshot PASSED
tests/test_common.py::TestCommon::test_window_title PASSED
tests/test_navigation.py::TestNavigation::test_main_page_loaded PASSED
...(中间省略)
tests/test_performance.py::TestPerformance::test_high_frequency_switch_song PASSED
tests/test_performance.py::TestPerformance::test_page_load_time PASSED
tests/test_performance.py::TestPerformance::test_memory_leak_during_playback PASSED
============================= 46 passed in 865.37s (0:14:25) =============================
测试结果:46个自动化测试用例全部通过,通过率100%,总耗时约14分25秒。
六、发现的BUG
在本次测试过程中,发现以下问题:
6.1 搜索功能异常
问题描述:QQ音乐桌面客户端顶部搜索框输入关键词后按回车,搜索结果页面无法正常加载,搜索功能不可用。
影响范围:搜索功能完全不可用,用户无法通过搜索查找歌曲、歌手、专辑等内容。
严重程度:高
处理方式:由于搜索功能本身存在异常,自动化测试仅覆盖搜索框的UI层面测试(存在性、输入、焦点、持久化),不验证搜索结果。该问题需开发团队进一步排查。
6.2 窗口放大时页面元素未同步放大
问题描述:将QQ音乐窗口从默认大小拖拽放大到全屏(1920x1080)时,窗口边框扩大,但页面内部的歌曲列表、封面图、歌词区域等核心内容元素没有随窗口等比例放大,元素仍保持原尺寸,导致大窗口下页面两侧出现大量空白区域,内容集中在窗口中间,视觉效果不协调。
复现步骤:
- 启动QQ音乐,窗口保持默认大小
- 拖拽窗口右下角将窗口放大到接近全屏
- 观察页面内容区域
预期结果:页面内容元素随窗口大小等比例放大或自适应填充,充分利用窗口空间。
实际结果:页面元素尺寸不变,大窗口下两侧留白过多,内容未自适应填充。
影响范围:大屏用户体验不佳,窗口空间未充分利用。
严重程度:中
6.3 小窗口下控件重叠
问题描述:将窗口缩小到800x600及以下尺寸时,底部播放控制栏的播放/暂停、上一曲、下一曲、音量、播放模式等按钮出现重叠,部分按钮被遮挡,无法正常点击。
复现步骤:
- 启动QQ音乐
- 拖拽窗口边缘将窗口缩小到800x600
- 观察底部播放控制栏
预期结果:窗口缩小时控件自适应排列,不重叠、不越界,核心按钮可正常点击。
实际结果:底部播放栏按钮重叠,部分按钮被遮挡无法点击。
影响范围:小窗口或低分辨率屏幕用户无法正常操作播放控制栏。
严重程度:中
6.4 取消收藏后列表不立即刷新
问题描述:在"我喜欢"页面点击红心取消收藏某首歌曲后,该歌曲仍保留在当前列表展示中,不会立即从列表中移除。需要切换到其他导航页面再重新进入"我喜欢"页面,列表才会刷新,取消收藏的歌曲才会消失。
复现步骤:
- 进入"我喜欢"页面,确保列表中有收藏的歌曲
- 点击第一首歌左侧的红心,取消收藏
- 观察当前列表
预期结果:取消收藏后,该歌曲立即从当前列表中移除,列表实时刷新。
实际结果:取消收藏后歌曲仍在列表中,需切换页面再返回才会刷新。
影响范围:用户取消收藏后无法即时看到效果,可能误以为取消收藏失败而重复操作。
严重程度:低
6.5 自绘控件可访问性限制
问题描述:QQ音乐本地下载列表和我喜欢列表基于Qt框架自绘渲染,UIA(UI Automation)无法暴露列表项的文本内容和子元素结构,导致自动化测试无法直接获取歌曲名、歌手名等信息,也无法直接定位红心收藏按钮的状态。
影响范围:自动化测试对列表项的操作只能通过坐标点击实现,稳定性和可维护性低于标准控件;收藏按钮的状态(已收藏/未收藏)无法通过UIA断言,需人工确认;同时也影响屏幕阅读器等无障碍工具的使用。
严重程度:低(产品层面为可访问性问题,测试层面为技术限制)
处理方式:采用坐标点击+播放器文本间接验证的方案,覆盖核心功能;视觉类验证(高亮样式、图标渲染)采用截图保存+人工确认的方式。建议开发团队在自绘控件中实现UIA Provider,提升无障碍访问能力。
七、测试总结以及建议
7.1 测试总结
本次QQ音乐桌面客户端测试覆盖功能测试、UI布局测试、性能测试三大维度,共设计并执行了46个自动化测试用例和若干手工测试用例,测试结果如下:
- 功能测试:客户端启动、导航切换、本地下载管理、我喜欢收藏、底部播放控制、窗口操作等核心功能均正常运行,功能完整性和正确性达标。
- UI布局测试:客户端在不同窗口大小下控件自适应排列,无重叠、无越界;选中高亮、收藏图标、音质标签等视觉元素正常渲染。
- 性能测试:高频切歌场景下CPU和内存占用在合理范围内,无崩溃;页面加载耗时达标;长时间持续播放无明显内存泄漏。
- 自动化测试:46个自动化测试用例全部通过,通过率100%,自动化回归测试体系搭建完成。
7.2 优化建议
- 修复搜索功能:搜索功能是音乐客户端的核心入口,当前搜索功能异常严重影响用户体验,建议开发团队优先排查修复。
- 提升控件可访问性:建议开发团队在自绘控件中实现UIA Provider,暴露列表项文本和子元素结构,提升无障碍访问能力和自动化测试可维护性。
- 增加异常场景测试:建议补充网络断开、音频文件损坏、文件移动/删除后播放等异常场景的测试,提升客户端容错能力。
- 多系统兼容性测试:建议在更多Windows版本(Win7/Win8/Win10/Win11)和不同分辨率下进行兼容性测试,确保全平台体验一致。
7.3 后续测试重点
- 搜索功能修复后回归测试:搜索功能修复后,需补充搜索结果展示、搜索结果分类切换、无结果提示等搜索相关的自动化测试用例。
- 歌单管理功能测试:当前测试未覆盖歌单创建、歌单编辑、歌单分享等歌单管理功能,后续需补充。
- 会员功能测试:会员专属音质、会员专属曲库、会员弹窗等会员相关功能需补充测试。
- 长时间稳定性测试:建议执行24小时以上的长时间稳定性测试,验证客户端在超长运行时间下的内存泄漏和崩溃情况。
- 自动化测试持续集成:将自动化测试接入CI/CD流水线,实现每次代码提交后自动回归测试,提升测试效率。
附录
附录A:自动化测试环境搭建
- 安装Python 3.9及以上版本
- 克隆项目到本地
- 创建虚拟环境:
python -m venv .venv - 激活虚拟环境:
.venv\Scripts\activate - 安装依赖:
pip install -r requirements.txt - 修改config/config.yaml中的QQ音乐路径和测试音乐目录
- 运行测试:
python run.py
附录B:测试运行命令
bash
# 运行全部测试
python run.py
# 按模块运行
python run.py smoke # 冒烟测试
python run.py navigation # 导航测试
python run.py player # 播放器测试
python run.py local # 本地下载页
python run.py like # 我喜欢页
python run.py ui # UI布局测试
python run.py performance # 性能测试
python run.py core # 核心功能
# 查看报告
# HTML报告:直接用浏览器打开 reports/report.html
# Allure报告:allure serve reports/allure-results
附录C:性能测试阈值配置
| 指标 | 阈值 | 说明 |
|---|---|---|
| 高频切歌平均CPU | ≤80% | 20次连续切歌场景 |
| 高频切歌峰值CPU | ≤90% | 允许短暂峰值 |
| 高频切歌内存增长 | ≤100MB | 切歌前后内存差值 |
| 切歌成功率 | ≥90% | 20次切歌成功比例 |
| 页面加载平均耗时 | ≤5000ms | 导航到本地下载页 |
| 长时间播放内存增长率 | ≤10% | 前后半段平均内存对比 |
| 最终内存/初始内存 | ≤150% | 2分钟播放后内存比值 |























