51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 2350|回复: 3
打印 上一主题 下一主题

[资料] 利用Jmeter对WebRTC应用进行压力测试

[复制链接]
  • TA的每日心情
    擦汗
    8 小时前
  • 签到天数: 1048 天

    连续签到: 1 天

    [LV.10]测试总司令

    跳转到指定楼层
    1#
    发表于 2021-8-12 11:32:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    说明:WebRTC是一款开源的多人即时视频API,与一般的http请求不同,webrtc应用实际压力主要是码流
      最近负责了一个WebRTC的视频会议性能测试,也蛮有意思的,因此将压测方案、思路记录下来
      一、测试思路
      1、WebRTC多人会议的简单架构(自己画,意思到就行)

    WebRTC视频会议应用主要的压力是码流、在线人数,所以我们希望的是连接能保持,同时也能输入视、音频流。
      上图可以看到,一个浏览器就是一个用户,最直观的做法就是同时多台电脑浏览器接入视频会议,然后打开摄像头和麦克风输入视、音频流。
      2、Chrome Headless模式
      那么我们能否模拟出这种场景呢,答案肯定是可以的,就是使用chrome headless模式,并读取本地文件作为音视频输入。
      什么是浏览器的headless模式,有做过自动化的同学肯定不陌生。
      · 在无界面的环境中运行 Chrome
      · 通过命令行或者程序语言操作 Chrome
      · 无需人的干预,运行更稳定
      · 在命令行启动 Chrome 时添加参数 --headless,便可以 headless 模式启动 Chrome
    1. chrome --headless --remote-debugging-port=9222 --disable-gpu#开启远程调试
    2.   chrome --headless --disable-gpu --dump-dom https://www.baidu.com#获取页面 DOM
    3.   chrome --headless --disable-gpu --screenshot http://www.baidu.com#截图
    复制代码
    远程调试

    · 更多headless模式启动参数
      二、WebRTC压力端实现
      1、选择库
      控制浏览器行为就想到Puppeteer,这是一个Node库,提供了一个高级 API 来通过 DevTools协议控制 Chrome。
      由于希望使用Jmeter产生并发,所以我用了另外一个库jvppeteer,简单理解就是用java封装一次的Puppeteer。
      2、WebRTC测试客户端代码

      先添加依赖:
    1. <dependency>
    2.       <groupId>io.github.fanyong920</groupId>
    3.       <artifactId>jvppeteer</artifactId>
    4.       <version>1.0.7</version>
    5.   </dependency>
    复制代码
    直接贴关键代码,注释都应该比较清晰的了
    1. public void webRtcConnect() {
    2.   String chromePath    = "D:\\Google\\Chrome\\chrome.exe";
    3.   String fakeVideoPath = "E:\\media\\test.y4m";
    4.   String fakeAudioPath = "E:\\media\\test.wav";
    5.   try {
    6.           String path = new String(chromePath.getBytes(), "UTF-8");
    7.   ArrayList<String> argList = new ArrayList<String>();
    8.   argList.add("--no-sandbox");//**禁用沙箱
    9.   argList.add("--disable-setuid-sandbox");
    10.   argList.add("--ignore-certificate-errors");//**忽略所有网站的证书报错
    11.   argList.add("--use-fake-ui-for-media-stream");//**不弹音视频权限请求对话框
    12.   argList.add("--use-fake-device-for-media-stream");//**使用chrome默认的虚拟音视频数据
    13.   //**使用本地的音视频
    14.   //argList.add("--use-file-for-fake-video-capture=" + fakeVideoPath);
    15.   //argList.add("--use-file-for-fake-audio-capture=" + fakeAudioPath);
    16.   
    17.   //**指定chrome无头启动
    18.   LaunchOptions options = new LaunchOptionsBuilder().withArgs(argList).withHeadless(true).withExecutablePath(path).build();
    19.   Browser browser = Puppeteer.launch(options);
    20.   Page page       = browser.newPage();
    21.   page.goTo("https://yourURL");//**会议URL
    22.   } catch (Exception e) {
    23.   e.printStackTrace();
    24.   }
    25.   }
    复制代码
    3、整合到jmeter
      实际就是利用Jmeter的java请求组件,引用jmeter的库先将我们的代码打成jar,然后放在指定路径给Jmeter调用
      在我们原有的项目中添加jmeter依赖:
    1. <dependency>
    2.       <groupId>org.apache.jmeter</groupId>
    3.       <artifactId>ApacheJMeter_core</artifactId>
    4.       <version>${jemter-version}</version>
    5.   </dependency>
    6.   <dependency>
    7.       <groupId>org.apache.jmeter</groupId>
    8.       <artifactId>ApacheJMeter_java</artifactId>
    9.       <version>${jemter-version}</version>
    10.   </dependency>
    复制代码
    在我们的测试类中继承JavaSamplerClient接口类,并实现该父类的4个方法。


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

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

    至此,我们就可以愉快地对WebRTC应用进行性能测试了,如果有更好的方案,欢迎交流。
      效果图(默认的媒体流就是一直转圈圈+滴滴声)

    补充:
      · 本地视频、音频格式好像只能是.y4m和wav,其他格式我没有尝试,有同学验证了告诉我下,这里可以下载y4m格式的视频。
      · Linux下安装Chrome建议在CentOs7以上版本,CentOs6太南了。




    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有帐号?(注-册)加入51Testing

    x
    分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
    收藏收藏
    回复

    使用道具 举报

    本版积分规则

    关闭

    站长推荐上一条 /1 下一条

    小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

    GMT+8, 2024-11-18 17:48 , Processed in 0.064760 second(s), 24 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

    快速回复 返回顶部 返回列表