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切割出相应格式的流媒体文件。命令是:

  利用kite对视频流应用进行压力测试-风君雪科技博客

  

值得注意的是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. 结束语

关于视频服务压力测试,这次的分享就到这里咯。还请各位观众老爷多多交流指正哦。