• 15
  • 16
分享
  • 性能进阶:使用JMeter进行websocket测试——软件测试圈
  • 曼倩诙谐 2021-09-30 10:05:59 字数 2433 阅读 1824 收藏 16

  摘要

  本次测试案例主要是分享如何使用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的相关测试工作。

  一.安装JMeterWebsocketSampler插件

  jmeter不自带websocket功能,需要安装插件,这个插件直接安装最新的就行了,我用的是1.2.8版本。将下载好的jar包放在jmeter目录下的lib/ext里,然后打开jmeter将websocket sampler勾选上再重启jmeter就安装好JMeterWebsocketSampler插件了。

1-1.png

  二.新建线程组和sampler

1-2.png

  这里我先把发压机的线程数设置为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的循环次数,并且客户端只管发送,不接收服务端的响应,因为我依靠另一端实际接收到的消息数判断发送是否成功,这样可以避免等待响应阻塞进程。我的配置如图所示:

1-3.png

  我把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界面上显示如下信息:

1-4.png

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

1-5.png

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

  五.测试过程总结

  整个测试的关键点有三处:一是调整发压机参数使并发数达到最大。二是设置每对聊天账号都是一对一,不等待服务端响应,以便获得最真实的服务端性能。三是根据压测机回传的数据分析出压测机所需的数量,进而测试出服务端的最大性能。我这边整个测试工作都处于测试环境进行,取得的测试数据并不能完成代表真实生产环境下的情况,仅可以用作预测生产环境下的性能表现。



作者:王浩旭   

来源:http://www.51testing.com/html/43/n-4478843.html

  • 【留下美好印记】
    赞赏支持
登录 后发表评论
+ 关注

热门文章

    最新讲堂

      • 推荐阅读
      • 换一换
          • 一、pytest简介pytest是一个非常成熟的全功能的Python测试框架。pytest框架特点:简单灵活,非常容易上手支持参数化支持简单的单元测试和复杂的功能测试,还可以用来做selenium/appnium等自动化测试、接口自动化测试(pytest+requests)pytest具有很多第三方插件,并且可以自定义扩展,比较好用的如pytest-selenium(集成selenium)、pytest-html(完美html测试报告生成)、pytest-rerunfailures(失败case重复执行)、pytest-xdist(多CPU分发)等测试用例的skip和xfail处理可以与jen...
            1 2 2238
            分享
          • 读者提问:有哪些好用的测试用例管理工具?阿常回答:这个问题我从三点回答1、为何要采用测试用例管理工具;2、有哪些常见的测试用例管理工具;3、如何来选取测试用例管理工具。一、为何要采用测试用例管理工具以前我们用 Excel 来维护测试用例,产品发布前把 Excel 里的用例过一遍,这样做似乎是可行的。但随着项目的迭代,项目复杂度的增加,用例的版本也越来越多,Excel 的缺点也逐渐显现。通过 Excel 维护用例,我们遇到的挑战:1、多人协作,用例没有统一存放地点2、项目迭代,用例如何保证常用常新3、用例设计,如何方便复用基础用例二、市面上常见测试用例管理工具Testhub、Jira、禅道、TA...
            0 0 1005
            分享
          • IT之家 9 月 13 日消息,苹果今日发布了 iOS 16 正式版更新,具体版本号为 (20A362),这是专为 iPhone 设计的最新操作系统。与 Apple 的所有软件更新一样,iOS 16 可以免费下载。 iOS 16 可在 iPhone 8 及更高版本上使用,苹果今年不再支持 iPhone 6s、iPhone 7 / Plus 和初代 iPhone SE。iOS 16 通常伴随着 iPadOS 16,但苹果今年仍在开发 iPadOS 16 功能,例如台前调度,因此 iPadOS 16 已被推迟,预计 iPadOS 16.1 更新将在 10 月份与 iOS 16.1 一起发布。苹果 ...
            0 0 930
            分享
          •   据外媒报道,当地时间周三,通用汽车旗下的自动驾驶子公司Cruise宣布,将召回950辆自动驾驶汽车,以解决其碰撞检测系统的问题。  就在一个多月前,该公司的一辆汽车在无人驾驶模式下行驶时撞上并拖拽了一名行人。具体来说,这起事故于10月2日发生在旧金山,当时一辆有驾驶员的车辆撞到了一名行人,并将这名行人推到了一辆Cruise自动驾驶汽车的车道上。Cruise的自动驾驶汽车在撞到行人后最初停了下来,但随后,为了避开车流,这辆车又向右行驶,将这名行人向前拖了约20英尺(6米)。这名行人被压在汽车的一个轮胎下,伤势严重。  经过为期三周的审查,Cruise确定其自动驾驶汽车碰撞检测子系统在这种情况...
            0 0 482
            分享
          • Bug定位要求:基本要求:定位出bug是前端bug还是后端bug更高要求:bug所属模块、bug的代码级别(不要求)Bug定位的价值:找到BUG的本质(找到必现路径)提升开发修复BUG的效率提升自身的逻辑思维与技术能力Bug定位的时间安排:优先需要进行所有测试用例的执行,找到bug,并提交bug在不耽误执行进度的前提下,可以花费时间来尽可能定位出bugBug定位的技巧:1)逻辑分析分析所有可能,逐个排查找到最短复现路径例如:玩CF游戏,从高处落下,没有掉血的情况---bug定位:可能因素逐一列出:姿势、地势、高度...针对可能因素逐一进行分析,每次控制变量,只改变其中一个因素最终确定出影响因素...
            0 0 722
            分享
      • 51testing软件测试圈微信