# t_java_jmeter_webRTC **Repository Path**: chenthe1/t_java_jmeter_webRTC ## Basic Information - **Project Name**: t_java_jmeter_webRTC - **Description**: JMeter扩展Java请求实现WebRTC本地音视频推流压测脚本。 - **Primary Language**: Java - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 4 - **Forks**: 1 - **Created**: 2022-04-07 - **Last Updated**: 2022-12-07 ## Categories & Tags **Categories**: Uncategorized **Tags**: webrtc ## README JMeter扩展Java请求实现WebRTC本地音视频推流压测脚本 =============== 项目介绍: ----------------------------------- WebRTC是Web Real-Time Communication缩写,指网页即时通讯,是一个支持Web浏览器进行实时语音或视频对话的API,实现了基于网页的视频会议,比如声网的Agora Web SDK就是基于WebRTC实现音视频通信的。与HTTP不同,WebRTC应用的主要压力是码流,JMeter没有找到提供WebRTC Sampler的第三方jar包,只能自己尝试写一个。 无头浏览器: ----------------------------------- 正常情况是打开浏览器,打开摄像头和麦克风输入音视频流进行请求传输,测试模拟采用无头浏览器,读取本地文件作为音视频输入。 无头浏览器是指没有界面的浏览器,通过调用浏览器API来模拟操作,比如Chrome在启动时添加--headless,就可以进入无头模式。 WebRTC是使用JavaScript编写的,在前端领域生态相对来说丰富一些,有现成可用的Node库Puppeteer来支持无头浏览器: ![img.png](src/main/resources/img/img.png) 为了让JMeter能并发调用,需要编写Java代码调用Puppeteer,听着有点想象力,实际上已经有封装好的开源库了:jvppeteer。 Java代码: ----------------------------------- 在pom.xml中添加依赖: ``` io.github.fanyong920 jvppeteer 1.1.2 org.apache.jmeter ApacheJMeter_core 5.3 org.apache.jmeter ApacheJMeter_java 5.3 ``` jvppeteer是Java封装Puppeteer包,ApacheJMeter_core和ApacheJMeter_java用来扩展JMeter。 新建\src\main\java\Test.java:省略 Test类继承了JavaSamplerClient类。getDefaultParameters()定义了JMeter界面参数。setupTest()是测试初始化,创建无头浏览器。runTest()是测试执行,访问会议URL进行推流。teardownTest()是测试清理,关闭无头浏览器。setupTest()和teardownTest()在运行时每个线程只会执行一次。 无头浏览器核心参数配置如下: ![img_1.png](src/main/resources/img/img_1.png) Java代码写好后,需要打成jar包提供给JMeter调用。打包过程如下: 点击右上角Project Structure: ![img.png](src/main/resources/img/img_2.png) 打开Artifacts,点击+号,填写名字,在右边区域双击编译后输出文件目录到左边: ![img_3.png](src/main/resources/img/img_3.png) 点击OK确认后,从菜单栏找到Build Artifacts点击: ![img_4.png](src/main/resources/img/img_4.png) Build就可以了: ![img_5.png](src/main/resources/img/img_5.png) JMeter使用 -------------------- 首先需要把jar包复制到lib\ext目录下,webrtcTest.jar位置如下: ![img_6.png](src/main/resources/img/img_6.png) 除了webrtcTest.jar,还依赖3个jar包都已经为大家收集好,在src\main\resources\lib目录下; 源文件在Settings\Build\Build Tools\Maven找到Local repository本地仓库目录后打开,jvppeteer-1.1.2.jar存放位置如下: ![img_7.png](src/main/resources/img/img_7.png) commons-compress-1.20.jar存放位置如下: ![img_8.png](src/main/resources/img/img_8.png) Java-WebSocket-1.5.0.jar存放位置如下: ![img_9.png](src/main/resources/img/img_9.png) 然后打开JMeter,添加线程组,添加Java请求,选择刚才创建的类,初始参数也加载出来了: ![img_10.png](src/main/resources/img/img_10.png) 默认音视频流是这样: ![img_11.png](src/main/resources/img/img_11.png) 本地音视频流是这样: ![img_12.png](src/main/resources/img/img_12.png) 脚本弄好了就可以开始对WebRTC应用进行压测了。 小结 本文介绍了如何使用Java对Puppeteer封装的jvppeteer,实现对WebRTC进行本地音视频流的压测脚本,打包成jar包后,可以在JMeter中进行扩展,通过Java请求Sampler来调用。Headless Chrome对.y4m格式视频和.wav格式音频支持较好,建议用这两种格式做测试。除了这种方式外,还了解到WebRTC有个官方测试引擎Kite,可以通过Selenium Grid来做自动化测试和性能测试,等实践后再做分享。 参考资料: ------------------------------ https://www.cnblogs.com/chenkx6/p/13639629.html https://baike.baidu.com/item/WebRTC/5522744?fr=aladdin https://github.com/puppeteer/puppeteer https://github.com/fanyong920/jvppeteer .y4m视频下载: https://media.xiph.org/video/derf/