由于需要对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. .Net Aspose.Words 生成Word文档

    .Net Aspose.Words 生成Word文档 在开发WinForm项目中,有一需求要生成Word文档,百度学习,记录一下实现方法 NuGet包,找到 Aspose.Words 安装 21.8. ...

  2. 3、数据库:Oracle部署 - 系统部署系列文章

    Oracle数据库的安装,以前写过一篇,这次将新版的安装再记录一次,让读者能够有所了解,笔者也能够记录下最新版的安装过程. 一.数据库下载: Oracle最新版目前在官网是19c,从下面这个链接进去下 ...

  3. 华为IP综合实验

    目录 实验拓扑 实验需求 实验步骤 1.配置IP地址和环回口地址 2.在总公司上进行相应VLAN划分与配置 3. SW3和SW4的互连接口启用eth-trunk,最大带宽为2G 4. SW1.SW2. ...

  4. C++面试八股文:了解sizeof操作符吗?

    某日二师兄参加XXX科技公司的C++工程师开发岗位第10面: 面试官:了解sizeof操作符吗? 二师兄:略微了解(不就是求大小的嘛..) 面试官:请讲以下如何使用sizeof? 二师兄:sizeof ...

  5. Open AI ChatGPT Prompt 学习之基础篇

    碎碎念 2023 年,最火的可能就是 openAI 了,其组织代表的产品 chatGTP,相信大家已经有所耳闻.不少同学已经开始着手使用,并截图晒出 ChatGPT 是多么得智能与神奇.而有的同学在使 ...

  6. 解密Prompt系列9. 模型复杂推理-思维链COT基础和进阶玩法

    终于写了一篇和系列标题沾边的博客,这一篇真的是解密prompt!我们会讨论下思维链(chain-of-Thought)提示词究竟要如何写,如何写的更高级.COT其实是Self-ASK,ReACT等利用 ...

  7. Instruments中常用Template的使用

     Instruments是苹果提供的Xcode套件,可用于分析iOS,MacOS程序的性能数据,进行性能提升.Instruments提供了很多类型的Template,用于特定场景的分析.这里选了3种常 ...

  8. 讯飞离线语音合成新版(Aikit)-android sdk合成 demo(Java版本)

    前言:科大讯飞的新版离线语音合成,由于官网demo是kt语言开发的,咱也看不懂kt,搜遍了全网也没看到一个java版的新版离线语音demo,现记录下,留给有缘人参考!!!!!毕竟咱在这上面遇到了不少的 ...

  9. APP中Web容器的核心实现

      现在的业务型APP中,采用纯原生开发策略的已经很少了,大部分都使用的混合开发.如原生,H5,ReactNative,Flutter,Weex它们之间任意的组合就构成了混合开发. 其中原生+H5是出 ...

  10. Python 爬虫实战:驾驭数据洪流,揭秘网页深处

    爬虫,这个经常被人提到的词,是对数据收集过程的一种形象化描述.特别是在Python语言中,由于其丰富的库资源和良好的易用性,使得其成为编写爬虫的绝佳选择.本文将从基础知识开始,深入浅出地讲解Pytho ...