浅谈音视频自动化测试(代码片段)

zhanghui_cuc zhanghui_cuc     2022-12-09     701

关键词:

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

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 restart
            mp.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

        

    ]



欢迎关注我的公众号灰度五十,分享各类音视频、移动开发知识~
在这里插入图片描述

文章帮到你了?可以扫描如下二维码进行打赏,打赏多少您随意~
在这里插入图片描述

浅谈单元测试(代码片段)

...,基本结论就是:单元测试大概率没啥鸟用。众所周知,自动化测试相比手动测试一个比较明显的特点就是见效慢,需要积累一定的时间所产生的的价值才能超过手动测试,这还是在比较理想的情况下。某些时候可能永远也超不... 查看详情

浅谈自动化测试|初遇自动化测试(代码片段)

浅谈自动化测试自动化测试(Testautomation)是近年来逐渐兴起的软件开发流程,本系列文章将藉由作者过去的开发经验,与大家分享PHP/Laravel结合自动化测试的理论与实务,希望能对初学PHPUnit及自动化测试的同... 查看详情

浅谈pytest+httprunner如何展开接口测试(代码片段)

...测试。本文着重介绍了如何借用pytest与httprunner进行接口自动化测试。一、什么是接口测试Incomputing,aninterfaceisasharedboundaryacrosswhichtwoormoreseparatecomponentsofacomputersystemexchangeinformation.Theexchangecanbebetweensoftware,computerhardware,peripheraldevices,... 查看详情

测试老鸟浅谈unittest和pytest的区别(代码片段)

一、unittest#MyFunction.pydefadd(a,b):returna+b1.unittest单元测试#单元测试.py"""1、单元测试框架:自动校验结果python:unittest或者pytest、Java:Junit、TestNG怎么写用例:必须以test开头查找用例参数化"""importunitte... 查看详情

junit基本介绍视频笔记1(代码片段)

...、压力测试由此引出了单元测试的最基本的需求是:实现自动化测试。该门课程的主要内容:  查看详情

浅谈前端自动化构建(摘抄)(代码片段)

...没有一个统一的标准,让前端的项目结构千奇百怪。前端自动化构建在整个项目开发中越来越重要。        我 查看详情

浅谈自动化测试

...在学习python,正好部门技术结构调整,就开始了点工向UI自动化测试的转变,我要说瞌睡来了就掉枕头么?不过还好,可以将python的学习成果在自动化测试中实践。。。 1、about自动化测试定义:把人为驱动的测试转化为机器... 查看详情

浅谈接口自动化测试

...)昨晚在某个测试交流群,听了一个测试老司机分享接口自动化测试的内容,对接口自动化有了更深的一些认识,也为接下来公司的接口自动化实施,提供了更多的思路。这篇博客,就说说功能测试到接口自动化的进阶,以及接... 查看详情

浅谈接口自动化测试

昨晚在某个测试交流群,听了一个测试老司机分享接口自动化测试的内容,对接口自动化有了更深的一些认识,也为接下来公司的接口自动化实施,提供了更多的思路。这篇博客,就说说功能测试到接口自动化的进阶,以及接口... 查看详情

工具篇|浅谈测试那些恩怨情仇。。。(代码片段)

...肉测试二、Monkey-压力测试三、PerfDog性能狗四、WeTest平台自动化兼容测试1.设备通过率:80.0%2.问题列表3.安装包检查参考资料以不变应万变,万变不离其宗。前言测试的重要性,不言而喻。身为开发的我,在离职廊... 查看详情

unity游戏开发浅谈unity游戏开发中的单元测试

...函数去进行验证,检查它的正确性。一个单元测试是一段自动化的代码,这段代码调用被测试的工作单元,之后对这个单元的单个最终结果的某些假设进行检验。单元测试使用单元测试框架编写,并要求单元测试可靠、可读并且... 查看详情

pytest接口自动化测试框架|跳过测试类(代码片段)

视频来源:B站《冒死上传!pytest接口自动化测试框架(基础理论到项目实战及二次开发)教学视频【软件测试】》一边学习一边整理老师的课程内容及试验笔记,并与大家分享,侵权即删,谢谢支持&#x... 查看详情

浅谈硬件自动化测试框架

关于自动化测试框架,默认都是针对纯软件的,并且集中在web和app应用软件。故而准确的说应该是软件产品自动化测试框架。本文将针对硬件产品,谈谈个人对硬件自动化测试框架的一些看法。背景物联网技术正在高速发展,相... 查看详情

浅谈自动化测试行为的本质

今天跟大家讲解的是自动化测试行为的本质是什么?会有很多人都说自动化测试可以零基础入门,可是对于新手来说,总是把自动化看得很高端和复杂。下面就跟大家讲讲什么是自动化行为的本质。 先来看看功能测试如何进... 查看详情

pytest接口自动化测试框架|集成allure测试报告(代码片段)

视频来源:B站《冒死上传!pytest接口自动化测试框架(基础理论到项目实战及二次开发)教学视频【软件测试】》一边学习一边整理老师的课程内容及试验笔记,并与大家分享,侵权即删,谢谢支持&#x... 查看详情

关于自动化学习浅谈二

什么是自动化测试?自动化测试的原理是什么?常用哪些工具?常用哪些框架?工具的原理又是什么?自动化如何学习?自动化的优点与缺点是什么?价值在哪里?学习自动化测试要了解与掌握哪些内容?哪些项目适合自动化测... 查看详情

浅谈接口自动化测试

...晚在某个测试交流群,听了一个测试老司机分享接口自动化测试的内容,对接口自动化有了更深的一些认识,也为接下来公司的接口自动化实施,提供了更多的思路。 这篇博客,就说说功能测试到接口自动化... 查看详情

pytest接口自动化测试框架|pytest断言(代码片段)

视频来源:B站《冒死上传!pytest接口自动化测试框架(基础理论到项目实战及二次开发)教学视频【软件测试】》一边学习一边整理老师的课程内容及试验笔记,并与大家分享,侵权即删,谢谢支持&#x... 查看详情