当前位置: 首页 > news >正文

Jmeter对websocket进行测试

JMeterWebSocketSampler-1.0.2-SNAPSHOT.jar下载

公司使用websocket比较奇怪,需要带认证信息进行长连接,通过websocket插件是请求失败,如下图,后面通过代码实现随再打包jar包完成websocket测试

本地实现代码如下:

package com.fangdd.socket;import io.socket.client.IO;
import io.socket.client.Socket;
import io.socket.emitter.Emitter;
import java.net.URI;
import java.net.URISyntaxException;
import java.io.IOException;public class SocketIOExample {public static void main(String[] args) throws URISyntaxException, IOException {IO.Options options = new IO.Options();        options.query="tid=wwwww1231&uid=12352547&ticket=mxLqAgCaq7R";Socket socket = IO.socket(URI.create("http://localhost:9092"), options);socket.on(Socket.EVENT_CONNECT, new Emitter.Listener() {@Overridepublic void call(Object... args) {System.out.println("connect");// 如果需要发消息参考此代码 连接成功后发送具有body的自定义事件,公司暂不需要注释此代码
//                JSONObject body = new JSONObject();
//                try {
//                    body.put("message", "Hello, Server!");
//                } catch (JSONException e) {
//                    e.printStackTrace();
//                }
//
//                // 发送事件到服务器--需要与开发确认事件(customEvent)
//                socket.emit("customEvent", body);}});socket.on(Socket.EVENT_CONNECT_ERROR, new Emitter.Listener() {@Overridepublic void call(Object... args) {System.out.println("connect_error: " + args[0]);}});socket.on(Socket.EVENT_DISCONNECT, new Emitter.Listener() {@Overridepublic void call(Object... args) {System.out.println("disconnect due to: " + args[0]);}});socket.connect();// 监听服务器返回的自定义事件----需要与开发确认监听事件(messageEvent)socket.on("messageEvent", new Emitter.Listener() {@Overridepublic void call(Object... args) {// 处理服务器返回的数据,如果是json需要数据处理//JSONObject response = (JSONObject) args[0];System.out.println("Server response: " + args[0].toString());}});}}

显示如下:

 开发代码打包到lib/ext目录,通过Jmeter对本地方法进行测试,具体实现代码如下:

底层实现代码:


import java.net.URI;
import io.socket.client.IO;
import io.socket.client.Socket;
import io.socket.emitter.Emitter;public class NomalTools {	public static void  IOsocket(String url,String tid) {IO.Options options = new IO.Options();        options.query="tid="+tid+"&uid=12352547&ticket=mxLqA";Socket socket = IO.socket(URI.create(url), options);socket.on(Socket.EVENT_CONNECT, new Emitter.Listener() {@Overridepublic void call(Object... args) {System.out.println("connect");}});socket.on(Socket.EVENT_CONNECT_ERROR, new Emitter.Listener() {@Overridepublic void call(Object... args) {System.out.println("connect_error: " + args[0]);}});socket.on(Socket.EVENT_DISCONNECT, new Emitter.Listener() {@Overridepublic void call(Object... args) {System.out.println("disconnect due to: " + args[0]);}});socket.connect();// 监听服务器返回的自定义事件socket.on("messageEvent", new Emitter.Listener() {@Overridepublic void call(Object... args) {// 处理服务器返回的数据
//                JSONObject response = (JSONObject) args[0];System.out.println("Server response: " + args[0].toString());}});//10秒后自动关闭连接
//        try {
//			Thread.sleep(10000);
//			System.out.println("10秒自动关闭连接");
//		} catch (InterruptedException e) {
//			e.printStackTrace();
//		}
//        socket.close();}}

Jmeter封装代码:


import org.apache.jmeter.config.Arguments;
import org.apache.jmeter.protocol.java.sampler.AbstractJavaSamplerClient;
import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;
import org.apache.jmeter.samplers.SampleResult;
import Common.NomalTools;public class socketTest extends AbstractJavaSamplerClient{private NomalTools nomalTools;private String url;private String tid;private static long start = 0;private static long end = 0;public Arguments getDefaultParameters() {Arguments params = new Arguments();params.addArgument("url", "");params.addArgument("tid", "");return params;}//每个线程测试前执行一次,做一些初始化工作;public void setupTest(JavaSamplerContext arg0) {nomalTools=new  NomalTools();url = arg0.getParameter("url");tid = arg0.getParameter("tid");start = System.currentTimeMillis();}public SampleResult runTest(JavaSamplerContext arg0) {SampleResult sr = new SampleResult();sr.setSamplerData("请求参数num1:"+url+"\n请求参数num2:"+tid);try {sr.sampleStart();// jmeter 开始统计响应时间标记// 通过下面的操作就可以将被测方法的响应输出到Jmeter的察看结果树中的响应数据里面了。nomalTools.IOsocket(url, tid);            
//             System.out.println(resultData);sr.setSuccessful(true);} catch (Throwable e) {sr.setSuccessful(false);e.printStackTrace();} finally {sr.sampleEnd();// jmeter 结束统计响应时间标记}return sr;}//测试结束时调用;public void teardownTest(JavaSamplerContext arg0) {end = System.currentTimeMillis();// 总体耗时System.err.println("cost time:" + (end - start) + "毫秒");}public static void main(String[] args) {Arguments params = new Arguments(); params.addArgument("url", "http://localhost:9092");//设置参数,并赋予默认值1 params.addArgument("tid", "qwe123");//设置参数,并赋予默认值2JavaSamplerContext arg0 = new JavaSamplerContext(params); socketTest test = new socketTest(); test.setupTest(arg0); test.runTest(arg0);test.teardownTest(arg0); }
}

集成到Jmeter的效果:

 

 参考文献:

【JMeter】Jmeter进行webSocket接口测试_千重萌的博客-CSDN博客

https://github.com/socketio/socket.io-client-java/blob/main/src/test/java/io/socket/Fiddle.java

相关文章:

Jmeter对websocket进行测试

JMeterWebSocketSampler-1.0.2-SNAPSHOT.jar下载 公司使用websocket比较奇怪,需要带认证信息进行长连接,通过websocket插件是请求失败,如下图,后面通过代码实现随再打包jar包完成websocket测试 本地实现代码如下: pa…...

从2023年世界机器人大会发现机器人新趋势

机器人零部件为何成2023年世界机器人大会关注热门? 在原先,机器人的三大核心零部件是控制系统中的控制器、驱动系统中的伺服电机和机械系统中的精密减速器。如今,机器人的主体框架结构已经落实,更多机器人已经开始深入到各类场景中…...

Kafka单节点部署

🎈 作者:互联网-小啊宇 🎈 简介: CSDN 运维领域创作者、阿里云专家博主。目前从事 Kubernetes运维相关工作,擅长Linux系统运维、开源监控软件维护、Kubernetes容器技术、CI/CD持续集成、自动化运维、开源软件部署维护…...

生成式AI和大语言模型 Generative AI LLMs

在“使用大型语言模型(LLMs)的生成性AI”中,您将学习生成性AI的基本工作原理,以及如何在实际应用中部署它。 通过参加这门课程,您将学会: 深入了解生成性AI,描述基于LLM的典型生成性AI生命周期中的关键步骤&#xff…...

Obsidian 入门使用手册

文章目录 一、Obsidian 入门1.1 什么是 Obsidian1.2 安装 Obsidian 二、Obsidian 配置2.1 创建第一个笔记2.2 设置界面语言使用中文2.3 主题 三、小结 一、Obsidian 入门 1.1 什么是 Obsidian Obsidian 是一款基于 Markdown 语法编辑的笔记软件。与传统的 Markdown 软件不同的…...

GuLi商城-前端基础Vue指令-单向绑定双向绑定

什么是指令? 指令 (Directives) 是带有 v- 前缀的特殊特性。 指令特性的预期值是:单个 JavaScript 表达式。 指令的职责是,当表达式的值改变时,将其产生的连带影响,响应式地作用于DOM 例如我们在入门案例中的 v-on,代表绑定事…...

前端(十三)——JavaScript 闭包的奥秘与高级用法探索

😶博主:小猫娃来啦 😶文章核心:深入理解 JavaScript 中的闭包 文章目录 不理解闭包?这玩意很难?闭包的定义与原理闭包是什么创建一个闭包 闭包的应用场景闭包与作用域闭包与作用域之间的关系全局作用域、函…...

面试-快速学习计算机网络-UDP/TCP

1. OSI四层和七层映射 区别: 应用层,表示层,会话层合并为了应用层数据链路层和物理层合并为了网络接口层 2. TCP和UDP的区别? 总结: 1 . TCP 向上层提供面向连接的可靠服务 ,UDP 向上层提供无连接不可靠服…...

爱校对如何帮助企业和博客主提高在线可见性?

在数字化时代,内容质量已经成为增强在线曝光率的关键因素。企业和博客主经常面临挑战,如何制作高质量、无误的内容以吸引更多的在线用户。此文将详细分析“爱校对”如何帮助用户优化内容,从而提高在线可见性。 1.互联网内容的挑战 搜索引擎…...

MATLAB中xlsread函数用法

目录 语法 说明 示例 将工作表读取到数值矩阵 读取元胞的范围 读取列 请求数值、文本和原始数据 对工作表执行函数 请求自定义输出 局限性 xlsread函数的功能是读取Microsoft Excel 电子表格文件 语法 num xlsread(filename) num xlsread(filename,sheet) num x…...

Prisma.js:JavaScript中的基于代码的ORM

​Prisma是一种流行的用于服务器端JavaScript和TypeScript的数据映射层(ORM)。它的核心目的是简化和自动化数据在存储和应用程序代码之间的传输方式。Prisma支持各种数据存储,并为数据持久化提供了一个强大而灵活的抽象层。通过这个基于代码的…...

解决问题:在cocos create中如何从b文件调用到a文件里用CC.resource.load动态加载的图集

目录 1.在a文件中定义一个公共的变量存储动态加载的图集 2.在a.js中添加一个静态方法,返回动态加载的图集 3.在b.js中使用a.js中定义的静态方法获取图集,并使用它 假设a文件中用CC.resource.load动态加载了一张图集,b文件需要使用这张图集&am…...

分布式 - 消息队列Kafka:Kafka 消费者消费位移的提交方式

文章目录 1. 自动提交消费位移2. 自动提交消费位移存在的问题?3. 手动提交消费位移1. 同步提交消费位移2. 异步提交消费位移3. 同步和异步组合提交消费位移4. 提交特定的消费位移5. 按分区提交消费位移 4. 消费者查找不到消费位移时怎么办?5. 如何从特定…...

如何利用 ChatGPT 进行自动数据清理和预处理

推荐:使用 NSDT场景编辑器助你快速搭建可二次编辑的3D应用场景 ChatGPT 已经成为一把可用于多种应用的瑞士军刀,并且有大量的空间将 ChatGPT 集成到数据科学工作流程中。 如果您曾经在真实数据集上训练过机器学习模型,您就会知道数据清理和预…...

PHP“牵手”淘宝商品评论数据采集方法,淘宝API接口申请指南

淘宝天猫商品评论数据接口 API 是开放平台提供的一种 API 接口,它可以帮助开发者获取商品的详细信息,包括商品的标题、描述、图片等信息。在电商平台的开发中,详情接口API是非常常用的 API,因此本文将详细介绍详情接口 API 的使用…...

你更喜欢哪一个:VueJS 还是 ReactJS?

观点列表: 1、如果你想在 HTML 中使用 JS,请使用 Vue; 如果你想在 JS 中使用 HTML,请使用 React。 当然,如果您希望在 JS 中使用 HTML,请将 Vue 与 JSX 结合使用。 2、Svelte:我喜欢它&#…...

PyTorch学习笔记(十六)——利用GPU训练

一、方式一 网络模型、损失函数、数据(包括输入、标注) 找到以上三种变量,调用它们的.cuda(),再返回即可 if torch.cuda.is_available():mynn mynn.cuda() if torch.cuda.is_available():loss_function loss_function.cuda(…...

【实战】十一、看板页面及任务组页面开发(三) —— React17+React Hook+TS4 最佳实践,仿 Jira 企业级项目(二十五)

文章目录 一、项目起航:项目初始化与配置二、React 与 Hook 应用:实现项目列表三、TS 应用:JS神助攻 - 强类型四、JWT、用户认证与异步请求五、CSS 其实很简单 - 用 CSS-in-JS 添加样式六、用户体验优化 - 加载中和错误状态处理七、Hook&…...

金额千位符自定义指令

自定义指令文件 moneyFormat.js /*** v-money 金额千分位转换*/export default {inserted: inputFormatter({// 格式化函数formatter(num, util) {if(num null || num || num undefined || typeof(num) undefined){return }if(util 万元 || util 万){return formatMone…...

请不要用 JSON 作为配置文件,使用JSON做配置文件的缺点

我最近关注到有的项目使用JSON作为配置文件。我觉得这不是个好主意。 这不是JSON的设计目的,因此也不是它擅长的。JSON旨在成为一种“轻量级数据交换格式”,并声称它“易于人类读写”和“易于机器解析和生成”。 作为一种数据交换格式,JSON是…...

Qwen3.5-4B-Claude推理模型在算法面试辅导中的实战:分步推导+代码示例生成

Qwen3.5-4B-Claude推理模型在算法面试辅导中的实战:分步推导代码示例生成 1. 模型介绍与核心能力 Qwen3.5-4B-Claude-4.6-Opus-Reasoning-Distilled-GGUF是一个专门针对推理任务优化的AI模型,它基于Qwen3.5-4B架构,通过蒸馏训练强化了结构化…...

OpenClaw效率对比:GLM-4.7-Flash与云端API实测数据

OpenClaw效率对比:GLM-4.7-Flash与云端API实测数据 1. 测试背景与动机 上周在优化个人自动化工作流时,我遇到了一个实际选择难题:应该用本地部署的GLM-4.7-Flash模型,还是继续使用云端API服务?这个问题看似简单&…...

OpenClaw数据安全实践:Qwen3-32B+RTX4090D本地化处理敏感财报

OpenClaw数据安全实践:Qwen3-32BRTX4090D本地化处理敏感财报 1. 为什么金融从业者需要本地化AI处理 去年我在帮一家私募基金做季度财报分析时,遇到了一个尴尬场景:当我把客户PDF财报上传到某公有云AI平台提取关键指标后,第二天就…...

Simulink频域分析避坑指南:如何准确获取谐振频率(含MATLAB代码)

Simulink频域分析实战:谐振频率精准提取方法论与MATLAB实现 在控制系统设计与分析领域,频域特性是评估系统动态性能的核心指标之一。而谐振频率作为频域响应中的关键特征点,直接影响着系统的稳定性和响应速度。然而,许多工程师在使…...

WuliArt Qwen-Image Turbo新手必看:Web界面操作,一键保存高清图片

WuliArt Qwen-Image Turbo新手必看:Web界面操作,一键保存高清图片 1. 快速认识这个AI绘图神器 如果你正在寻找一个能在自己电脑上快速生成高质量图片的AI工具,WuliArt Qwen-Image Turbo绝对值得一试。这个工具最大的特点就是"快"…...

2003-2024年上市公司政府补助数据+stata代码

政府补助数据2003-2024 范围:2003 - 2024年,全部A股上市公司 原始数据来源于国泰安,有计算代码和原始数据,可复现出计算结果 政府补贴,政府补助,政府津贴,2024数据全 计算结果:d…...

Java Web 新冠物资管理系统系统源码-SpringBoot2+Vue3+MyBatis-Plus+MySQL8.0【含文档】

摘要 新冠疫情的爆发对全球公共卫生体系提出了严峻挑战,物资管理成为疫情防控中的关键环节。传统物资管理方式依赖人工操作,效率低下且易出错,难以应对突发公共卫生事件中的大规模物资调配需求。为解决这一问题,新冠物资管理系统应…...

OpenCore Legacy Patcher终极指南:让你的老Mac焕发新生,体验最新macOS

OpenCore Legacy Patcher终极指南:让你的老Mac焕发新生,体验最新macOS 【免费下载链接】OpenCore-Legacy-Patcher 体验与之前一样的macOS 项目地址: https://gitcode.com/GitHub_Trending/op/OpenCore-Legacy-Patcher 你是否还在为老旧的Mac无法升…...

选吉他不踩坑:合板、单板、全单材质深度解析,新手看懂这篇就够

对于新手来说,挑选吉他时最容易被“合板”“单板”“全单”这些专业术语绕晕。其实,这三者的核心区别在于木材的构成方式,而木材直接决定了吉他的音色、手感以及使用寿命。今天我们就抛开品牌干扰,纯科普这三种材质的底层逻辑&…...

8_Harness驾驭工程实践:企业级落地与OpenAI案例解析

8_Harness驾驭工程实践:企业级落地与OpenAI案例解析 关键字: 企业级落地、OpenAI、Ryan Lopopolo、Codex、Harness Engineering、Citi Bank、Ancestry、Ulta Beauty、Agent-First开发、部署策略、自托管、成本优化、迁移路径、最佳实践、0行手写代码、百…...