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

 

本次测试案例主要是分享如何使用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性能测试就算完成了。

测试过程总结

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

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

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

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

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

最后: 下方这份完整的软件测试视频教程已经整理上传完成,需要的朋友们可以自行领取【保证100%免费】

在这里插入图片描述

软件测试面试文档

我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。在这里插入图片描述

在这里插入图片描述

行动吧,在路上总比一直观望的要好,未来的你肯定会感谢现在拼搏的自己!如果想学习提升找不到资料,没人答疑解惑时,请及时加入群:1150305204,里面有各种测试开发资料和技术可以一起交流哦。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/340872.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

磁盘的分区与文件系统的认识

磁盘的认识 了解磁盘的结构: 1、盘片 硬盘首先会有多个盘片构成,类似很多个独立的光盘合并在一起,每个盘片都有2个面,每个盘片都有一个对应的磁头,我们的磁头横移和盘面的旋转就可以读写到盘面的每一个位置&#xff0c…

基于springboot+vue的教师工作量管理系统(前后端分离)

博主主页:猫头鹰源码 博主简介:Java领域优质创作者、CSDN博客专家、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战 主要内容:毕业设计(Javaweb项目|小程序等)、简历模板、学习资料、面试题库、技术咨询 文末联系获取 项目背景…

最简单解决:error: reference to ‘***‘ is ambiguous

目录 错误 错误原因 解决办法 错误 6_38.cpp: In function void TowerofHanoi(int, int, int, int): 6_38.cpp:17:9: error: reference to count is ambiguous count; ^ 6_38.cpp:3:5: note: candidates are: int count int count 0; ^ 错误原因…

HCIA——24FTP 的工作原理、功能、TFTP、控制连接、数据连接

学习目标: 计算机网络 1.掌握计算机网络的基本概念、基本原理和基本方法。 2.掌握计算机网络的体系结构和典型网络协议,了解典型网络设备的组成和特点,理解典型网络设备的工作原理。 3.能够运用计算机网络的基本概念、基本原理和基本方法进行…

SpringBoot进阶

SpringBoot解析 SpringBoot起步依赖 SpringBoot在配置上相比Spring要简单许多,其核心在于starter起步依赖。在使用SpringBoot来搭建一个项目时,只需要引入官方提供的starter起步依赖就可以直接使用,免去了各种配置。因为起步依赖可以引入某…

笔试面试题——二叉树进阶(二)

📘北尘_:个人主页 🌎个人专栏:《Linux操作系统》《经典算法试题 》《C》 《数据结构与算法》 ☀️走在路上,不忘来时的初心 文章目录 一、二叉搜索树与双向链表1、题目讲解2、思路讲解递归展开图3、代码实现 二、从前序遍历和中序…

Flutter轮播图Banner

使用插件:flutter_swiper 实现轮播图 pubspec.yaml 增加 :flutter_swiper : ^lastest_version 在项目文件夹下打开命令行执行:flutter packages get 安装插件 home_page.dart中使用swiper 程序运行:先启动虚拟设备后,执行命令f…

【征服redis16】收官-redis缓存一致性问题解决方案

今天我们来写redis最后一篇:redis作为缓存时如何与数据库实现数据一致的问题。 最近看redis看得有点麻了,这篇就简单描述吧 目录 1.什么是缓存与数据库一致性问题 1.1 缓存一致性的概念 1.2 缓存不一致的场景 2.缓存不一致的解决思路 1.什么是缓存…

Pandas数据重采样

数据重采样 时间数据由一个频率转换到另一个频率 降采样(如D到M)升采样(如M到D) 方法:调用resample 降采样举例 import matplotlib.pyplot as plt import numpy as np import pandas as pd import datetime as dtrng…

git内部原理

git内部原理 介绍目录结构说明 介绍 项目的本地仓库中,包含一个隐藏的.git目录,其不同的文件产生都源于git的各种不同命令造成,文件目录如下所示: 目录结构说明 上面最核心重要的为object目录,目录最主要有三个对象…

【好用的AI工具】推荐测试人在用的Kimi Chat

一、功能介绍 发网址链接文章解析PDF文件分析,可以整理分析文章丢简历、给出面试问题聊天等 Kimi Chat 二、对于测试人带来的帮助 2.1 面试问题总结 问题一:Session和Cookie的区别 seeion 和 cookie 是两种不同的数据存储机制,它们在Web开…

C++ 并发编程 | 线程的状态

一、线程的状态 1、线程的状态 C线程有五种不同的状态:创建、就绪、运行、阻塞、终止。掌握线程状态可帮助我们跟踪程序的执行过程,并解决潜在的竞态条件和死锁问题,掌握它对于编写可靠和高效的多线程应用程序至关重要。下面分别介绍这几种状…

利用Intersection Observer实现图片懒加载性能优化

Intersection Observer是浏览器所提供的一个 Javascript API,用于异步的检测目标元素以及祖先或者是顶级的文档视窗的交叉状态 这句话的意思就是: 我们可以看的图片当中,绿色的 target element(目标元素)&#xff0c…

1.12马原总复习TOTAL

(价值形式)不变资本、可变资本 不变资本是以生产资料形态存在的资本,通过具体劳动转移到新产品中,价值量不会大于它原本的价值量; 可变资本是用来购买劳动力的资本,产生剩余价值 可变资本里,…

搭建一个简单的Spring Demo

要学习Spring 源码,一个是从Spring GitHub 上去down源码,然后倒入IDEA编译,但这种方法费时费力,如果你不需要对Spring 源码进行修改后,再编译的话,直接搭建一个Spring Demo 的Maven项目,引入Spr…

官宣首批 CESS 全球大使,更多席位邀您报名参与!

CESS(Cumulus Encrypted Storage System)很荣幸地向大家宣布「CESS 全球大使计划」的首批入选大使! CESS 全球大使计划旨在汇聚全球对区块链技术充满热情、愿意为 CESS 生态做出贡献的建设者。该计划专注于提升社区知名度和影响力&#xff0c…

数据库复试—关系数据库标准语言SQL

数据库复试—关系数据库标准语言SQL SQL:结构化查询语言 以教材中的学生-课程数据库为例进行SQL基础语法的复习 数据库实验环境选择SQLServer 11 关系模式 学生表Student(Sno,Sname,Ssex,Sage,Sdept) 课程表Course(Cno,Cname,Cpno,Ccredit) 学生选课表SC&#xf…

2526. 随机数生成器(BSGS,推导)

题目路径: https://www.acwing.com/problem/content/2528/ 思路:

WPF 在DataGrid使用过程中,如果单击某一行理论就会选中哪一行,实际不能选中。DataGrid空白格不能选择行

wpf 在DataGrid使用过程中,如果单击某一行理论就会选中哪一行,但是单击的点刚好这列没有值、内容为空时,单击了也没有选中这一行。如果这列有值就容易选中这一行,这是为什么,如何解决? 确保列模板中即使没有…

Yolov8不废话!参考手册!

Yolov8使用 yolo taskdetect modetrain modelyolov8n.pt args...classify predict yolov8n-cls.yaml args...segment val yolov8n-seg.yaml args...export yolov8n.pt formatonnx args...使用Ultralytics YOLO进行模型训练 …