jmeter请求Sse长链接接口

news2024/11/28 14:37:19

文章目录

    • 1.背景
      • 1.1 什么是SSE接口
    • 2. **解决思路-尝试方法⬇️:**
      • 2.1 🏳️‍🌈 **postman-sse请求结果**
      • 2.2 **⚡ jmeter报错**
      • 2.3 ☀️**封装此SSE接口**
        • 2.3.1 ❌httpclient
        • 2.3.2 ❌HttpURLConnection
        • 2.3.3 ✔️okhttp3
    • 3. jmeter-beanshell实现
      • 3.1 jmeter结构
      • 3.2 beanshell说明
        • 3.2.1 jar包
        • 3.2.2 脚本
        • 3.2.3 结果正确性查看

1.背景

1️⃣ 我要压测一个SSE接口✔️
2️⃣ 我压测的接口,用jmeter普通请求,它成功不了 ❗

1.1 什么是SSE接口

SSE是HTML5新增的功能,全称为Server-Sent Events。它可以允许服务推送数据到客户端。SSE在本质上就与之前的长轮询、短轮询不同,虽然都是基于http协议的,但是轮询需要客户端先发送请求。而SSE最大的特点就是不需要客户端发送请求,可以实现只要服务器端数据有更新,就可以马上发送到客户端。

---------------以上为摘抄
实不相瞒,我不知道原理。但我要搞定进行压测!!

其实我管它是啥啊,我作为一个普通打工仔,我只知道我的需求是什么,我的目标是什么,我能完成任务就好啦!

2. 解决思路-尝试方法⬇️:

1️⃣ jmeter ❌
2️⃣ postman
3️⃣ loadrunner ❌
4️⃣ apifox❌
5️⃣ HttpURLConnection❌
6️⃣ httpclient❌
7️⃣ okhttp3
不管三七二十一,办法总比困难多

2.1 🏳️‍🌈 postman-sse请求结果

从下图⬇️结果可以看出,它与普通的链接请求返回结果有差异😀,国内很多工具都是抄了postman,不点名了,同样的东西本土化后,有个最大的特点:繁杂,你也可以说它功能细节做了很多吧😅。
在这里插入图片描述

2.2 ⚡ jmeter报错

最开始,我尝试使用jmeter,添加http请求采样进行测试,结果调试不成功,以下报错信息:
org.apache.http.ConnectionClosedException: Premature end of chunk coded message body: closing chunk expected
网上找了很多方法,最靠谱的应该就是:建议我换个工具做SSE链接压测,虽然没告诉我用什么工具可以,但至少告诉我jmeter不行🤣。

2.3 ☀️封装此SSE接口

这一点被我纳入解决方案中,是因为这个接口,只是希望有并发,想要大量数据涌入,看服务器稳定情况 😃
如果说封装一次,有网络消耗,影响性能的,大可不必有此担心

2.3.1 ❌httpclient

不行

2.3.2 ❌HttpURLConnection

不行

2.3.3 ✔️okhttp3


代码演示:
👉 pom.xml

<dependency>
       <groupId>com.squareup.okhttp3</groupId>
       <artifactId>okhttp</artifactId>
       <version>3.14.2</version>
</dependency>

👉 java

public  int doget(String url,String header1,String header2,String header3){
        OkHttpClient client = new OkHttpClient().newBuilder()
                .build();
        MediaType mediaType = MediaType.parse("application/json");
        RequestBody body = RequestBody.create(mediaType, "");
        Request request = new Request.Builder()
                .url(url)
                .get()
                .addHeader("Content-Type", header1)
                .addHeader("x-token", header2)
                .addHeader("uid", header3)
                .build();
        Response response =null;
        try {
            response = client.newCall(request).execute();

        }catch (Exception e){
            e.printStackTrace();
        }
        System.out.println(response.code());
        return response.code();
    }

👉 controller

@RestController
public class ChatController {
    @Autowired
    GetRequest getRequest;
    @PostMapping("/createsse")
    public String createsse(String geturl, String posturl,String param,String contentType,String token,String uid){
        getRequest.doget(geturl,contentType,token,uid);
        String response = getRequest.dopost(posturl,param,contentType,token,uid);
        return response;
    }
}

👉 任一压力测试工具进行压测,例如jmeter
在这里插入图片描述
👉 任一压力测试工具进行压测,例如loadrunner

Action()
{
	web_submit_data("create",//事务名
          "Action=http://localhost:8006/createsse", //请求域名
          "Method=POST", //请求类型为post
          "RecContentType=application/json", //返回格式为json
          "Referer=",
          "Snapshot=t4.inf",
          "Mode=HTML",
          ITEMDATA, //下面编辑post请求的数据
          "Name=geturl", "Value=https://cc.pc.com.cn/api/createSse", ENDITEM, //数据的name、value及结束符
          "Name=posturl", "Value=https://xx.pc.com.cn/api/chat", ENDITEM, //第二条数据的name、value及结束符
          "Name=param", "Value=When is it okay to have ",ENDITEM,
          "Name=contentType", "Value=application/json", ENDITEM,
          "Name=token", "Value=xxxxxxxxxxxxxxxxxxx==", ENDITEM,
          "Name=uid", "Value=qqqqqqqqqqqqqqqqqqqqq", ENDITEM,   
	LAST);
	return 0;
}

这种方法应付需求倒还是可以,但真的太麻烦了,其它同事不会springboot,想封装个接口出来,难啊!更多测试人员不懂Java,更难理解😃

jmeter里不是可以写Java吗,为什么不直接使用beanshell实现呢?

3. jmeter-beanshell实现

3.1 jmeter结构

在这里插入图片描述

3.2 beanshell说明

前置beanshell、 后置beanshell 、采样beanshell 、 JSR223 beanshell 都行,只要可以使用beanshell就行,用JSR223 报错信息会更明确一些

3.2.1 jar包

需要把以下几个依赖包加入到jmeter\lib\ext 目录下
fastjson-1.2.55.jar
httpclient-4.5.13.jar
httpcore5-5.1.2.jar
okhttp-3.14.2.jar
okio-1.14.0.jar

3.2.2 脚本

import com.alibaba.fastjson.JSONObject;
import okhttp3.*;
import org.apache.http.HttpEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;
OkHttpClient client = new OkHttpClient().newBuilder().build();
MediaType mediaType = MediaType.parse("application/json");
RequestBody body = RequestBody.create(mediaType, "");
String url = vars.get("geturl");
String token = vars.get("x-token");
String uid = vars.get("uid");
log.info("url+token+uid==="+url+token+uid);
Request request = new Request.Builder().url(url).get().addHeader("Content-Type", "application/json").addHeader("x-token", token).addHeader("uid", uid).build();
Response response =null;
try {
  response = client.newCall(request).execute();
}catch (Exception e){
  e.printStackTrace();
}
log.info("createSse-code============="+response.code());

3.2.3 结果正确性查看

我更喜欢加打印
在这里插入图片描述

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

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

相关文章

跟我一起使用 compose 做一个跨平台的黑白棋游戏(3)状态与游戏控制逻辑

前言 在上一篇文章中&#xff0c;我们已经完成了黑白棋的界面设计与编写&#xff0c;今天这篇文章我们将完成状态控制和游戏逻辑代码的编写。 正如第一篇文章所述&#xff0c;在本项目中&#xff0c;我们需要实现不依赖于平台的状态管理&#xff0c;也就是使用 Flow 和 compo…

浏览器扩展一些好用插件

给浏览器添加一些插件功能&#xff0c;能够让我们用的更方便&#xff0c;开发中非常实用&#xff0c;下面直接开始 我们这里选择的是微软自带的Microsoft Edge浏览器&#xff08;谷歌也行。这两款浏览器都是非常好用的&#xff09; 我们打开浏览器找到扩展应用这个&#xff0c;…

opencv 中值滤波

中值滤波是一种常用的图像滤波算法&#xff0c;是在像素点周围进行多个点的中值滤波&#xff0c;将点的灰度值根据其周围像素点的灰度值进行平均&#xff0c;并使这些点的灰度值具有相似性&#xff0c;以达到平滑去噪的目的。中值滤波在图像处理中应用广泛&#xff0c;在图像滤…

利用java编写的项目设备调配系统代码示例(内含5种设备调配的算法)

利用java编写的项目设备调配系统代码示例&#xff08;内含5种设备调配的算法&#xff09; 一、设备调配方案二、设备匹配算法三、代码实现&#xff08;java&#xff09; 最近在做一个项目设备调配系统&#xff0c;分享一些干货&#xff01;&#xff01;&#xff01; 一、设备…

Godot引擎 4.0 文档 - 入门介绍 - Godot 关键概念概述¶

本文为Google Translate英译中结果&#xff0c;DrGraph在此基础上加了一些校正。英文原版页面&#xff1a;Overview of Godots key concepts — Godot Engine (stable) documentation in English Godot 关键概念概述 每个游戏引擎都围绕您用来构建应用程序的抽象展开。在 Godo…

【mysql】库的操作+表的操作

文章目录 启动mysql登录mysql1.MySQL环境安装与基础认识修改端口号连接服务器服务器&#xff0c;数据库&#xff0c;表关系建表 第二讲_库与表的操作1.创建数据库2.创建数据库案例3.指明字符集和校验集校验规则对数据库的影响不区分大小写的查询以及结果&#xff1a;区分大小写…

SQL Backup Master 6.3.6 Crack

SQL Backup Master 能够为用户将 SQL Server 数据库备份到一些简单的云存储服务中&#xff0c;例如 Dropbox、OneDrive、Amazon S3、Microsoft Azure、box&#xff0c;最后是 Google Drive。它能够将数据库备份到用户和开发者的FTP服务器上&#xff0c;甚至本地机器甚至网络服务…

速通二次型、二次型标准型、二次型规范型

浅过二次型 理解二次型可以从二次型的多项式入手&#xff1a; 显然&#xff0c;在系数都为实数的情况下&#xff0c;二次型矩阵即为一个实对称矩阵。 取一个代入值的例子就是&#xff1a; 二次型的标准型 OK&#xff0c;再从二次型的标准型的多项式入手&#xff0c;如下&…

FPGA System Planner(FSP)使用手册

FSP工具是cadence公司为了FPGA/PCB协同设计而推出的一个解决方案工具包。它的主要工作是由软件来自动生成、优化FPGA芯片的管脚分配,提高FPGA/PCB设计的工作效率和连通性。FSP完成两顷重要工作:一、可以自动生成FPGA芯片的原理图符号(symbol);二、自动生成、优化和更改FPG…

C++模板(上)

文章目录 模板函数模板函数模板的实例化 类模板总结 模板 模板是C种为了方便用户对于一些场景的使用&#xff0c;引入的新概念&#xff0c;使得我们的代码不会冗余 template关键字 template关键字的意思就是模板&#xff0c;语法为&#xff1a;template<typename T1,type…

内网渗透之Linux权限维持-OpenSSHPAM后门SSH软链接公私钥登录

0x01替换版本-OpenSSH后门 原理&#xff1a;替换本身操作系统的ssh协议支撑软件openssh&#xff0c;重新安装自定义的openssh,达到记录帐号密码&#xff0c;也可以采用万能密码连接的功能&#xff01; 可以修改软件版本和删除安装记录 1.环境准备&#xff1a; yum -y install…

【Java EE 初阶】网络初识

目录 1.网络互连 1.局域网&#xff1a; 2.广域网WAN 2.网络通信基础 3.IP地址&#xff1a;端口号 4.协议 1.五元组 2.协议分层 1.为什么要用网络分层&#xff1f; 3.OSI七层模型 4.TCP/IP五层&#xff08;或四层&#xff09;模型 5.封装和分用 1.应用层 2.传输层A…

Oracle数据库中了locked1勒索病毒攻击后怎么办,什么是locked1勒索病毒

Oracle数据库是一种被集团企业广泛使用的关系型数据库管理系统&#xff0c;但是随着科学技术的不断发展&#xff0c;在现代互联网环境中数据库安全性成为了一个非常重要的问题。而其中主要的威胁就是勒索病毒攻击。一旦数据库被勒索病毒攻击入侵&#xff0c;许多重要的数据就会…

【JVM】3. 运行时数据区及程序计数器

文章目录 3.1. &#x1f379;运行时数据区3.1.1. &#x1f942;概述3.1.2. &#x1f942;线程3.1.3. &#x1f942;JVM系统线程 3.2. &#x1f379;程序计数器(PC寄存器) 3.1. &#x1f379;运行时数据区 3.1.1. &#x1f942;概述 本节主要讲的是运行时数据区&#xff0c;也就…

跟我一起使用 compose 做一个跨平台的黑白棋游戏(2)界面布局

前言 在上一篇文章中&#xff0c;我们讲解了实现这个游戏的总体思路&#xff0c;这篇文章我们将讲解如何实现游戏界面。 本文将涉及到 compose 的自定义绘制与触摸处理&#xff0c;这些内容都可以在我往期的文章中找到对应的教程&#xff0c;如果对这部分内容不太熟悉的话&am…

论文阅读_语音合成_VALL-E

论文阅读 number headings: auto, first-level 2, max 4, _.1.1 name_en: Neural Codec Language Models are Zero-Shot Text to Speech Synthesizers name_ch: 神经网络编解码器语言模型实现零样本TTS paper_addr: http://arxiv.org/abs/2301.02111 date_read: 2023-04-25 da…

Docker代码环境打包进阶 - DockerHub分享镜像

1. Docker Hub介绍 Docker Hub是一个广泛使用的容器镜像注册中心&#xff0c;为开发人员提供了方便的平台来存储、共享和分发Docker容器镜像。它支持版本控制、访问控制和自动化构建&#xff0c;并提供了丰富的公共镜像库&#xff0c;方便开发人员快速获取和使用各种开源应用和…

Redis+Lua脚本防止超卖

超卖就是因为查询库存和扣减库存两个操作不是原子性操作&#xff0c;通过rua脚本执行这两个操作可以保证这两个操作原子性 判断库存量是不是大于等于1&#xff0c;如果大于等于1对库存减1&#xff0c;否则就不去减库存 StringBuilder sb new StringBuilder();sb.append("…

【数据分享】我国地级市绿地利用现状数据(9个指标\Shp格式)

绿地是城市生态的重要组成部分&#xff0c;在很多分析中都会用到绿地数据&#xff01;之前我们分享过Shp和Excel格式的全国地级市2003-2020年绿地面积数据&#xff08;可查看之前文章获悉详情&#xff09;&#xff0c;以及中国31个主要城市的绿地空间分布的栅格数据&#xff08…

vue中使用colorthief获取图片的主色调成分

colorthief官网 https://lokeshdhakar.com/projects/color-thief/#examples 安装 npm i --save colorthief yarn add colorthief 使用案例 <template><div class"box app" :style"{ background: bodyBgColor }"><div class"img-item&…