Jmeter使用Websocket插件测试SingalR,外加还有阿里云PTS的Jmeter原生测试爬坑日志。
题外话:距离我的上一篇博客已经过去7年多了,我实在是个不务正业的程序员,遇到测试方面的东西总想分享一下,因为可用的资料实在太少了(包括国外的资料)。
本人不喜欢授人以鱼,所以不会直接给出问题和解决方案的键值对,各位看官多多包涵。
先说说这次的场景:
在开发中我们使用.Net Core的SignalR(底层实现为包括WebSocket的多个协议的封装)作为长连接方案。同时对于该长连接的压力测试也是一个非常重要的环节。
坑1:Jmeter连接SingalR
我通过Chrome查看时,看到有一个连接是连到/HubName?id=XXXXXXXXXXXX,所以我果sha断bi的直接用了这个连接。一直提示404。此时觉得应该是我的插件或者Jmeter本身又或者是我老婆不让我连接这个接口。多方尝试无果,坐飞机去曾经的人类曙光查。(7年后我还是想吐槽一下百度你真的是给我们提供了一个测试Internet连接的好工具)
查到这个: 这个是病毒不要点点了地球会爆炸!
巨硬的官方文档,重点画出来,自己看大图

这个是SignalR用来创建连接的请求,跑回Chrome一看果然有这个请求,这个请求成功后会带一个ConnectID,后面的连接可以使用这个ID做参数来连接。嗯,原来是少了这一步。少年且慢,是不是拿着葵花宝典就想着去自宫了?再继续往下看:

是的,这里写着,若不自宫亦能成功。
原来直接去对/HubName不带queryString进行连接也可以创建连接。
至于为什么之前带参数会提示404(或者409)。上面那张图自己找去
至此,连接问题解决!手动撒花~
坑2:阿里云PTS,Jmeter原生模式运行Websocket提示“启动错误”
本来准备弄个压测服务器对等的压测。某天中午睡觉梦到蛇咬自己尾巴,然后就得出了苯的分子式的这个人并不是我。不过我确实午睡的时候突然想到有没有更便宜的方案?一查果然有云压测。在根本就没有经过分析对比的情况下我选择了阿里云PTS并且让老板给我掏了158大洋买了个云玩具。
很方便的是它可以上传jar插件和参数化csv文件,这点基本解决了压测的绝大部分问题。
在自信满满的写好了WebSocket脚本并且上传好插件之后,运行起来Duang(看我嘴型),启动错误,并且没有任何什么卵提示。提交工单吧:
然后客服GG告诉我他本地打开文件确实也Duang了,说我脚本文件是不是有问题。(这里注意以下他睾贵的标题栏,并不是瘟到死,我手上没有Mac无法确认是否是跨平台的问题)

[手动黑人问号],继续追问下,GG很热心的帮我找到了错误的位置。

[手动懵逼脸1秒露出淫笑],让我想起来好像Chrome调试下,在每个WebSocket内请求的结尾都会显示一个方框。并且这个方框被复制到了测试脚本中。删掉这个方框后,请求就会超时,这让我更加确认了这是一个结束符,查阅Unicode以后更加肯定了

并且我注意到(忘了哪里找到的小道消息),1e在XML中是一个非法字符,而jmx就是xml格式。
那么我不放在脚本内部不就完了?找到脚本,勾选从发送文件内容,把包括请求内容和结束符都放到一个txt中,选择该文件。
成功启动!撒花!
坑3:接上个坑的解决方案之后
其实有一些经验的人应该注意到一个可能存在的问题:如果请求内容也放到txt中那么就无法参数化了。简单测试以后问题确认。
那么现在就在石头和硬的东西中间(Between a rock and a hard place),要么不能参数化,要么老板给我买的玩具报废。依照马克思恩格斯以及毛爷爷思想邓爷爷理论中最重要的废物利用原则,我还是想想办法吧。
Websocket的数据收发,其实和socket的数据收发形式是很像的。底层都是以字节流的方式。这也是为什么每条消息需要一个结束符来表示消息的末尾,否则服务端无法确认数据包的结束。等不到结束符SignalR也不会认为收到了消息,两边会一直等到超时为止。
既然和Socket很像,那么就有可能有粘包问题(不懂自己百度吧,我也不懂)我猜想,这里可否利用一下粘包的特性?
解决方案如下:
连接成功后,
1、创建一个WebSocket Writer,把请求内容直接写到脚本文件中,这里不发送结束符,同时不等待响应。那么这里的内容就可以参数化了
2、再创建一个WebSocket request-respone, 此时用上面文件的方式仅仅发送一个结束符,然后接收响应。
相当于把两个请求合成了一个请求,(request1&request2)-response
方案得逞,撒花!
Jmeter使用Websocket插件测试SingalR,外加还有阿里云PTS的Jmeter原生测试爬坑日志。的更多相关文章
- 阿里云linux安装jmeter并进行压测
一.阿里云linux安装JDK 1.下载安装JDK jdk官网,选择linux版本,下载并保存. (一)yum安装 安装epel的yumyuan yum install epel-release -y ...
- 压力测试(六)-阿里云Linux服务器压测接口实战
1.SpringBoot 接口打包,并用jar包方式部署 简介:用jar包方式在控制台进行启动 打包 mvn package && java -jar target/gs-spring ...
- 阿里云PTS分享-用性能测试工具JMeter实现基于供应链业务上对于WebSocket 协议的压测
性能测试PTS(Performance Testing Service)是面向所有技术相关背景人员的云化性能测试工具,孵化自阿里内部平台.有别于传统工具的繁复,PTS以互联网化的交互,面向分布式和云化 ...
- 流媒体测试笔记记录之————阿里云监控、OBS、FFmpeg拉流和推流变化比较记录
OBS设置视频(512kbps)和音频(128kbps)比特率 阿里云监控结果: 使用FFmpeg拉流到Nginx 服务器测试比特率 第二次测试,修改视频和音频比特率 OBS设置 阿里云监控 Ngin ...
- 阿里云主机SSD实例磁盘测试及IO调度算法调整
测试背景及环境说明 阿里云ECS 主机配置: 4C8G root@zabbix-master:~# grep -i "model name" /proc/cpuinfo model ...
- 阿里云RDS for SQL Server测试吐槽
最近测试了一下阿里云RDS for SQL Server,有些设计简直就是反人类,让人不得不吐槽一番. 1:控制台创建数据库时,数据库名不能包含大小字母. 如上截图所示,数据库名称不能包含大写字母,好 ...
- 国内5家云服务厂商 HTTPS 安全性测试横向对比
随着 Chrome.Firefox 等浏览器对 HTTPS 的重视,国内众多云服务厂商都相继提供 SSL 证书申购服务,但是大家有没有注意到一个细节,不同厂家申请的 SSL 证书,由于证书性能.功能差 ...
- JMeter性能测试9:阿里云服务器压测
第一步准备好jmeter脚本 第二步 将本地的jmeter脚本上传到阿里云进行验证 检验阿里云的jmeter是否能正常运行 将本地的脚本上传到阿里云使用xshell进入到该目录下 使用命令运行刚才上传 ...
- sysbench测试阿里云ECS云磁盘的IOPS,吞吐量
测试阿里云ECS 对象:在aliyun上买了一个ECS附加的云盘,使用sysbench测试云盘的IOPS和吞吐量 sysbench prepare 准备文件,10个文件,1个1G [root@iZwz ...
随机推荐
- Python基础篇(一)_基本语法元素
Python基础篇——基本语法元素 缩进:体现强制可读性,一般缩进4个空格.一个或多个Tab 注释:单行注释----以 # 开头 多行注释----每行以 # 开头,以 # 结束 变量:无须提前声明.可 ...
- 【Weiss】【第03章】链表例程的一些修改
主要是,感觉原来的链表例程通过Node的分配形成了链表,但是没有自动消除Node的办法比较危险,一旦在clear()之前把链表赋了其它值就内存泄漏了. 所以改了析构函数,自动清理分配出来的内存.既然改 ...
- H5新特性之语义化标签
一.为什么要增加新的语义化标签 在HTML 5出来之前,我们用div来表示章节,但是这些div都没有实际意义,这样的布局方式使我们的结构不够清晰,于是语义化标签应运而生. 二.何为语义化标签 顾名思义 ...
- Spring集成axis2
1.新建一个项目,结构如下 2.引入项目所需jar包 axis相关jar文件说明请查阅该博文 3.配置web.xml,注册axis2信息 <?xml version="1.0" ...
- angular6 增加webpack配置 亲测可用
核心 Angular Cli 6 禁用了webpack的自定义配置,官方似乎并未提供自定义配置webpack的方法. 在此之前,可以使用ng eject把默认的webpack提取到代码中,进行自定义. ...
- Model、Form、ModelForm的比较
Model.Form.ModelForm 本节内容: 1:Model 2:Form 3:Model Form 1 2 3 http://www.cnblogs.com/wupeiqi/articles ...
- Java第十三周实验作业
实验十三 图形界面事件处理技术 实验时间 2018-11-22 1.实验目的与要求 (1) 掌握事件处理的基本原理,理解其用途: 事件源:能够产生事件的对象都可以成为事件源,如文本框.按钮等,一个事 ...
- 洛谷 P1438 无聊的数列 题解
原题链接 首先,我们考虑用差分解决问题. 用 \(x_i\) 表示原数列,\(a_i = x_i - x_{i-1}\) 那么,先普及一下差分: 如果我们只需要维护区间加值,单点求值的话,你会发现两个 ...
- 一文看懂神经网络初始化!吴恩达Deeplearning.ai最新干货
[导读]神经网络的初始化是训练流程的重要基础环节,会对模型的性能.收敛性.收敛速度等产生重要的影响.本文是deeplearning.ai的一篇技术博客,文章指出,对初始化值的大小选取不当, 可能造成 ...
- 初始化一个vue项目
1.安装node 端开发框架和环境都是需要 Node.js ,先安装node.js开发环境,vue的运行是要依赖于node的npm的管理工具来实现,下载https://nodejs.org/en/,安 ...