浅谈音视频自动化测试
理清音視頻/多媒體/播放器自動(dòng)化測(cè)試的思路,可以從以下幾個(gè)角度來(lái)思考。
1.測(cè)項(xiàng)設(shè)計(jì)
1.1.功能測(cè)試
- 對(duì)各類傳輸協(xié)議、封裝格式、編碼格式的支持,在編碼格式測(cè)試方面,又涉及到各類編碼參數(shù)的組合,測(cè)項(xiàng)數(shù)量會(huì)瘋狂膨脹起來(lái)
- 各類基礎(chǔ)播放控制,包括播放、暫停、倍速、seek等
- 和自身產(chǎn)品強(qiáng)相關(guān)的feature測(cè)試,如無(wú)縫切換、音頻輸出通路、DRM等
1.2.性能測(cè)試
- 啟播(首屏)時(shí)間,更細(xì)粒度的考量因素可能有啟播各個(gè)環(huán)節(jié)細(xì)分的耗時(shí)
- seek耗時(shí)
- 丟幀(卡頓)率,更細(xì)粒度的考量因素可能有連續(xù)丟幀數(shù)、每秒丟幀數(shù)等
- 緩沖(rebuffer)率,更細(xì)粒度的考量因素可能有每次bufferd的時(shí)長(zhǎng)
- AV同步情況
- 錯(cuò)誤率
1.3.壓力測(cè)試
- 長(zhǎng)時(shí)間播放
- 弱網(wǎng)環(huán)境播放
- 低性能設(shè)備環(huán)境播放
- 高頻播放操作控制,如頻繁啟播、頻繁seek、頻繁切換碼流等
在這一環(huán)節(jié),還要考慮好測(cè)項(xiàng)的組織和展示形式。常規(guī)的選擇一般是json或xml,如下面這個(gè)例子
{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.測(cè)試方法
無(wú)論是用黑盒測(cè)試還是白盒測(cè)試,其實(shí)就兩個(gè)關(guān)鍵問(wèn)題:如何發(fā)起測(cè)試以及如何驗(yàn)證測(cè)試結(jié)果。
2.1. 黑盒測(cè)試
發(fā)起測(cè)試的方式有以下幾種:
- 直接給播放器發(fā)送播放指令
以android平臺(tái)為例,可以通過(guò)測(cè)試工具給播放器應(yīng)用發(fā)送Intent來(lái)調(diào)起不同的測(cè)項(xiàng),但這限制了只能在本機(jī)上發(fā)起測(cè)試。如果考慮遠(yuǎn)程測(cè)試的話,可以利用http請(qǐng)求發(fā)送測(cè)項(xiàng)內(nèi)容(上一節(jié)提到的json就用上了),測(cè)試工具接收http請(qǐng)求后解析測(cè)項(xiàng)內(nèi)容,再轉(zhuǎn)換為Intent或其他指令形式調(diào)起播放器。 - 模擬用戶操作
可以通過(guò)模擬觸摸屏操作、遙控器按鍵操作等各種方式來(lái)實(shí)現(xiàn)。還是以android平臺(tái)為例,uiAutomator就是一個(gè)現(xiàn)成的工具。
驗(yàn)證測(cè)試結(jié)果的方法則有以下幾種:
- 利用日志分析。利用提前加好的關(guān)鍵日志,可以方便的驗(yàn)證結(jié)果。
- 利用圖像、聲音傳感器進(jìn)行分析
可以抓取屏幕圖像數(shù)據(jù)、揚(yáng)聲器輸出的音頻數(shù)據(jù),然后對(duì)這些輸出數(shù)據(jù)結(jié)果進(jìn)行分析。一個(gè)簡(jiǎn)單的例子是用外部camera拍攝屏幕并分析屏幕畫(huà)面的幀差,如果發(fā)現(xiàn)畫(huà)面長(zhǎng)時(shí)間沒(méi)有變化,則很有可能是發(fā)生了卡頓。更復(fù)雜的比如分析AVSync用的SyncOne設(shè)備、Netflix的EyePatch設(shè)備,都是著名的案例,當(dāng)然開(kāi)發(fā)難度也更高。
2.2.白盒測(cè)試
播放器的白盒測(cè)試就用插樁測(cè)試方法即可。還是以android平臺(tái)為例,CTS media中的測(cè)試代碼就是很好的參考,舉一例如下
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();}}插樁測(cè)試代碼編寫(xiě)完成之后,同樣可以選擇直接在本機(jī)用指令方式調(diào)起或者遠(yuǎn)程通過(guò)http請(qǐng)求調(diào)起。各種插樁測(cè)試方案一般都會(huì)提供測(cè)試結(jié)果的格式化工具,所以測(cè)試結(jié)果的驗(yàn)證與展示不是什么大問(wèn)題。
設(shè)計(jì)可擴(kuò)展的測(cè)項(xiàng)
在前面我們提到可以用json形式來(lái)記錄測(cè)項(xiàng),其實(shí)還可以在此基礎(chǔ)上進(jìn)行發(fā)散,讓測(cè)項(xiàng)可以隨時(shí)定制、隨時(shí)擴(kuò)展。
如果我們預(yù)定義一些播放器指令字段,如“play”,“pause”, “l(fā)oop”, "change_track"等,然后將這些指令組合起來(lái),就可以實(shí)現(xiàn)測(cè)項(xiàng)的腳本化編寫(xiě)。播放器只要解析這樣一個(gè)簡(jiǎn)單的json腳本,按照其中定義的指令順序執(zhí)行,即可達(dá)到運(yùn)行測(cè)項(xiàng)的目標(biāo)。這種簡(jiǎn)單的腳本對(duì)測(cè)試人員的技術(shù)要求也很低。
舉一個(gè)示例如下,在這個(gè)例子中,將會(huì)執(zhí)行啟播,然后等待10秒后,停止播放。用類似的思路,可以快速擴(kuò)展已有測(cè)項(xiàng)。
{"source":"/sdcard/test.mp4""commands": [{"command":"play","value":0},{"command":"sleep","value":10000},{"command":"stop","value":0}]}歡迎關(guān)注我的公眾號(hào)灰度五十,分享各類音視頻、移動(dòng)開(kāi)發(fā)知識(shí)~
文章幫到你了?可以掃描如下二維碼進(jìn)行打賞,打賞多少您隨意~
總結(jié)
以上是生活随笔為你收集整理的浅谈音视频自动化测试的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Python数据分析6——数据规整
- 下一篇: 二重积分的C语言实现