理清音视频/多媒体/播放器自动化测试的思路,可以从以下几个角度来思考。
在这一环节,还要考虑好测项的组织和展示形式。常规的选择一般是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"]
}
},
]
}`
无论是用黑盒测试还是白盒测试,其实就两个关键问题:如何发起测试以及如何验证测试结果。
发起测试的方式有以下几种:
验证测试结果的方法则有以下几种:
播放器的白盒测试就用插桩测试方法即可。还是以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
}
]
}
欢迎关注我的公众号灰度五十,分享各类音视频、移动开发知识~
文章帮到你了?可以扫描如下二维码进行打赏,打赏多少您随意~