理清音视频/多媒体/播放器自动化测试的思路,可以从以下几个角度来思考。

1.测项设计

1.1.功能测试

  • 对各类传输协议、封装格式、编码格式的支持,在编码格式测试方面,又涉及到各类编码参数的组合,测项数量会疯狂膨胀起来
  • 各类基础播放控制,包括播放、暂停、倍速、seek等
  • 和自身产品强相关的feature测试,如无缝切换、音频输出通路、DRM等

1.2.性能测试

  • 启播(首屏)时间,更细粒度的考量因素可能有启播各个环节细分的耗时
  • seek耗时
  • 丢帧(卡顿)率,更细粒度的考量因素可能有连续丢帧数、每秒丢帧数等
  • 缓冲(rebuffer)率,更细粒度的考量因素可能有每次bufferd的时长
  • AV同步情况
  • 错误率

1.3.压力测试

  • 长时间播放
  • 弱网环境播放
  • 低性能设备环境播放
  • 高频播放操作控制,如频繁启播、频繁seek、频繁切换码流等

在这一环节,还要考虑好测项的组织和展示形式。常规的选择一般是json或xml,如下面这个例子

{cases:[{"name": "DASH-LIVE-001","brief": "Live - number template","data":{"exe-type": "TYPE_CUSTOM","urls":["http://vm2.dashif.org/livesim-dev/periods_1/testpic_2s/Manifest.mpd"]}},{"name": "DASH-LIVE-002","brief": "Live - time template","data":{"exe-type": "TYPE_CUSTOM","urls":["http://vm2.dashif.org/livesim-dev/segtimeline_1/testpic_6s/Manifest.mpd"]}},]
}`

2.测试方法

无论是用黑盒测试还是白盒测试,其实就两个关键问题:如何发起测试以及如何验证测试结果。

2.1. 黑盒测试

发起测试的方式有以下几种:

  • 直接给播放器发送播放指令
    以android平台为例,可以通过测试工具给播放器应用发送Intent来调起不同的测项,但这限制了只能在本机上发起测试。如果考虑远程测试的话,可以利用http请求发送测项内容(上一节提到的json就用上了),测试工具接收http请求后解析测项内容,再转换为Intent或其他指令形式调起播放器。
  • 模拟用户操作
    可以通过模拟触摸屏操作、遥控器按键操作等各种方式来实现。还是以android平台为例,uiAutomator就是一个现成的工具。

验证测试结果的方法则有以下几种:

  • 利用日志分析。利用提前加好的关键日志,可以方便的验证结果。
  • 利用图像、声音传感器进行分析
    可以抓取屏幕图像数据、扬声器输出的音频数据,然后对这些输出数据结果进行分析。一个简单的例子是用外部camera拍摄屏幕并分析屏幕画面的帧差,如果发现画面长时间没有变化,则很有可能是发生了卡顿。更复杂的比如分析AVSync用的SyncOne设备、Netflix的EyePatch设备,都是著名的案例,当然开发难度也更高。

2.2.白盒测试

播放器的白盒测试就用插桩测试方法即可。还是以android平台为例,CTS media中的测试代码就是很好的参考,举一例如下

 public void testPlayMidi() throws Exception {final int resid = R.raw.midi8sec;final int midiDuration = 8000;final int tolerance = 70;final int seekDuration = 1000;MediaPlayer mp = MediaPlayer.create(mContext, resid);try {mp.setAudioStreamType(AudioManager.STREAM_MUSIC);mp.setWakeMode(mContext, PowerManager.PARTIAL_WAKE_LOCK);mp.start();assertFalse(mp.isLooping());mp.setLooping(true);assertTrue(mp.isLooping());assertEquals(midiDuration, mp.getDuration(), tolerance);int pos = mp.getCurrentPosition();assertTrue(pos >= 0);assertTrue(pos < midiDuration - seekDuration);mp.seekTo(pos + seekDuration);assertEquals(pos + seekDuration, mp.getCurrentPosition(), tolerance);// test stop and restartmp.stop();mp.reset();AssetFileDescriptor afd = mResources.openRawResourceFd(resid);mp.setDataSource(afd.getFileDescriptor(), afd.getStartOffset(), afd.getLength());afd.close();mp.prepare();mp.start();Thread.sleep(SLEEP_TIME);} finally {mp.release();}}

插桩测试代码编写完成之后,同样可以选择直接在本机用指令方式调起或者远程通过http请求调起。各种插桩测试方案一般都会提供测试结果的格式化工具,所以测试结果的验证与展示不是什么大问题。

设计可扩展的测项

在前面我们提到可以用json形式来记录测项,其实还可以在此基础上进行发散,让测项可以随时定制、随时扩展。

如果我们预定义一些播放器指令字段,如“play”,“pause”, “loop”, "change_track"等,然后将这些指令组合起来,就可以实现测项的脚本化编写。播放器只要解析这样一个简单的json脚本,按照其中定义的指令顺序执行,即可达到运行测项的目标。这种简单的脚本对测试人员的技术要求也很低。

举一个示例如下,在这个例子中,将会执行启播,然后等待10秒后,停止播放。用类似的思路,可以快速扩展已有测项。

{"source":"/sdcard/test.mp4""commands": [{"command":"play","value":0},{"command":"sleep","value":10000},{"command":"stop","value":0}]}

欢迎关注我的公众号灰度五十,分享各类音视频、移动开发知识~

文章帮到你了?可以扫描如下二维码进行打赏,打赏多少您随意~

浅谈音视频自动化测试相关推荐

  1. 浅谈音视频网络通信中的延时优化

    前言 在处理影视频网络通信的过程中,我们经常会遇到如下几个问题,今天就围绕如下几个问题讲讲我个人的优化心得. 为什么 TCP 传输的延时比 UDP 大 ? 直播的延时往往在 1s 以上,根本原因在哪里 ...

  2. 浅谈音视频开发入门基础及进阶资源分享

    导言:音视频开发涉及的知识面比较广,知识点又相对独立琐碎,入门门槛相对较高.想要对音视频开发具有深入全面的了解,需要在行业深耕多年.本文将简单介绍音视频的采集,编解码,传输,渲染四个技术点并对涉及到的 ...

  3. 浅谈音视频技术发展趋势和挑战!

    小到远程会议.直播娱乐,大到元宇宙话题中对于未来互动方式的讨论,音视频技术与我们生活方式的变革息息相关.目前,音视频赛道的技术突破,也给直播互动带来了很多新的玩法和形式. 此前,ZEGO即构科技视频处 ...

  4. 浅谈短视频背后的社会道德伦理问题(个人观点,仅供参考)

    浅谈短视频背后的科技伦理问题(个人观点,仅供参考) 本文根据最近发布的一则新闻:<真实的现场:快手移动连麦技术在抗疫报道中的创新应用>和之前的一篇报道: <算法不是三观不正的&quo ...

  5. 浅谈AI视频技术超分辨率

    泛娱乐应用成为主流,社交与互动性强是共性,而具备这些特性的产品往往都集中在直播.短视频.图片分享社区等社交化娱乐产品,而在这些产品背后的黑科技持续成为关注重点,网易云信在网易MCtalk 泛娱乐创新峰 ...

  6. WebRTC大会火爆上演,网易云信谈音视频研发三大突破点

    5月19日到20日,以"为开发者赋能,为行业加速"为主题的WebRTC技术盛会WebRTCon在上海盛大开幕.此次大会上,网易云信CTO赵加雨以联席主席身份出席了活动,网易云信多媒 ...

  7. 浅谈Android视频缓存库

    背景 我们都了解播放器的作用就是把音视频压缩数据转换成原始的音视频数据渲染出来,这样我们就可以看到画面.听到声音了.这里的播放器就存在两个问题,第一个问题是视频源存在云端,我们每次看完视频之后重新观看 ...

  8. 浅谈:python自动化测试中使用异步

    很早已经在项目中使用异步了,比如使用的web框架fastapi就是支持异步写法的,然而,我只学会了 async/await 的写法,可是这种写法真的可以让你的程序变快吗? 异步的概念 同步 异步 同步 ...

  9. 浅谈如何提高自动化测试的稳定性和可维护性 (pytestallure)

    转载自:https://testerhome.com/topics/15937 序 在之前,我写过一个系列"从零开始搭建一个简单的ui自动化测试框架(pytest+selenium+allu ...

最新文章

  1. Python中使用中文正则表达式匹配指定的中文字符串
  2. [Android Pro] AndroidStudio IDE界面插件开发(进阶篇之Action机制)
  3. linux下文件的压缩和解压缩
  4. ubuntu 命令收集
  5. Java没有panel_java panel 问题
  6. SharePoint 2010 初体验(二)搭建一个简单的三态工作流
  7. python ssl_Python3 ssl模块不可用的问题
  8. mysql中数据定义语言_SQL数据定义语言(DDL)
  9. java 俄罗斯方块窗口_[代码全屏查看]-java 俄罗斯方块
  10. 读《构建之法》第四,十七章有感
  11. Altium Designer(七):3D模型
  12. bug篇——Windows启动redis报错Creating Server TCP listening socket 127.0.0.1:6379: bind: No error...
  13. find 命令查找-o参数的理解
  14. COLING 2022提交要求与ACL模板要求记录
  15. 硬盘分区-增加C盘容量教程
  16. 网络通信中 TCP 产生 RST 的三个条件分析
  17. 基于java植物大全智能识别系统设计与实现
  18. Python django 猫咪管理系统
  19. 小猫爪:PMSM之FOC控制07-有传感器的速度环
  20. 分布式服务框架HSF学习 Dubbo VS HSF

热门文章

  1. 批处理之ren命令-可批量修改文件名
  2. JAVA EE项目开发及应用实训报告——网上考试系统
  3. KPA EtherCAT主站协议栈基准
  4. win7 桌面图标显示不正常
  5. 1032 挖掘机技术哪家强 (20 分)(测试点分析)
  6. windows下内存检测工具
  7. 使用Scrapy爬取斗鱼图片
  8. java 防渗透_火焰 对于 () 相当于墨汁对于()A.冰冷 洁白B.温暖 黝黑C.氧气 砚台D.光明 黑暗...
  9. 天地不仁,以万物为刍狗No.42
  10. Redis--布隆过滤器--使用/原理/实例