JMeter websocket接口测试

news2024/11/19 17:32:56

前言

在一个网站中,很多数据需要即时更新,比如期货交易类的用户资产。在以前,这种功能的实现一般使用http轮询,即客户端用定时任务每隔一段时间向服务器发送查询请求来获取最新值。这种方式的弊端显而易见:

有可能造成数据更新不及时,如果前端轮询频率为5s,也许数据在这5s内已经更新多次了。

有可能对数据库造成额外压力,例如一个用户资产长时间不变化,但客户端还是要定时去查询,这种无意义查询占比相当高,对服务器造成不必要的压力。

要经过请求和响应两次交互,增加了耗时,而且http请求可能携带大量的header信息,增加网络带宽占用

HTML5 开始提供的一种在单个 TCP 连接上进行全双工通讯的协议-WebSocket,很好地解决了http轮询的弊端。

在 WebSocket API 中,浏览器和服务器只需要做一个握手的动作,然后,浏览器和服务器之间就形成了一条快速通道。两者之间就直接可以数据互相传送。

也就是说,http轮询机制,主动权完全在客户端,而WebSocket机制中,主动权可以交给服务端,数据推送可以更精确,包括何时推送(定时推送还是更新即推送),推送什么数据。

准备工作
JMeter可以非常便利地进行WebSocket接口测试,但需要引入下列依赖:

jetty-http

jetty-io

jetty-util

websocket-api

websocket-client

websweocket-common

相关依赖下载:

https://pan.baidu.com/s/1PTOyTBzmOwLPNhxB-TxR7g ,提取码:uq25

下面内容基于JMeter5.1.1

将相关jar包放入JMeter安装目录的/lib/etc中,重启JMeter。在取样器中,可以看到比之前多了websweocket相关的取样器。
在这里插入图片描述

脚本编写
在编写脚本之前,先要搞清楚推送服务的逻辑,它的逻辑是这样的:

首先,客户端向服务端发送请求,建立连接

建立连接后,客户端需要定时向服务端发送ping-pong消息,维持心跳

客户端发送主动断开连接的请求,服务端断开该连接

建立连接,使用【WebSocket request-response Sampler】,顾名思义,这个取样器既能发送请求也能接收响应。
在这里插入图片描述

说明一下各项内容:

Connection:有use existing connection和setup new connection两种模式,前者是使用已有连接,即上一个websocket请求所建立的连接通道,选择后Server URL全置灰只读不可操作。后者指新建连接通道。

Server URL:ws协议和wss(加密的websocket)可选,sever name or IP(服务器地址)、Port(端口号)、Path(路径)、Connection timeout(连接超时时间)这些含义也很明了。

Data:发送数据,可以选择Text(文本,包括JSON)和Binary(二进制)形式,也可以通过勾选Read request data from file来从文件中获取data。

这个请求要与连接请求是同一个线程,并且要定时运行,因此设计脚本结构如下:
在这里插入图片描述

注意两点:

1.想要建立3000个连接的话,一定是将【线程数】设置为3000,循环次数设置为1,而不是相反,这是许多人容易弄混淆的。

2.【Ramp-up 时间】这个参数是全部线程启动的时间,如果想给服务器较大的瞬时压力,就把时间设置短一些。经过实测,这个时间太短的话,最终成功建立的连接会明显少于设置的【线程数】,所以一般设置长一点。

一般的websocket推送服务,会设计定时心跳检测机制,也就是客户端定时向服务端发送一条特定的消息,这样服务端就会保持这个连接,否则的话,这个客户端就被服务端判定为不活跃而被断掉连接。因此,为了让我们的脚本持续跑下去,就需要加入心跳检测请求。

因为线程循环次数是1次(多次的话,就是一个线程反复建立连接了),因此我们要把【心跳检测】放到一个循环控制器中。在这里插入图片描述

而【固定定时器】的作用,就是控制【心跳检测】发送的频率:
在这里插入图片描述心跳检测:
在这里插入图片描述

尤其要注意两点:

1.Connection项一定要选择 use existing connection,表示使用该线程已经建立的连接,否则就重新创建连接了。

2.Request data 根据服务端的实现而定。 

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

docker仓库,搭建registry仓库

什么是仓库 docker仓库是用来包含镜像的位置,docker提供一个注册服务器registry来保存多个仓库,每个仓库又可以包含多个具备不同的镜像。docker运行中使用的默认仓库是docker hub公共仓库 docker hubdocker push username/busybox:latest docker hub是docker公司维护的公共仓…

java项目之电影院售票网站(ssm+mysql+jsp)

风定落花生,歌声逐流水,大家好我是风歌,混迹在java圈的辛苦码农。今天要和大家聊的是一款基于ssm的电影院售票网站。技术交流和部署相关看文章末尾! 开发环境: 后端: 开发语言:Java 框架&a…

pytest 禁用警告信息(忽略警告信息输出)

如图示例代码,提示test_001这个case 存在警告 新增pytest.ini 配置文件 [pytest] filterwarnings errorignore::UserWarning

MIT 6.S081 Lab 11 -- NetWork -- 上

MIT 6.S081 Lab 11 -- NetWork -- 上 引言Network背景你的工作(hard)提示 Lab 解析E1000 网卡重点内容官方手册摘录3.2 Packet Reception3.3 Packet Transmission 小结 引言 本文为 MIT 6.S081 2020 操作系统 实验十一解析。 MIT 6.S081课程前置基础参考: 基于RISC-V搭建操作…

CPU之IPC相关

什么是IPC? IPCInstructionUnhaltedCyclethread Instruction,即某个固定时间段内系统完成的指令数,考虑到系统中任何形式的应用都是由指令完成,且在不修改应用(代码逻辑)的前提下完成固定的任务所需的指令…

关于godot游戏引擎中常见的小数除以大数结果为0的问题

这种问题常见于求百分比的需求。 如:5/100 , 6/120 ,前面的数小,后面的数字大 这种情况下,可以使用5.0/100 来进行解决,或者 5.0/100.0 或者6.0 / 120 或者 6.0/120.0 关于这个细节,余数为0…

基于SpringBoot+vue的心灵治愈交流平台设计与实现

博主介绍: 大家好,我是一名在Java圈混迹十余年的程序员,精通Java编程语言,同时也熟练掌握微信小程序、Python和Android等技术,能够为大家提供全方位的技术支持和交流。 我擅长在JavaWeb、SSH、SSM、SpringBoot等框架…

如何选择企业加密软件? 如何选择一款最好用的企业加密软件?

在当今信息时代,企业面临着越来越多的数据安全威胁。为了保护企业的敏感信息和数据资产,选择一款好用的企业加密软件至关重要。本文将从功能、安全性、用户体验和市场口碑等方面,为您介绍几款备受推崇的企业加密软件,帮助您选择适…

探索字符与字符串:基本库函数的使用(一)

目录 前言 函数介绍 strlen strcpy strcat strcmp strncpy strncat strncmp strstr strtok 总结 前言 感谢您阅读我的博客。在本期文章中,我将为您介绍一些常用的字符和字符串处理函数,并提供一些注意事项和实现方法。 本期我们将会对以下库函数进行重点…

前端框架Layui实现动态表格效果用户管理实例(对表格进行CRUD操作-附源码)

目录 一、前言 1.什么是表格 2.表格的使用范围 二、案例实现 1.案例分析 ①根据需求找到文档源码 ②查询结果在实体中没有该属性 2.dao层编写 ①BaseDao工具类 ②UserDao编写 3.Servlet编写 ①R工具类的介绍 ②Useraction编写 4.jsp页面搭建 ①userManage.jsp ②…

如何清除视频和照片中水印的几种方式

文章目录 如何清除视频和照片中水印的几种方式一、清除视频中水印的几种方式1、截除水印区域2、模糊水印区域3、使用人工智能技术工具3.1 通过【iMyFone-MarkGo[^1]】消除水印3.2 通过【嗨格式视频转换器[^2]】消除水印3.3 通过【PR 视频编辑器】消除水印3.4 通过 【美图秀秀】…

从Vue2到Vue3【零】——Vue3简介及创建

系列文章目录 内容链接从Vue2到Vue3【零】Vue3简介及创建 文章目录 系列文章目录前言一、Vue3的发布带来了什么1.1 性能提升1.2 源码升级1.3 支持TypeScript1.4 新特性 二、创建Vue3.0工程2.1 什么是Vite2.2 利用Vite创建Vue3.0工程2.3 利用vue-cli脚手架创建Vue3.0工程 三、 …

iPad远控Windows解决方案

最近入手了一台iPad,但我不想让它沦为爱奇艺的工具,遂考虑如何在iPad上获得桌面级Windows的生产力。主要还是之前背着电脑出远门太累了,这也是促成我买iPad的重要因素。 一种方案就是通过远程控制,在iPad上远程操作自己的电脑&am…

【技能实训】DMS数据挖掘项目-Day10

文章目录 任务10【任务10.1.1】安装Mysql数据库,创建项目所需的数据库dms_学号、表及用户名、密码等,并搭建数据访问的基础环境(JDBC)【任务10.1.2】加载JDBC包【任务10.1.3】编写mysql.properties文件【任务10.1.4】编写Config类【任务10.2】编写访问数…

LinkedBlockingQueue 原理

目录 基本的入队出队 加锁分析 put 操作 take 操作 性能比较 LinkedBlockingQueue 是 Java 中用于实现线程安全队列的类。它是一个基于链接节点的阻塞队列,并且在队列为空时,获取元素的线程会阻塞;当队列满时,存储元素的线程会阻塞。Link…

re学习(16)[网鼎杯 2020 青龙组]singal1(魔法库:angr)

下载地址: BUUCTF在线评测 angr用法参考视频: angr符号执行练习 00_angr_find_哔哩哔哩_bilibili 本题其实也是可以通过静态分析得到的,详细地址请观看:【CTF&WP&BUUCTF】网鼎杯2020青龙组Singal_哔哩哔哩_bilibili …

Spring Security OAuth 2.0

1 概念 OAuth 2.0 到底是什么呢?我们先从字面上来分析下。OAuth 2.0 一词中的字母 “O” 是 Open 的简称,表示 “开放” , “Auth” 表示 “授权”,连在一起就表示 “开放授权”。 OAuth 2.0是一种授权框架,提供了一…

Linux下做性能分析5:Amdahl模型

[前言] 前一个Blog我们使用了一个叫cs的程序作为例子,那个程序是我为了举例子临时写的,这个代码我共享在这里:GitHub - nekin2012/btest。后面我要再举例子的话,就都加到这个地方来。由于这些代码没有经过最基本的软件质量保证工…

Visual Studio 自定义的颜色字体不生效

问题描述: 1、dll1中引用第三方库的类不识别,颜色黑白,自定义颜色不生效;定义的是结构体 2、在dll2引用另一个dll1中的结构体。结构体不识别,今天成员函数cpp中自定义颜色不生效。 问题解决方式: 全部清…

基于linux下的高并发服务器开发(第一章)- GDB调试(4)1.16

05 / GDB命令-调试命令 在第8行打上断点和bubbleSort打上断点 在第16行也打上断点,然后i b查看断点 执行run,停在第一个断点,这一行还没有执行 接下来按c继续执行,停在了bubbleSort list bubble.cpp:bubbleSort