由于需要对WebSocket进行压力测试,因此又回归到了JMeter的使用。网络上缺少具体的获取多帧消息的操作,且自己也踩了两个坑,总结一下可行的操作供大家参考。
 
一、情况说明
       被测试的WebSocket会根据客户端发起的信息进行回复,回复帧数不确定。现在需要把所有回复的内容都获取到
 
二、工具
       经过调查,可以使用JMeter自带的插件WebSocket Sampler by Maciej Zaleski或者WebSocket Samplers by Peter Doornbosch。
       在JMeter的Plugin Manager里面的Available Plugins搜索关键字”WebSocket“即可搜索出来,进行安装。
       
       这两个插件都可以使用,下面以WebSocket Samplers by Peter Doornbosch的使用进行说明。
 
 
三、具体操作
      科普一下: WebSocket 以 frame 为单位传输数据, frame 是客户端和服务端数据传输的最小单元, 当一条消息过长时, 通信方可以将该消息拆分成多个 frame 发送。
      那现在我们要解决的就是怎么接收这不确定帧数的多帧内容,下面贴上返回的多帧数据样式
      
      
      从返回消息来看,我们可以通过判断response值是否为空,或者flag是否等于end来判断
 
      思路:从上面的返回数据可以看出来,我们需要使用while循环来获取返回的数据。那判断条件可以选择判断response值是否为空,或者flag是否等于end。下面就以response值是否为空作为条件来进行判断。
     
     具体步骤:
          1. 我们先加入WebSocket的Open Connection,用于建立WebSocket通道
             

          2. 加入WebSocket Single Write Sampler,用于发送一个(文本或二进制)WebSocket 帧
          
           3. 加入WebSocket Single Read Sampler,用于接收一个(文本或二进制)WebSocket 帧。在这里我们用于接收第一帧消息。到这个步骤,可以跑一遍,检查是否能正常发送和接收消息。如果可以,再继续下面步骤。   
            
          4. 建用户自定义变量(即User Defined Variables)
           
 
        5. 建JSON Extractor,用于接收Websocket返回内容中json字段的值。我这里是返回的json,所以就用的JSON Extractor。把用于判断的值取出来放到步骤4创建的用户自定义变量里面。
          
 
        6. 建循环(While Controller),条件写${__jexl3("${WSresponse}"!="")},代表只要返回的值非空的情况就继续执行循环里的读取消息操作,即步骤7。
          
 
        7.循环里创建第二个WebSocket Single Read Sampler,用于接收第二帧及其以后的消息。
          
 
        8. 建WebSocket Close,用于正常关闭 websocket 连接。
         
 
       9.结束,运行结果:
          
 
四、下面说下踩过的坑,供大家参考
 
     1. 最大的坑:Debug Sampler
         为了调试,我加了几个Debug Sampler,如图Debug1,Debug11。
         出现了奇怪的事情,跑完以后看View Results Tree里面的 Debug1,WSresponse 里面有值且正确;但是查看Debug11的WSresponse值就为空了。
         我认为是JSON Extractor的顺序,以及里面的设置”Apply to“导致,做了很多次调整都没有解决此问题,直到把两个Debug1,Debug11给disable了才解决。
         具体原因后续再做调查。
      
      2. while controller
          表达式写错了,但是没有看JMeter的console,进入循环后就无限循环。被这个奇怪的现象困扰了很久最后才发现console里面在报错。
          得到的经验是:
    • 一定要打开console
    • while表达式写错了也会进入循环     
    •  
 
 

Jmeter获取Websocket多帧消息的实现方法的更多相关文章

  1. 史上最全的 jmeter 获取 jdbc 数据使用的4种方法——(软件测试Python自动化)

    周五,下班了吗?软件测试人. 明天是周末了!给大家推荐一个技术干货好文.史上最全的 jmeter 获取 jdbc 数据使用的四种方法.我也精剪了jmeter的自动化接口测试的视频放在了同名UP主,周末 ...

  2. 史上最全的 jmeter 获取 jdbc 数据使用的四种方法

    jmeter使用jdbc协议获取数据库中数据,很多人都会用,因为大家在做测试的时候,有时候需要大量的用户进行登录,获取需要数据库中真实的数据用于测试,所以常常会用jdbc来获取数据库数据. 那从数据库 ...

  3. JMeter测试WebSocket的经验总结

    最近有一个微信聊天系统的项目需要性能测试,既然是测试微信聊天,肯定绕不开websocket接口的测试,首选工具是Jmeter,网上能搜到现成的方法,但是网上提供的jar包往往不是最新的,既然是用最新版 ...

  4. jmeter中websocket接口测试

    一.Websocket协议简介 Websocket是一个持久化的协议,相对于HTTP这种非持久的协议来说: HTTP协议: HTTP的生命周期通过 Request 来界定,也就是一个 Request  ...

  5. 『动善时』JMeter基础 — 50、使用JMeter测试WebSocket接口

    目录 1.什么是WebSocket接口 2.为什么需要WebSocket 3.测试WebService接口前的准备 4.WebSocket Sampler组件界面详解 5.使用JMeter测试WebS ...

  6. Springboot+websocket+定时器实现消息推送

    由于最近有个需求,产品即将到期(不同时间段到期)时给后台用户按角色推送,功能完成之后在此做个小结 1. 在启动类中添加注解@EnableScheduling package com.hsfw.back ...

  7. Jmeter中Websocket协议支持包的使用

    Jmeter中Websocket协议支持包的使用(转) 参考的来源是国外一篇文章,已经整理成pdf格式(http://yunpan.cn/cFzwiyeQDKdh3 (提取码:9bcf)) 转自:ht ...

  8. jmeter关联Websocket包支持

    消息文本发送内容采用的是websocket方式进行消息握手的,一次使用到WEBSOCKET包支持 对于它的介绍和使用如下: 一.首先,我们需要准备Jmeter的WebSocket协议的支持插件:JMe ...

  9. 使用jmeter进行websocket协议压测

    第一步:添加websocket sampler组件 可以使用plugins manager进行添加,首先下载plugins manager组件: 下载路径:  https://jmeter-plugi ...

  10. jmeter 测试websocket接口(一)

    jmeter 测试websocket接口时,需要对jmeter添加测试websocket的jar包. 下载地址: https://download.csdn.net/download/qq_14913 ...

随机推荐

  1. filler 抓取手机app的数据,手机wifi设置

    1.处于同一局域网下, 2.手机的代服务器修改为手动 3.代理服务器,名称为本机ip地址端口为8888,可以自己设置 4.fillder上面选择允许远程链接

  2. JVM系统参数

    JVM(Java虚拟机)是Java程序的运行环境,它可以通过一些系统参数进行配置和优化.以下是一些常用的JVM系统参数: 1. -Xmx: 用于设置JVM堆的最大内存大小.例如,-Xmx1g表示将堆的 ...

  3. 效率神器,边看网页边问ChatGPT!神级ChatGPT插件(浏览器扩展)推荐!

    如果在看一个网页时,有些词不认识.句子不知道含义,怎么办? 憨憨版:不认识就算了呗,还能咋滴 进阶版:复制到 Google/Baidu 里问一问: AI达人版:复制到 ChatGPT/Claude 里 ...

  4. 10. docker方式下的mysql设置主从复制(一主两从)

    上一篇 [centos 使用 docker 方式安装 mysql] 笔记中,我们在三个虚拟机中使用 docker 方式新建了三个 mysql 容器服务,那么我们这篇文章来记录下,如何在这三台机器中设置 ...

  5. C++调用tensorflow模型

    C++ 和python的混合编程 windows + vs 新建一个工程,在工程属性中添加如下的几个 C:\Users\[user_name]\Anaconda3\include C:\Users\[ ...

  6. OAuth2.0andmultifactorauthentication:Howtocreateasecure

    目录 1. 引言 2. 技术原理及概念 2.1. 基本概念解释 2.2. 技术原理介绍 2.3. 相关技术比较 3. 实现步骤与流程 3.1. 准备工作:环境配置与依赖安装 随着数字化时代的到来,人们 ...

  7. 使用TensorFlow进行自动化测试与部署

    目录 标题:<使用 TensorFlow 进行自动化测试与部署> 背景介绍: 随着人工智能和机器学习技术的快速发展,TensorFlow 成为了一个广泛应用的深度学习框架,被广泛用于构建神 ...

  8. 自然语言处理 Paddle NLP - 开放域对话系统-理论

    常见的对话系统 个人助手 •Apple Siri, Amazon Alexa, Baidu Xiaodu 客户服务•餐厅预定.商品咨询.债务催收 休闲娱乐 •Microsoft XiaoIce,Rep ...

  9. javaSE 温故而知新

    重温 javaSE 前言:有地基才能有高楼大厦 目录 重温 javaSE 认识java Java基础 1.数据类型 1.1 基本数据类型: 1.2 引用数据类型 1.3 基本数据类型的包装类 1.4 ...

  10. P7561[JOISC 2021 Day2] 道路の建設案 (Road Construction) 题解

    P7561[JOISC 2021 Day2] 道路の建設案 (Road Construction) 题解 题目描述 JOI 国是一个 \(x\times y\) 的二维平面,王国里有 \(n\) 个城 ...