阿里云PTS分享-用性能测试工具JMeter实现基于供应链业务上对于WebSocket 协议的压测
性能测试PTS(Performance Testing Service)是面向所有技术相关背景人员的云化性能测试工具,孵化自阿里内部平台。有别于传统工具的繁复,PTS以互联网化的交互,面向分布式和云化的设计,更适合当前的主流技术架构。无论是自研还是适配开源的功能,PTS都可以轻松模拟大量用户访问业务的场景,任务随时发起,免去搭建和维护成本。更是紧密结合监控类产品提供一站式监控、定位等附加价值,高效检验和管理业务性能。
脚本工具:Apache JMeter
压测平台: PTS
测试目的
供应链客户端往往由于生产环境复杂,会产生卡顿现象,故展开本次调优性能测试境产生卡顿现象,通过压测来了解网关是否存在问题。
测试原则
1. 选择用户使用频率较高的业务功能
2. 选择用户核心业务功能
3. 监控和分析系统各服务器的性能,同时也包括应用服务器的性能问题
4. 重点分析交易的响应时间,即客户端发起请求,到应用服务器返回结果到客户端的时间,包括网络传输的时间,但不包括客户端应用程序处理返回结果的时间。
测试方法
利用Jmeter模拟前台客户端发起Socket协议请求,即在每个测试用例中,由Jmeter发送前台应用程序的Socket报文到后台应用服务器,测试后台应用服务器和数据库服务器处理客户端应用请求的能力。
测试指标
1、交互相关
- 交互数量
- 交互响应时间
2、应用服务器相关
- CPU使用率
- 内存使用率
测试环境
本次性能测试在uat环境中执行,使用单网关、单服务器进行压测。
生产环境目前是10个网关,8台服务器。
测试数据量
在生产环境中已增加以下业务数据,并在测试用例中挑选有代表性的业务数据进行测试:
|
编号 |
业务类型 |
业务数据量 |
|
1 |
登录 |
300 |
|
2 |
序列号扫描 |
300 |
|
3 |
订单查询 |
50 |
|
4 |
包装号校验 |
300 |
|
5 |
组建序列号扫描 |
300 |
测试脚本的创建
- 将一个线程组添加到测试计划中,单击测试计划 > 添加 > Thread (Users) > 线程组。
- 在线程组中添加采样器(Sampler),单击线程组 > 添加 > Sampler > 对应的 Sampler,并配置每个 Sampler。
- 在线程组中添加监听器 View Results Tree。
- 运行脚本。通过 View Results Tree 监听器查看脚本是否运行正常。
WebSocket Open Connection
将 WebSocket Open Connection Sampler 添加到线程组。单击线程组 > 添加 > Sampler > WebSocket Open Connection。
如何安装 JMeter-WebSocketSampler
下载最新的 JMeter-WebSocketSampler,如 JMeterWebSocketSamplers-1.2.1.jar。
将该文件放置到 JMeter 的安装目录(…/lib/ext)下。
重启 JMeter。
如果插件安装成功,JMeter GUI 中可看到以下新增的选项:
- 配置元件选项(Config Element):WebSocket Binary Frame Filter、WebSocket Text Frame Filter 和 WebSocket Ping/Pong Frame Filter;
- 断言选项(Assertions):Binary Response Assertion;
- 察看结果树选项(View Results Tree):Binary;

说明:我们以 Gateway Echo 服务来创建我们的脚本(ws://echo.websocket.org)。这是一个Echo 服务,因此发送到此服务的所有消息都将回显给客户端。
当前的 Sampler 将建立 WebSocket 连接。相关的配置如下:
|
配置项 |
示例值 |
说明 |
|
协议 |
WS |
协议可以是 WS 或 WSS(Secure WebSocket)。使用 WSS 进行加密连接。 |
|
Server name or IP |
echo.websocket.org |
域名 或 IP |
|
Port |
80 |
端口 |
|
Path |
( 空) |
可为空 |
|
Connection timeout(ms) |
20000 |
建连的超时时间。 |
|
Read timeout(ms) |
6000 |
等待服务器响应的超时时间。 |
WebSocket Ping / Pong
将 WebSocket Ping / Pong Sampler添加到线程组,单击线程组 > 添加 > Sampler > WebSocket Ping/Pong。该Sampler用来测试 Ping/Pong 功能。
相关配置如下:
- Pong(读)超时(ms):6000
Pong 超时表示如果 JMeter 在 6 秒内没有收到 Pong 消息,则 Sampler 将失效。此 Sampler 会复用已有连接。
WebSocket request-response Sampler
将 WebSocket request-response Sampler 添加到线程组,单击线程组 > 添加 > Sampler > WebSocket request-response Sampler。该 Sampler 将用于发送文本的一个数据帧并从服务端接收应答。
相关配置如下:
|
配置项 |
示例值 |
说明 |
|
Connection |
use existing connection |
创建新的连接或复用已有连接。 |
|
数据类型 |
文本 |
指定数据类型、请求数据和响应超时值。 |
|
Request data |
PTS |
请求数据,这里以文本为例 |
|
Response(read)timeout(ms) |
6000 |
响应超时时间 |
WebSocket Single Write Sampler
将 WebSocket Single Write Sampler 添加到线程组,单击线程组 > 添加 > Sampler > WebSocket Single Write Sampler 此请求是非阻塞的,只是将数据发送到服务端不需要等待响应。
相关配置如下:
|
配置项 |
示例值 |
说明 |
|
Connection |
use existing connection |
创建新的连接或复用已有连接 |
|
数据类型 |
文本 |
指定数据类型、请求数据和响应超时值 |
|
Request data |
PTS |
请求数据,这里以文本为例 |
|
Response(read)timeout(ms) |
6000 |
响应超时时间 |
WebSocket Single Read Sampler
将一个 WebSocket Single Read Sampler 添加到线程组,单击线程组 > 添加 > Sampler > WebSocket Single Read Sampler。接收服务端的消息响应需要使用这个 Sampler。
配置以下参数:
|
配置项 |
示例值 |
说明 |
|
Connection |
use existing connection |
创建新的连接或复用已有连接 |
|
数据类型 |
文本 |
指定数据类型、请求数据和响应超时值 |
|
Response(read)timeout(ms) |
6000 |
响应超时时间 |
WebSocket Close
将一个WebSocket Close Sampler添加到线程组,单击线程组 > 添加 > Sampler > WebSocket Close。
配置以下参数:
|
配置项 |
示例值 |
说明 |
|
关闭状态 |
二进制 |
关闭连接时定义的状态码,数据帧的头两个字节 |
|
响应(读取)超时(毫秒) |
6000 |
/ |
此采样器将关闭现有的 WebSocket 连接,由于是协商关闭,显示原因为 “1000:sampler requested close”。
使用 View Results Tree 查看结果
- 将 View Results Tree 监听器添加到线程组,单击线程组 > 添加 > 监听器 > View Results Tree。
- 运行脚本!
通过 View Results Tree 监听器,检查所有 Sampler 是否都配置正确并符合预期。在该监听器中,如果 Sampler 前面有绿色勾表示运行正常。下面罗列一些截图:
上传到PTS
将调试好的 JMeter 脚本(XML 文件)、JMeter-WebSocketSampler 的 JAR 文件和其他数据文件(如有)上传到 PTS,设置并发数和压测时间,单击保存并压测便可开始压测。
阿里云PTS分享-用性能测试工具JMeter实现基于供应链业务上对于WebSocket 协议的压测的更多相关文章
- jmeter针对websocket协议的压测
之前一直没有接触过websocket协议,所以一直对websocket的压测存在疑惑,在网上参考文章并不断尝试之后,终于有所得:第一次用jmeter的websoket插件,用的ws非加密协议,请求都能 ...
- Jmeter使用Websocket插件测试SingalR,外加还有阿里云PTS的Jmeter原生测试爬坑日志。
题外话:距离我的上一篇博客已经过去7年多了,我实在是个不务正业的程序员,遇到测试方面的东西总想分享一下,因为可用的资料实在太少了(包括国外的资料). 本人不喜欢授人以鱼,所以不会直接给出问题和解决方案 ...
- 五大问题,详解阿里云PTS铂金版
阿里云PTS铂金版,具备强大的分布式压测能力,相比业界产品的云主机发起,该产品更快速,来源更广泛,脉冲能力和流量掌控能力更强.日前,阿里云推出了PTS铂金版尝鲜包,旨在为用户提供高性价比的最佳实践.我 ...
- 1 认识开源性能测试工具jmeter
典型的性能测试工具主要有2个,Load Runner和jmeter.Load Runner是商业化的,Jmeter是开源的.下面我们认识一下开源性能测试工具jmeter. 1.jmeter是什么? A ...
- 探索云网络技术前沿,Sigcomm 2019 阿里云参会分享
Sigcomm 2019简介 一年一度的网络顶级学术峰会Sigcomm于8月20日至22日在北京举行.作为ACM Special Interest Group on Data Communicatio ...
- 性能测试工具 jmeter 分布式压力测试实操
性能测试工具 jmeter 分布式压力测试实操 本文在Non-GUI Mode下进行,准备好三台有jdk环境,linux操作系统,同一局域网测试机器,运行两台slave,一台master机器,进行分布 ...
- 转 1 认识开源性能测试工具jmeter
1 认识开源性能测试工具jmeter 典型的性能测试工具主要有2个,Load Runner和jmeter.Load Runner是商业化的,Jmeter是开源的.下面我们认识一下开源性能测试工具j ...
- 性能测试工具JMeter 基础(六)—— 测试元件: 线程组
线程组的定义: 线程组是测试计划执行的入口,所有的逻辑控制器和取样器都必须在线程组下,其他的元件根据位置的不同作用域是不同的. 线程组是每个线程都是独立运行测试脚本,一个线程组就等于一个用户,通过多个 ...
- 阿里云PolarDB发布重大更新 支持Oracle等数据库一键迁移上云
5月21日,阿里云PolarDB发布重大更新,提供传统数据库一键迁移上云能力,可以帮助企业将线下的MySQL.PostgreSQL和Oracle等数据库轻松上云,最快数小时内迁移完成.据估算,云上成本 ...
随机推荐
- Python单元测试简介及Django中的单元测试
Python单元测试简介及Django中的单元测试 单元测试负责对最小的软件设计单元(模块)进行验证,unittest是Python自带的单元测试框架. 单元测试与功能测试都是日常开发中必不可少的部分 ...
- Unity 2018.3.0f 版本用C#编程启动VS时出现"Visual Studio 2010 Shell 无效的许可证数据"的解决办法
C#编程时,启动VS出现的问题如图: 网上有提到用更改注册表的方式,亲测效果未发生改变,在不确定修改后效果如何时,尽量先将原有的数据备份下来: 本文介绍楼主用另外一种方式解决的: 由于脚本系统默认启动 ...
- 如何使用TVM Pass红外线
如何使用TVM Pass红外线 随着Relay / tir中优化遍数的增加,执行并手动维护其依赖关系变得很棘手.引入了一个基础结构来管理优化过程,将其应用于TVM堆栈中IR的不同层. Relay / ...
- 无监督域对抗算法:ICCV2019论文解析
无监督域对抗算法:ICCV2019论文解析 Drop to Adapt: Learning Discriminative Features for Unsupervised Domain Adapta ...
- Redis系列(四):地理信息
除了Bitmaps和HyperLogLog,Redis还提供了关于地理空间的相关操作,主要是经纬度.Redis提供的地理信息操作是有误差的,最大误差可能会达到5%.Redis提供的Geo的操作如下: ...
- ES5中的类
之前小编对于类和类的基本特征(所谓的封装.继承.多态)理解一直不是很到位,同时在实际项目应用中也用的比较少,今天小编就结合ES5中的基本用法和大家聊聊,希望小伙伴会在这篇文章有属于自己的收获,并能够在 ...
- React开发中react-route-dom使用BrowserRouter部署到服务器上刷新时报404的问题
React项目部署中遇到的问题 react开发中react-route使用BrowserRoute路径在iis服务器上刷新时报404的问题 解决:在发布的项目根目录添加web.config配置文件 在 ...
- .NET Core/.NET5/.NET6 开源项目汇总2:任务调度组件
系列目录 [已更新最新开发文章,点击查看详细] 开源项目是众多组织与个人分享的组件或项目,作者付出的心血我们是无法体会的,所以首先大家要心存感激.尊重.请严格遵守每个项目的开源协议后再使用.尊 ...
- Etcd中linearizable read实现
linearizable 有点疑惑,不确定是现在浏览的版本没开发完全,还是没有按照论文的linearizable来实现. 按照论文所说,在客户端请求的时候,实际上是一个强一致的 exactly onc ...
- Java并发编程中的锁
synchronized 使用synchronized实现同步有2种方式: 同步方法(静态与非静态) 同步代码块 任何Java对象均可作为锁使用,其中,使用的锁对象有以下3种: 静态同步方法中,锁是当 ...