JMeter测试WebSocket协议应用的性能

本文版权归xmeter.net 所有。欢迎转载,转载请注明出处。

摘要##

本文描述了如何使用JMeter对WebSocket应用进行性能测试。先对WebSocket作了概要介绍,然后以一个简单的echo的web为例,如何使用第三方提供的插件对其进行性能测试。

WebSocket概述##

WebSocket是在单个的TCP连接上提供了全双工通信通道的协议,该协议于2011年作为RFC6455被正式标准化。WebSocket在Web服务器和浏览器端都需要做实现。如果没有WebSocket,为了实现即时通讯,可以采用的技术都是轮询(polling)。轮询是在特定的时间间隔(如每1秒),由浏览器对服务器发出HTTP请求,然后由服务器返回最新的数据给客户端的浏览器。这种传统的HTTP请求的模式带来很明显的缺点 – 浏览器需要不断的向服务器发出请求,然而HTTP请求中头部会占用一定的开销,这种方式效率和实效性都不太好。而利用WebSocket,浏览器和服务器在基于HTTP协议完成握手后,在浏览器和服务器之间就形成了一条通信通道,他们之间就直接可以互相传送数据。在WebSocket 协议中,为我们实现即时服务带来了两大好处:
1) 头信息少,减少了系统的消耗。
2)服务器端推送,服务器不再被动的接收到浏览器的请求后才返回数据,而是在有新数据时就主动推送给浏览器。
通过这种方式,效率和实效性都得到了明显的提高,现在大部分浏览器都已经实现了对WebSocket协议的支持,当然使用WebSocket付出的代价是浏览器和服务器端要保留一个“有状态”的连接。

基于轮询机制和WebSocket的架构在实际项目中哪一种效率高,很难一概而论,因为这个跟实际的业务场景有关,最好的方法就是通过模拟实际的用户行为,对被测系统进行打压测试,然后观察被测系统的表现。采用轮询机制的系统,因为基于HTTP/HTTPS协议,现在有很多性能测试工具可以实现对这种系统进行测试。而基于WebSocket的性能测试则需要费一番功夫,不过幸运的是在开源软件生态日益完善的今天,这也不是什么难题 :)

JMeter扩展实现WebSocket性能测试##

JMeter是目前最为流行的开源性能测试工具,JMeter本身提供的基于插件的机制允许第三方实现标准JMeter所不支持的协议,而WebSocket的一个比较好的实现是WebSocketSampler。利用该插件,基本上能完成基于WebSocket协议的性能测试。

安装过程###

  1. 下载JAR包。该github项目下提供了打包好的JAR包的下载,但是还是需要用户自己再去找依赖的JAR包,使用起来还是不太方便。如果想更简单的话,可以到github下载所有打包好的JAR包。
  2. 把下载下来的JAR包拷贝到$JMETER_HOME/lib/ext目录下。如果从maciejzaleski项目下载到JAR包,还需要手工将页面 里列出的JAR也拷贝到$JMETER_HOME/lib/ext目录。
  3. 如果之前开着JMeter,需要关闭再次重启。如果安装成功,就应该在Sampler那里看到新的“WebSocket Sampler”

如果重启之后没有发现“WebSocket Sampler”,请确认在$JMETER_HOME/lib/ext是否拷贝了正确的JAR包;如果JAR拷贝正确,如果使用从maciejzaleski下载的JAR包,请确认相关依赖的JAR包和版本的正确性;如果还是有问题,请打开$JMETER_HOME/bin/jmeter.log,检查一下里面的日志是否报错,根据报错信息来采取相应的操作。

准备被测应用###

为了描述测试过程,这里准备了一个简单的Java WebSocket的工程,该工程下提供了一个叫做echo的WebSocket服务,实现的逻辑非常简单,当浏览器端发送一条文本消息的时候,该echo服务返回: "server echo, " + 浏览器发送的文本。比如浏览器发送”hello",则服务器返回 "server echo, hello"。

安装应用分成两步:
1)下载Apache Tomcat 8,并解压,启动Tomcat服务器;
2)将示例工程的war包拷贝到$TOMCAT_HOME/webapps目录下

在浏览器中打开链接,如下所示,在文本框中输入”hello”,点击“GO”,服务器端返回”server echo, hello”的话就表示工作正常了。

应用例子截图

编写测试脚本,开始测试##

如下图所示,填入相应的信息就可以开始进行测试。需要的主要信息有:

1)Server Name or IP:部署WebSocket应用所在的服务器地址
2)Port Number:端口号
3)Timeout:Connection,连接超时,超过此时间未建立连接则测试报错;Response,发送消息后的超时时间。
4)Implementation:现在只支持RFC6455
5)Protocol:ws或者wss。wss指的是加密的web socket,根据被测的配置而定
6)Path:所部署WebSocket服务的路径
7)Streaming connection:测试期间是否重用连接,如果处于非选中状态,每次得到服务器端的返回后就会关闭连接,下次执行时会新建连接
8)Request Data:发送出去的数据
9)Response pattern:等待服务器返回的特定的字符集合;否则等待Response Timeout设定的超时时间
10)Close Connection Pattern:与8类似,但是符合条件的时候连接将被关闭
11)Message Backlog:定义最多留下的返回消息的数目

WebSocket Sampler JMeter插件使用截图

在脚本中加入一个“View Results Tree“可以查看连接和发出数据的信息。如下图所示:

测试结果树

大规模WebSocket协议测试 - XMeter帮您提高效率,降低成本##

单台机器能够模拟的WebSocket客户端是有限的,如果针对大规模的WebSocket协议测试,可能需要准备大量的测试机器对被测系统进行打压,这个过程需要大量的准备机器环境,以及管理这些环境的工作,导致工作效率比较低、而且容易出错。XMeter将这些过程迁移至云端,弹性伸缩管理这些压力机,用户只要关注测试脚本的实现过程,而无需关心这些测试环境的管理,从而大大降低了大规模性能测试的复杂度。另外XMeter提供了丰富的测试报告,让性能问题一目了然。

关于我们##

XMeter成立于2016年,核心团队都来自于IBM,是一家领先技术的性能测试持续集成咨询与服务提供商。我们致力于提供给客户可靠,简单,低成本的性能测试解决方案。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,547评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,399评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,428评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,599评论 1 274
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,612评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,577评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,941评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,603评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,852评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,605评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,693评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,375评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,955评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,936评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,172评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,970评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,414评论 2 342

推荐阅读更多精彩内容