本次测试案例主要是分享如何使用JMeter进行websocket协议下的聊天接口性能测试。

包含websocket插件的下载安装、线程组及sampler的设置、csv参数化和组建分布式测试的方法、如何通过调整参数来获得发压机的最大并发数以及对测试过程的总结。

整篇文章只侧重介绍进行websocket测试的思路,对具体工具的使用步骤较少着墨,因为网上已有不少相关介绍文章。

希望本篇文章可以对其他正准备用JMeter进行websocket测试的读者提供一些参考。本人水平有限,如有错误恳请批评指正,感谢!

正文

最近收到一个任务,需要对公司的即时通讯服务端进行压测及聊天接口性能测试,这款即时通讯软件的客户端是通过websocket协议与服务端通信的。

但我之前只做过http协议的测试,websocket协议还是第一次。于是我在网上搜索websocket协议的压测工具,一番比较后选中了JMeter。

选择JMeter的原因有以下几点:

1.JMeter是一款免费开源的软件,有成熟的社区及插件管理工具,满足用户的各种需求。

2.JMeter包含windows、mac、linux多平台版本,对发压机支持较好。

3.JMeter支持GUI和CLI两种操作模式,配置分布式压测步骤简单快捷。

网上有很多关于JMeter的安装使用说明,这里我就不再赘述直接进入websocket的相关测试工作。

安装插件

JMeter不自带websocket功能,需要安装插件,这个插件直接安装最新的就行了,我用的是1.2.8版本。

将下载好的jar包放在JMeter目录下的lib/ext里,然后打开JMeter将websocket sampler勾选上再重启JMeter就安装好JMeterWebsocketSampler插件了。

新建线程组和sampler

这里我先把发压机的线程数设置为100,所有线程立即初始化,运行5分钟。

发压机支持的最大线程数跟发压机的配置有关,我的机器配置是6核12线程,能够设置的最大线程数是160,再多就会运行报错。

但是我的机器线程设置超过100后发送速度也不再增加,想知道自己发压机刚好到达最大发送速度时的线程数,可以设置ramp-up period,比如设置60秒,120个线程,就是平均每秒初始化两个线程,到第60秒时刚好全部初始化完毕

我自己测试从50秒往后发送速度就不再增加了,所以就设置为100了。

然后添加websocket connection sampler、websocket send sampler、websocket connection close sampler,分别用于建立连接、发送请求、断开连接操作。

由于是压测案例,所以我用到了Loop Controller,可以用于控制sampler的循环次数,并且客户端只管发送,不接收服务端的响应,因为我依靠另一端实际接收到的消息数判断发送是否成功,这样可以避免等待响应阻塞进程。

我的配置如图所示:

我把infinite勾选上了,表示在5分钟的压测时间内让sampler不限次数地循环,这样可以测出sampler在指定时间内能够完成的最大次数。

CSV参数化

对于JMeter来说,每一个线程就是一个用户,所以设置100个线程就需要100个测试用户的账号、密码及发送数据。

添加CSV DATA Set Config步骤,csv的配置我这里不再赘述,不过需要说明的是测试服务端处理聊天消息的性能,最好是多组一对一聊天这样的设置,比如我的就是50个用户分别给另外50个用户发送消息,这样符合真实使用场景,也能测出服务端的真实性能。

分布式测试

按以上步骤找到每台压测机的最大线程数后,就可以开始分布式测试了。

另找一台机器作为主控机,确保每台压测机与主控机的网络互通。在jemter.properties里的remote_hosts添加压测机的ip和端口,server_port是JMeter启动的端口,压测机用jmeter-server启动。

如果主控机与压测机之间的RMI不是SSL连接,记得将server.rmi.ssl.disable=true的注释解开。server-rmi-localport是用于本机跟其它机器通信的RMI端口,如果要使压测机的压测数据回传主控机,需要将压测机及主控机jemter.properties里的mode=standard注释解开。

保存后主控机使用CLI输入命令jmeter -n -t “Webim Thread Group.jmx” -R x.x.x.x,y.y.y.y -l wbeimlog.jtl -e -o repoort(-R后跟压测机ip,多台用逗号分隔)就可以使用主控机对压测机发送指令了。

压测机接收到指令后会在CLI界面上显示如下信息:

结合压测机回传的数据可以逐台添加压测机以探测服务端的极限性能。汇总的数据在命令行里指定的report目录里,打开index.html页面可以查看统计数据的饼状图,如下图所示:

根据统计数据可以看到发送的总次数、成功次数、错误情况等信息,对测试案例进行调整。到此使用JMeter进行websocket性能测试就算完成了。

测试过程总结

整个测试的关键点有三处:

一是调整发压机参数使并发数达到最大;

二是设置每对聊天账号都是一对一,不等待服务端响应,以便获得最真实的服务端性能;

三是根据压测机回传的数据分析出压测机所需的数量,进而测试出服务端的最大性能。

我这边整个测试工作都处于测试环境进行,取得的测试数据并不能完成代表真实生产环境下的情况,仅可以用作预测生产环境下的性能表现。今天的分享就到此结束了


最后: 可以在公众号:程序员小濠 ! 免费领取一份216页软件测试工程师面试宝典文档资料。以及相对应的视频学习教程免费分享!,其中包括了有基础知识、Linux必备、Shell、互联网程序原理、Mysql数据库、抓包工具专题、接口测试工具、测试进阶-Python编程、Web自动化测试、APP自动化测试、接口自动化测试、测试高级持续集成、测试架构开发测试框架、性能测试、安全测试等。

如果我的博客对你有帮助、如果你喜欢我的博客内容,请 “点赞” “评论” “收藏” 一键三连哦!喜欢软件测试的小伙伴们,可以加入我们的测试技术交流扣扣群:310357728里面有各种软件测试资源和技术讨论)

性能进阶:使用JMeter进行websocket测试【建议收藏】相关推荐

  1. 性能进阶:使用JMeter进行websocket测试

    摘要 本次测试案例主要是分享如何使用JMeter进行websocket协议下的聊天接口性能测试. 包含websocket插件的下载安装.线程组及sampler的设置.csv参数化和组建分布式测试的方法 ...

  2. Jmeter对webSocket测试

    Jmeter对webSocket压测以及观察 Jmeter压测工具 之前用WebSocket开发了消息的即时推送功能,也了解WebSocket的连接是比较占内存的,如果管理不好连接数,很容易触发jvm ...

  3. 写给初中级前端的高级进阶指南(万字长文,建议收藏)

    前言 由于公众号文章不允许外链,需要跳转文中链接的同学可以在脚注里找到各个的资源链接,也可以通过点击阅读原文更加方便的跳转链接. 我曾经一度很迷茫,在学了 Vue.React 的实战开发和应用以后,好 ...

  4. 2018.7-2019.7一周年Java进阶架构师技术文章整理 建议收藏

    其实师长的公众号从2017年就开始发技术文章了,但是因为某些原因(就是懒)太监了许久,直到2018.7的时候才恢复更新.不知不觉中,已经更新了一年的广告,在没广告的日子里,顺带更新技术文章,截至201 ...

  5. JMeter之Websocket测试

    上一篇:WebSocket初步的认识 通过上一篇,以及对websocket有个初步的了解,接下来学习如何在JMeter里进行websocket的通讯. websocket插件介绍 如下图,在插件助手里 ...

  6. Vue最全知识点「基础到进阶,覆盖vue3.0,建议收藏」

    作者: 阿李卑斯 https://juejin.im/post/5ec358126fb9a0432a3c49e6 文末送<Vue.js从入门到项目实战>书籍 希望你坚持看完并带走彩蛋 声明 ...

  7. 【渗透测试】一次授权的渗透测试——建议收藏

    一:信息收集阶段 因为目标是学校,一般会去考虑收集学号,教工号.因为有的登陆点需要此类信息,且密码存在规律性(身份证后六位,123456). 目标域名xxx.com[查看资料] 开始的时候,我是直接通 ...

  8. 如何使用Jmeter对WebSocket进行压力测试

    01 环境准备 Jmeter对WebSocket协议的环境准备: 因为Jmeter本身不支持WebSocket协议的,所以需要安装第三方的插件JMeterWebSocketSampler-1.0.2- ...

  9. Jmeter实现WebSocket协议的接口和性能测试方法

    WebSocket protocol 是HTML5一种新的协议.它实现了浏览器与服务器全双工通信(full-duplex). 浏览器和服务器只需要要做一个握手的动作,然后,浏览器和服务器之间就形成了一 ...

最新文章

  1. 记一次mysql性能优化过程
  2. 学习设计模式 - 六大基本原则之单一职责原则
  3. 神经网络—pytorch60min入门教程
  4. 内容 AI:建立统一的跨媒体多模态内容理解内核
  5. web.xml文件报红,怎么解决???
  6. android给后台传递json,将服务中的JSON数据发送到Android中的UI
  7. 前端 == Ajax
  8. 东京战纪服务器维护中,东京战纪7月21维护公告 当前测试进度介绍
  9. 拓端tecdat|R语言可视化渐近正态性、收敛性:大数定律、中心极限定理、经验累积分布函数
  10. PHP 可变变量的使用
  11. MATLAB基本语法速成
  12. imac 蓝牙机械键盘_最好的蓝牙机械键盘
  13. Semi-Supervised Semantic Image Segmentation with Self-correcting Networks:基于自校正网络的半监督语义图像分割
  14. Exp8 web基础 20164323段钊阳
  15. 【笔试】计算机网络知识点整理
  16. Sping IOC 理解(转)
  17. tesla 显卡在ubuntu下安装显卡驱动log in loop 不能登陆的问题
  18. 三级网络技术_无线局域网设备安装与调试
  19. Arcgis如何设置经纬网/出图网格设置
  20. c语言之正序整数拆解

热门文章

  1. 导出word中图片的方法
  2. 聚观早报 | 百度文心一言被用户挤爆;贝莱德准备竞购瑞信
  3. 计算机保研面试之专业课如何复习?
  4. stata输出四分位、中位数的命令是什么?
  5. 百度糯米猴年初一夺冠  协同创新三大法器赢得漂亮
  6. LeetCode 544. 输出比赛匹配对(NBA季后赛对阵图)
  7. python0基础 第三节
  8. oracle的userenv和nls_lang详解
  9. 未来已来让闲置回归价值
  10. Python按照指定页数分割PDF文件