利用Jmeter对WebRTC应用进行压力测试

news2024/11/15 5:39:39

说明:WebRTC是一款开源的多人即时视频API,与一般的http请求不同,webrtc应用实际压力主要是码流

最近负责了一个WebRTC的视频会议性能测试,也蛮有意思的,因此将压测方案、思路记录下来

一、测试思路

1、WebRTC多人会议的简单架构(自己画,意思到就行)

WebRTC视频会议应用主要的压力是码流、在线人数,所以我们希望的是连接能保持,同时也能输入视、音频流。

  上图可以看到,一个浏览器就是一个用户,最直观的做法就是同时多台电脑浏览器接入视频会议,然后打开摄像头和麦克风输入视、音频流。

  2、Chrome Headless模式

  那么我们能否模拟出这种场景呢,答案肯定是可以的,就是使用chrome headless模式,并读取本地文件作为音视频输入。

  什么是浏览器的headless模式,有做过自动化的同学肯定不陌生。

  · 在无界面的环境中运行 Chrome

  · 通过命令行或者程序语言操作 Chrome

  · 无需人的干预,运行更稳定

  · 在命令行启动 Chrome 时添加参数 --headless,便可以 headless 模式启动 Chrome

  chrome --headless --remote-debugging-port=9222 --disable-gpu#开启远程调试

  chrome --headless --disable-gpu --dump-dom https://www.baidu.com#获取页面 DOM

  chrome --headless --disable-gpu --screenshot http://www.baidu.com#截图

  远程调试

更多headless模式启动参数

二、WebRTC压力端实现

1、选择库

控制浏览器行为就想到Puppeteer,这是一个Node库,提供了一个高级 API 来通过 DevTools协议控制 Chrome。

由于希望使用Jmeter产生并发,所以我用了另外一个库jvppeteer,简单理解就是用java封装一次的Puppeteer。

2、WebRTC测试客户端代码

先添加依赖:

  <dependency>

      <groupId>io.github.fanyong920</groupId>

      <artifactId>jvppeteer</artifactId>

      <version>1.0.7</version>

  </dependency>

 直接贴关键代码,注释都应该比较清晰的了。

  public void webRtcConnect() {

  String chromePath    = "D:\\Google\\Chrome\\chrome.exe";

  String fakeVideoPath = "E:\\media\\test.y4m";

  String fakeAudioPath = "E:\\media\\test.wav";

  try {

          String path = new String(chromePath.getBytes(), "UTF-8");

  ArrayList<String> argList = new ArrayList<String>();

  argList.add("--no-sandbox");//**禁用沙箱

  argList.add("--disable-setuid-sandbox");

  argList.add("--ignore-certificate-errors");//**忽略所有网站的证书报错

  argList.add("--use-fake-ui-for-media-stream");//**不弹音视频权限请求对话框

  argList.add("--use-fake-device-for-media-stream");//**使用chrome默认的虚拟音视频数据

  //**使用本地的音视频

  //argList.add("--use-file-for-fake-video-capture=" + fakeVideoPath);

  //argList.add("--use-file-for-fake-audio-capture=" + fakeAudioPath);

  

  //**指定chrome无头启动

  LaunchOptions options = new LaunchOptionsBuilder().withArgs(argList).withHeadless(true).withExecutablePath(path).build();

  Browser browser = Puppeteer.launch(options);

  Page page       = browser.newPage();

  page.goTo("https://yourURL");//**会议URL

  } catch (Exception e) {

  e.printStackTrace();

  } 

  }

3、整合到jmeter

实际就是利用Jmeter的java请求组件,引用jmeter的库先将我们的代码打成jar,然后放在指定路径给Jmeter调用。

在我们原有的项目中添加jmeter依赖:

  <dependency>

      <groupId>org.apache.jmeter</groupId>

      <artifactId>ApacheJMeter_core</artifactId>

      <version>${jemter-version}</version>

  </dependency>

  <dependency>

      <groupId>org.apache.jmeter</groupId>

      <artifactId>ApacheJMeter_java</artifactId>

      <version>${jemter-version}</version>

  </dependency>

在我们的测试类中继承JavaSamplerClient接口类,并实现该父类的4个方法。

最后打成jar包并放到jmeter的/lib/ext/目录下:

 

这样我们就可以利用Jmeter并发机制,产生多个浏览器的连接加入会议了。

至此,我们就可以愉快地对WebRTC应用进行性能测试了,如果有更好的方案,欢迎交流。

效果图(默认的媒体流就是一直转圈圈+滴滴声)

补充:

· 本地视频、音频格式好像只能是.y4m和wav,其他格式我没有尝试,有同学验证了告诉我下,这里可以下载y4m格式的视频。

· Linux下安装Chrome建议在CentOs7以上版本,CentOs6太南了。

最后:下面是配套学习资料,对于做【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!【100%无套路免费领取】

软件测试面试小程序

被百万人刷爆的软件测试题库!!!谁用谁知道!!!全网最全面试刷题小程序,手机就可以刷题,地铁上公交上,卷起来!

8小时传疯!大厂面试真题全被大佬整理在这个小程序上了!【软件测试,建议收藏】

涵盖以下这些面试题板块:

1、软件测试基础理论 ,2、web,app,接口功能测试 ,3、网络 ,4、数据库 ,5、linux

6、web,app,接口自动化 ,7、性能测试 ,8、编程基础,9、hr面试题 ,10、开放性测试题,11、安全测试,12、计算机基础 

  全套资料获取方式:点击下方小卡片自行领取即可

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1133651.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

安科瑞余压监控系统

安科瑞 崔丽洁 机械加压送风系统中为什么要设计旁通阀控制加压送风的正压值&#xff1f;火灾发生后&#xff0c;又能起到什么作用呢&#xff1f; 发生火灾时&#xff0c;绝大多数的人员伤亡不是因为火&#xff0c;而是烟气&#xff0c;随着可燃物的燃烧产生大量的高温烟气&…

【数据结构与算法】二叉树的知识讲解

目录 一&#xff0c;二叉树的结构深入认识 二&#xff0c;二叉树的遍历 三&#xff0c;二叉树的基本运算 3-1&#xff0c;计算二叉树的大小 3-2&#xff0c;统计二叉树叶子结点个数 3-3&#xff0c;计算第k层的节点个数 3-4&#xff0c;查找指定值的结点 一&#xff0c;二叉…

栈(Stack)的概念+MyStack的实现+栈的应用

文章目录 栈&#xff08;Stack&#xff09;一、 栈的概念1.栈的方法2.源码分析 二、MyStack的实现1.MyStack的成员变量2.push方法3.isEmpty方法和pop方法4.peek方法 三、栈的应用1.将递归转化为循环1.调用递归打印2.通过栈逆序打印链表 栈&#xff08;Stack&#xff09; 一、 栈…

【Javascript】数组的进阶操作

目录 splice 截取部分元素&#xff0c;保留剩下元素 清空数组 join 自定义分割符 concat 连接 a连接b b连接a a连接b,c 不会改变原数组 splice ⽤于删除或替换元素函数有返回值&#xff0c;返回的是被删除的元素这个⽅法会改变原来的数组 截取部分元素&#xff0…

黑金测评:电视盒子哪款好?双十一热销电视盒子排行榜

大家好&#xff0c;本期我们要分享的测评内容是关于电视盒子&#xff0c;双十一很多网友打算购入电视盒子&#xff0c;但并不了解电视盒子哪款好&#xff0c;本期我们自费测评了最热门的十款电视盒子&#xff0c;最终筛选出了五款最值得入手的电视盒子整理了这份电视盒子排行榜…

rust学习——智能指针

智能指针 在各个编程语言中&#xff0c;指针的概念几乎都是相同的&#xff1a;指针是一个包含了内存地址的变量&#xff0c;该内存地址引用或者指向了另外的数据。 在 Rust 中&#xff0c;最常见的指针类型是引用&#xff0c;引用通过 & 符号表示。不同于其它语言&#xf…

HCIA数据通信——基础设备配置

想了想&#xff0c;为了方便回顾复习&#xff0c;将理论和实践结合起来才是正确的&#xff0c;不然一边理论&#xff0c;又单独做实验这样不方便。 因此之前的文章都删了&#xff0c;还是以华为从头开始吧&#xff01;实验与理论应用结合起来做。 一&#xff0c;查看设备信息 …

大数据Flink(一百零二):SQL 聚合函数(Aggregate Function)

文章目录 SQL 聚合函数(Aggregate Function) SQL 聚合函数(Aggregate Function) Python UDAF,即 Python AggregateFunction。Python UDAF 用来针对一组数据进行聚合运算,比如同一个 window 下的多条数据、或者同一个 key 下的多条数据等。针对同一组输入数据,Python A…

【Linux】-docker配置容器并打包成镜像

查看本地的镜像: 容器和镜像的关系&#xff1a;容器是Object 镜像是class 一个镜像可以多个容器 docker commit 容器id 新镜像名称:版本号 运行容器&#xff1a; docker run -i -t ubuntu /bin/bash docker exec -it -u root zwbase /bin/bashdocker exec -it 会连接到容器…

部署基于efk+logstash+kafka构建日志收集平台并对nginx日志进行分析【待执行】

文章目录 1.1 安装zookeeper集群1.2 Zookeeper 配置1.2 安装kafka集群1.3 部署filebeat服务1.4 部署logstash1.5 部署es和kibana服务1.6 配置kibana ui界面1.7 对nginx进行日志分析 Filebeat采集日志kafka topic存起来日志->logstash去kafka获取日志&#xff0c;进行格式转换…

Qt 序列化函数和反序列化函数

文章目录 界面学生类序列化函数反序列化函数刷新所选择的下拉表值添加 界面 学生类 // 创建学生信息类 class studentInfo { public:QString id; // 学号QString name; // 学生姓名QString age; // 学生年龄// 重写QDataStream& operator<<操作符&…

Linux---(四)权限

文章目录 一、shell命令及运行原理1.什么是操作系统&#xff1f;2.外壳程序3.用户为什么不直接访问操作系统内核?4.操作系统内核为什么不直接把结果显示出来&#xff1f;非要加外壳程序&#xff1f;5.shell理解重点总结&#xff08;1&#xff09;shell是什么&#xff1f;&…

勒索病毒最新变种.locked1勒索病毒来袭,如何恢复受感染的数据?

引言&#xff1a; 在当今数字化时代&#xff0c;网络威胁不断进化&#xff0c;.locked1勒索病毒就是其中一种常见的恶意软件。这种病毒会加密您的文件&#xff0c;然后勒索赎金以解锁它们。本文将详细介绍.locked1勒索病毒&#xff0c;包括如何恢复被加密的数据文件和如何预防…

Hadoop3.0大数据处理学习1(Haddop介绍、部署、Hive部署)

Hadoop3.0快速入门 学习步骤&#xff1a; 三大组件的基本理论和实际操作Hadoop3的使用&#xff0c;实际开发流程结合具体问题&#xff0c;提供排查思路 开发技术栈&#xff1a; Linux基础操作、Sehll脚本基础JavaSE、Idea操作MySQL Hadoop简介 Hadoop是一个适合海量数据存…

https下载图片

OpenSSL用法示例 OpenSSL源码安装 对于ubuntu&#xff0c;懒得编译源码可以直接安装 sudo apt-get install libssl–dev /usr/include/openssl/ssl.h CMakeLists中添加 link_libraries(ssl crypto) apt-get安装不需要再制定libssl.a, libcrypto.a的路径了, 就像用libc标…

柏拉图式爱情是同性之爱,绘画是理念世界的二次模仿

公元前427年&#xff0c;柏拉图出生在雅典。 柏拉图20岁成为苏格拉底的弟子。 有一次&#xff0c;柏拉图问苏格拉底&#xff1a;“什么是爱情&#xff1f;”苏格拉底说&#xff1a;“请穿越麦田&#xff0c;摘一株最大最金黄的麦穗回来。不走回头路&#xff0c;只能摘一次。”…

永恒之蓝漏洞 ms17_010 详解

文章目录 永恒之蓝 ms 17_0101.漏洞介绍1.1 影响版本1.2 漏洞原理 2.信息收集2.1 主机扫描2.2 端口扫描 3. 漏洞探测4. 漏洞利用5.后渗透阶段5.1创建新的管理员账户5.2开启远程桌面5.3蓝屏攻击 永恒之蓝 ms 17_010 1.漏洞介绍 永恒之蓝&#xff08;ms17-010&#xff09;爆发于…

Power BI 傻瓜入门 9. 设计和部署数据模型

本章内容包含&#xff1a; 详细说明设计数据模型的技术要求Power BI Desktop中基本数据模型的设计将数据模型从Power BI Desktop发布到Power BI Services 在数据进入Power BI后对其进行操作既是一门艺术&#xff0c;也是一门科学。导入到任何应用程序中的数据不仅需要注意数据…

7-3、S曲线生成器【51单片机控制步进电机-TB6600系列】

摘要&#xff1a;本节介绍步进电机S曲线生成器的计算以及使用 一.计算原理 根据上一节内容&#xff0c;已经计算了一条任意S曲线的函数。在步进电机S曲线加减速的控制中&#xff0c;需要的S曲线如图1所示&#xff0c;横轴为时间&#xff0c;纵轴为角速度&#xff0c;其中w0为起…

PyCharm 安装 cx_Oracle 失败

我在PyCharm的终端用 pip安装cx_Oracle失败&#xff0c;报错情况如下&#xff1a; ERROR: Could not build wheels for cx_Oracle, which is required to install pyproject.toml-based projects 出错原因&#xff1a; python 的版本太高了&#xff0c;我的是3.11版本的&…