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

QQMUSIC测试报告

一,项目背景

这是基于QT开发的一款仿qq音乐的app,用户可以在这款软件上获取最新的音乐推荐,可以播放本地和自己喜欢的音乐,也可以听自己喜欢的电台,还可以搜索自己喜欢的音乐等。

二,测试内容

2.1编写测试思维导图

根据设计测试⽤例的万能公式:功能测试+界⾯测试+性能测试+兼容性测试+易⽤性测试+安全测试编写博客系统测试用例,由于只是练手项目只完成了主要的功能,所以此款qqmusic只需要测试核心功能就可以了

2.2功能测试

 2.2.1主界面展示

2.3 窗口头功能测试

介绍:

点击最小化按钮,窗口最小化

点击最大化按钮,窗口最大化

点击关闭按钮,程序退出

测试场景一:点击搜索框,输入文字

预期结果:点击搜索,成功输入文字

实际结果:点击搜索,成功输入文字

界面展示:

 

测试场景二: 点击皮肤按钮

预期结果:点击皮肤按钮,成功跳转到皮肤中心

实际结果:点击皮肤按钮,未跳转到皮肤中心

 界面展示:

测试场景三: 点击最小化按钮

预期结果:点击最小化按钮后最小化窗口

实际结果:点击最小化按钮后最小化窗口

 界面展示

测试场景四:点击最大化按钮 

预期结果:点击最大化按钮,窗口最大化

实际结果:点击最大化按钮,窗口无法最大化

 界面展示

测试场景五: 点击窗口关闭按钮

预期结果:点击窗口按钮,窗口关闭
实际结果:点击窗口按钮,窗口关闭

界面展示: 

 2.4导航栏测试

介绍:

点击推荐按钮,窗口右侧显示:推荐Page(暂时只有页面)
点击电台按钮,窗口右侧显示:电台Page(未⽀持)
点击音乐馆按钮,窗口右侧显示:音乐馆Page(未⽀持)
点击我喜欢按钮,窗口右侧显示:收藏的音乐Page
点击本地下载按钮,窗口右侧显示:本地音乐Page
点击最近播放按钮,窗口右侧显示:最近播放Page

界面展示:

测试场景一 :点击推荐按钮

预期结果:跳转到推荐页

实际结果:跳转到推荐页

界面展示:

测试场景二: 点击电台按钮

预期结果:跳转到电台页面
实际结果:跳转到电台页面

界面展示:

  

测试场景三:点击音乐馆

预期结果:跳转到音乐馆页面

实际结果:跳转到音乐馆页面

界面展示: 

测试场景四:点击我喜欢按钮

预期结果:显示我喜欢的音乐列表,页面信息显示完整
实际结果:显示我喜欢的音乐列表,页面信息显示完整

界面展示:

测试场景五:点击本地下载按钮

预期结果:显示本地音乐列表,页面信息完整

实际结果:显示本地音乐列表,页面信息完整

界面展示: 

测试场景六:点击播放按钮

预期结果:显示最近播放按钮,页面信息显示完整 

实际结果:显示最近播放按钮,页面信息显示完整 

 界面展示:

2.5播放控件测试

介绍:

支持seek功能,即拖拽到歌曲指定位置播放
支持:随机、单曲循环、循环播放
支持播放上⼀曲
支持播放下⼀曲
支持播放和暂停
支音量调节和静音
支持歌曲总时长显示、当前播放时间显示
支持LRC歌词同步显示

界面展示: 

测试场景一:点击开始/暂停按钮

预期结果:音乐会开始播放,再点击一次音乐暂停,歌曲信息显示正常

实际结果: 音乐会开始播放,再点击一次音乐暂停,歌曲信息显示正常

界面展示: 

 测试场景二:点击上一曲按钮

预期结果:播放上一曲

实际结果:播放上一曲

界面展示 :

测试场景三:点击下一首按钮

预期结果:播放下一曲

实际结果: 播放下一曲

界面展示:
 

测试场景四:调节音量

预期结果:弹出音量控制

实际结果:弹出音量控制

界面展示: 

测试场景五:点击添加本地音乐按钮

预期结果:弹出文件弹窗
实际结果:弹出文件弹窗

界面展示:

测试场景六:点击歌词按钮

预期结果:显示歌词页面

实际结果:显示歌词页面 

界面展示: 

 三,关键模块自动化测试

介绍:使用UIAutomation处理控件,Airtest处理图像,PyAutoGUI处理简单操作对qqmusic进行自动化测试

1.播放模块

class TestPlayerControls:@pytest.mark.parametrize("operation,expected", [("play", "playing"), ("pause", "paused"),("seek_50%", 0.5)])def test_playback_controls(self, driver, operation, expected):# 定位播放器元素play_btn = driver.find_element(By.ID, "com.tencent.qqmusic:id/play_btn")progress_bar = driver.find_element(By.ID, "com.tencent.qqmusic:id/progress_bar")# 执行测试操作if operation == "play":play_btn.click()assert self._get_play_state() == expectedelif operation == "seek_50%":# 使用TouchAction模拟拖拽进度条size = progress_bar.sizeTouchAction(driver).press(x=size['width']*0.1, y=size['height']/2)\.move_to(x=size['width']*0.6, y=size['height']/2)\.release().perform()current_progress = driver.find_element(By.ID, "current_time").textassert abs(float(current_progress) - expected) < 0.1def test_song_info_display(self, driver):# 验证元数据展示metadata = {"title": driver.find_element(By.ID, "song_title").text,"artist": driver.find_element(By.ID, "artist_name").text,"duration": driver.find_element(By.ID, "total_time").text}assert all(metadata.values()), "歌曲信息显示不全"assert re.match(r"\d{2}:\d{2}", metadata["duration"]), "时长格式错误"

2.导航栏异常场景测试

class TestNavigationExceptions:def test_invalid_local_music(self, driver):# 模拟本地音乐加载失败driver.execute_script("mobile: shell", {"command": "rm /sdcard/Music/test_song.mp3","includeStderr": True})driver.find_element(By.XPATH, "//*[@text='本地音乐']").click()error_msg = driver.find_element(By.ID, "error_message").textassert "未找到本地音乐" in error_msgdef test_network_failure(self, driver):# 模拟断网状态NetworkUtils.set_airplane_mode(driver)try:driver.find_element(By.XPATH, "//*[@text='在线音乐']").click()WebDriverWait(driver, 10).until(EC.visibility_of_element_located((By.ID, "network_error")))finally:NetworkUtils.reset_network(driver)

智能断言:

# assertion_lib.py
class MusicAssertions:@staticmethoddef assert_playback_quality(driver):"""验证音频播放无卡顿"""frame_rates = driver.get_performance_stats("gfx")assert all(float(rate) > 55 for rate in frame_rates), "音频播放存在卡顿"@staticmethoddef assert_ui_consistency(element_list):"""验证界面元素一致性"""sizes = [el.size for el in element_list]assert len(set((s['width'], s['height']) for s in sizes)) == 1, "元素尺寸不一致"

 测试结果:

本次 测试采用手动+自动化测试,对qqmusic进行了功能测试,此款软件的电台,音乐馆,播放等功能还在开发中,只实现了主要功能,测试用例覆盖了90%

 

 

http://www.xdnf.cn/news/4280.html

相关文章:

  • 将真实世界带入Unreal Engine:Cesium for Unreal深度解析与实战指南
  • 人工智能在医疗运营编程中的应用综述
  • 分布式、高并发-Day04
  • Gitee的介绍
  • Spring AI 函数调用(Function Call)系统设计方案
  • C++23 std::generator:用于范围的同步协程生成器 (P2502R2, P2787R0)
  • 盘古信息领德创|半导体存储与云计算存储小巨人企业IMS数字化升级项目正式启动!
  • day5:nginx代理-动静分离
  • 高频面试题:设计秒杀系统,用Redis+Lua解决超卖
  • 邂逅蓝耘元生代:ComfyUI 工作流与服务器虚拟化的诗意交织
  • 20250506| 物化视图学习
  • MySQL中MVCC指什么?
  • Oracle04-基本使用
  • 山东大学软件学院项目实训-基于大模型的模拟面试系统-个人主页头像上传
  • 论广告系统对存算分离架构的应用
  • 提示词工程:通向AGI时代的人机交互艺术
  • 李沐动手深度学习(pycharm中运行笔记)——08.线性回归+从零实现+简洁实现
  • vue3搭建后台管理系统
  • 【优选算法 | 模拟】探索模拟算法: 编程与问题分析的双重 考验
  • 华为策略路由
  • 【上位机——MFC】单文档和多文档视图架构
  • java类=null的回收
  • debuginfo详解
  • Python基本语法(类和实例)
  • 【RocketMQ 高可用】- 从节点同步偏移量源码解析
  • 计算机体系结构 第九章 (附带移数网络直径证明和取值情况)
  • 刷leetcodehot100返航版--哈希表5/5、5/6
  • Java抽象类与接口详解
  • 【项目】基于ArkTS的网吧会员应用开发(1)
  • 访问计划(C++)