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%