1. 前言
工作中使用到了视频流服务,在前期的选型中,苦于无法测试视频服务的稳定性,扩展性,经过一番尝试终于测试成功,特此记录下来。
2. 使用工具
OPENVIDU:视频服务平台
FFMPEG:多媒体视频处理工具,用于切割视频流,音频流
KITE:WEBRTC测试引擎
ZABBIX:服务器监控软件
INTELLIJIDEA:JAVA开发工具,用于编写自己的测试用例
3. 使用
前期的安装工作就不在此赘述了,主要梳理一下我遇到的几个坑
1.openvidu的安装中,最好使用Ubuntu16.04,Ubuntu Bionic18.04会存在一些限制,因为Ubuntu Bionic18.04不支持使用OpenCV过滤器.这样就无法使用音视频过滤器。
2.视频流使用最好用y4m格式,音频流最好使用wav格式,因为后续利用到Google浏览器的handless模式,该模式支持这2中格式较好。选取好对应分辨率的视频原文件后,利用ffmpeg切割出相应格式的流媒体文件。命令是:
值得注意的是y4m格式都比较大,像我这个源视频才32MB,但是y4m格式是8.19G,需要预留出足够的空间。
3.Kite的安装简单,但在构建部署,kite会下载google浏览器的驱动文件,由于国内的环境限制,要么FQ下载,要么事先下载好再放到如下位置:
4. 需要统一测试浏览器的版本和相对应的驱动版本,不一致的情况下是无法调用成功的。地址见:http://chromedriver.storage.googleapis.com/index.html
5. 测试用例的基本逻辑是利用selenium模拟人操作被测应用,用准备好的视频流,音频流充当应用的视频音频来源,接着使用ZABBIX来监控服务器资源的占用,测试出服务器极限。
5.1 测试用例配置文件分析:
Grids:指定selenium grids的地址
tests:测例列表主要关注的是
tupleSize: 浏览器的实例数量,数量设置10时,代表测试会开启10个浏览器实例,selenium默认开启5个实例,可通过修改启动项(localGridchromestartNode.bat)改变。
testImpl: 测例入口文件
payload: 自定义键值对数据,可以传递到测例中供测试使用
client: 测试浏览器的配置,在这里就可指定上述的视频流,音频流位置,也可以指定使用的浏览器(browserName),浏览器模式(headless)等配置
5.2 Java测例运行时的调用栈
Engine.java main
Engine.java runInterop
TestRunThread.java call
MatrixRunner.java run
TestManager.java call
KiteBaseTest.java execute
KiteBaseTest.java testInParallel
TestRunner.java call
TestStep.java processTestStep
TestStep.java execute
TestStep.java step
而我们编写的测例入口就是实现KiteBaseTest中的payloadHandling方法和populateTestSteps方法,前者可以解析config中payload中内容,后者则可以添加我们实现的Step子类实例
比如下面截图中就有实现的步骤,可根据具体的软件来编写具体的步骤:
比如第一个打开页面
继承TestStep,实现step方法,通过webDriver对象打开浏览器输入并访问测试地址,并等待页面元素的出现。
其他的步骤就不一一说明了,总的来说就是在step里面通过操作被测软件的页面元素来模拟人的操作(点击,输入字符等),用代码来实现功能的测试流程。
5.3 由于使用的selenium grids,selenium框架提供了docker镜像,可方便的在云上使用。
4. 结束语
关于视频服务压力测试,这次的分享就到这里咯。还请各位观众老爷多多交流指正哦。
最新评论