仿QQ音乐桌面客户端——测试报告

仿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无法暴露子元素文本和状态。针对这一问题,采用以下处理方案:

  1. 列表项操作:通过坐标双击实现。先获取列表控件的rectangle区域,计算第一首歌的中心坐标(列表left + width/2,列表top + 30),使用pywinauto的mouse.double_click()模拟双击。
  2. 红心收藏按钮:通过坐标点击实现。红心位置在歌曲行左侧(列表left + 20,列表top + 30 + 行号*35),使用mouse.click()模拟点击。
  3. 歌曲信息校验:由于无法直接获取列表项文本,通过底部播放器的歌名/歌手文本间接验证。双击播放后,读取播放器显示的歌曲名,判断播放是否成功。
  4. 列表非空判断:自绘列表无法获取子元素数量,通过列表区域的可见性(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)时,窗口边框扩大,但页面内部的歌曲列表、封面图、歌词区域等核心内容元素没有随窗口等比例放大,元素仍保持原尺寸,导致大窗口下页面两侧出现大量空白区域,内容集中在窗口中间,视觉效果不协调。

复现步骤

  1. 启动QQ音乐,窗口保持默认大小
  2. 拖拽窗口右下角将窗口放大到接近全屏
  3. 观察页面内容区域

预期结果:页面内容元素随窗口大小等比例放大或自适应填充,充分利用窗口空间。

实际结果:页面元素尺寸不变,大窗口下两侧留白过多,内容未自适应填充。

影响范围:大屏用户体验不佳,窗口空间未充分利用。

严重程度:中

6.3 小窗口下控件重叠

问题描述:将窗口缩小到800x600及以下尺寸时,底部播放控制栏的播放/暂停、上一曲、下一曲、音量、播放模式等按钮出现重叠,部分按钮被遮挡,无法正常点击。

复现步骤

  1. 启动QQ音乐
  2. 拖拽窗口边缘将窗口缩小到800x600
  3. 观察底部播放控制栏

预期结果:窗口缩小时控件自适应排列,不重叠、不越界,核心按钮可正常点击。

实际结果:底部播放栏按钮重叠,部分按钮被遮挡无法点击。

影响范围:小窗口或低分辨率屏幕用户无法正常操作播放控制栏。

严重程度:中

6.4 取消收藏后列表不立即刷新

问题描述:在"我喜欢"页面点击红心取消收藏某首歌曲后,该歌曲仍保留在当前列表展示中,不会立即从列表中移除。需要切换到其他导航页面再重新进入"我喜欢"页面,列表才会刷新,取消收藏的歌曲才会消失。

复现步骤

  1. 进入"我喜欢"页面,确保列表中有收藏的歌曲
  2. 点击第一首歌左侧的红心,取消收藏
  3. 观察当前列表

预期结果:取消收藏后,该歌曲立即从当前列表中移除,列表实时刷新。

实际结果:取消收藏后歌曲仍在列表中,需切换页面再返回才会刷新。

影响范围:用户取消收藏后无法即时看到效果,可能误以为取消收藏失败而重复操作。

严重程度:低

6.5 自绘控件可访问性限制

问题描述:QQ音乐本地下载列表和我喜欢列表基于Qt框架自绘渲染,UIA(UI Automation)无法暴露列表项的文本内容和子元素结构,导致自动化测试无法直接获取歌曲名、歌手名等信息,也无法直接定位红心收藏按钮的状态。

影响范围:自动化测试对列表项的操作只能通过坐标点击实现,稳定性和可维护性低于标准控件;收藏按钮的状态(已收藏/未收藏)无法通过UIA断言,需人工确认;同时也影响屏幕阅读器等无障碍工具的使用。

严重程度:低(产品层面为可访问性问题,测试层面为技术限制)

处理方式:采用坐标点击+播放器文本间接验证的方案,覆盖核心功能;视觉类验证(高亮样式、图标渲染)采用截图保存+人工确认的方式。建议开发团队在自绘控件中实现UIA Provider,提升无障碍访问能力。


七、测试总结以及建议

7.1 测试总结

本次QQ音乐桌面客户端测试覆盖功能测试、UI布局测试、性能测试三大维度,共设计并执行了46个自动化测试用例和若干手工测试用例,测试结果如下:

  • 功能测试:客户端启动、导航切换、本地下载管理、我喜欢收藏、底部播放控制、窗口操作等核心功能均正常运行,功能完整性和正确性达标。
  • UI布局测试:客户端在不同窗口大小下控件自适应排列,无重叠、无越界;选中高亮、收藏图标、音质标签等视觉元素正常渲染。
  • 性能测试:高频切歌场景下CPU和内存占用在合理范围内,无崩溃;页面加载耗时达标;长时间持续播放无明显内存泄漏。
  • 自动化测试:46个自动化测试用例全部通过,通过率100%,自动化回归测试体系搭建完成。

7.2 优化建议

  1. 修复搜索功能:搜索功能是音乐客户端的核心入口,当前搜索功能异常严重影响用户体验,建议开发团队优先排查修复。
  2. 提升控件可访问性:建议开发团队在自绘控件中实现UIA Provider,暴露列表项文本和子元素结构,提升无障碍访问能力和自动化测试可维护性。
  3. 增加异常场景测试:建议补充网络断开、音频文件损坏、文件移动/删除后播放等异常场景的测试,提升客户端容错能力。
  4. 多系统兼容性测试:建议在更多Windows版本(Win7/Win8/Win10/Win11)和不同分辨率下进行兼容性测试,确保全平台体验一致。

7.3 后续测试重点

  1. 搜索功能修复后回归测试:搜索功能修复后,需补充搜索结果展示、搜索结果分类切换、无结果提示等搜索相关的自动化测试用例。
  2. 歌单管理功能测试:当前测试未覆盖歌单创建、歌单编辑、歌单分享等歌单管理功能,后续需补充。
  3. 会员功能测试:会员专属音质、会员专属曲库、会员弹窗等会员相关功能需补充测试。
  4. 长时间稳定性测试:建议执行24小时以上的长时间稳定性测试,验证客户端在超长运行时间下的内存泄漏和崩溃情况。
  5. 自动化测试持续集成:将自动化测试接入CI/CD流水线,实现每次代码提交后自动回归测试,提升测试效率。

附录

附录A:自动化测试环境搭建

  1. 安装Python 3.9及以上版本
  2. 克隆项目到本地
  3. 创建虚拟环境:python -m venv .venv
  4. 激活虚拟环境:.venv\Scripts\activate
  5. 安装依赖:pip install -r requirements.txt
  6. 修改config/config.yaml中的QQ音乐路径和测试音乐目录
  7. 运行测试: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分钟播放后内存比值
相关推荐
Kismet_nvi1 小时前
Python 基础核心知识点总结
开发语言·windows·python
2401_844582951 小时前
冷门技巧:AI模型可靠性测试的实用技巧:数
python
you鬰1 小时前
datawhale--llm-algo-leetcode5️⃣
python·datawhale
λqaq71 小时前
MySQL 数据库基础(2)约束、用户权限、远程连接、外键与 TCP/UDP 理解
linux·数据库·python·tcp/ip·mysql
人工干智能1 小时前
科普:pandas 时间偏移别名:ts.resample(“5Min“).sum()
python·pandas
开源量化GO2 小时前
最新AI辅助量化表达:先理清规则,再按需求选工具
人工智能·python
Zane19942 小时前
为什么 del 一个对象有时立刻消失,有时却纹丝不动?一文讲透引用计数与垃圾回收
后端·python
yichudu2 小时前
Python 装饰器 decorator
开发语言·python
一晌小贪欢2 小时前
Python办公14:批量解压文件夹内的所有 ZIP/RAR 并自动分类
开发语言·python·excel·数据可视化·python办公