由于需要对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. 使用 coding.net 发布你的个人博客

    微信文章不允许外链,本文章的静态示例站点,可在文章左下角 "阅读原文" 进行预览. 很多人喜欢在 github pages / gitee pages 发布自己的个人博客,前者由于 ...

  2. CentOS7 本地光盘镜像rpm包

    CentOS7 本地光盘镜像rpm包 一.前言 rpm包的下载方式 通过本地光盘镜像下载rpm,centos7.iso镜像文件,内置了绝大多数软件的rpm包(本文章即演示如何配置本地rpm) 在线下载 ...

  3. C++面试八股文:如何实现一个strncpy函数?

    某日二师兄参加XXX科技公司的C++工程师开发岗位第31面: 面试官:strcpy函数使用过吧? 二师兄:用过. 面试官:这个函数有什么作用? 二师兄:主要用做字符串复制,将于字符从一个位置复制到另一 ...

  4. python学习笔记:继承与超类

    与java类似,继承的出现是为了提高代码的重复利用率,避免多次输入同样的代码.而超类就是java中的父类. 1.继承 要指定超类,可在定义类时,在class语句中的类名后加上超类名 基类就是超类,派生 ...

  5. Python数据分析易错知识点归纳(五):横向对比

    五.横向对比 排序 # 列表 a.sort() # 修改原列表,返回值为None!!!!!这里很容易出错 sorted(a) # 生成新的列表 # 嵌套列表的排序(若是对字典排序,需先用list()转 ...

  6. 2023年CCPC河南省程序设计竞赛 mjh

    首先,很荣幸有机会参加此次ccpc,虽然成绩很一般... 这次ccpc一共过了两道签到题.比赛开始就找到了a题,考察字符串的回文判断,通过调用c++库函数过了.第二道签到题类似于数学题.通过类似于找规 ...

  7. Linux 中设备的分类及网络设备接口路径

    设备分类 字符设备 块设备 网络设备 参考文档: 手把手教Linux驱动 网络设备位置 [root@localhost ~]# cd /sys/class/net/ [root@localhost n ...

  8. js将数字金额转换成中文金额格式

    在开发中我们经常会遇到处理数字的问题,下面介绍一种处理数字金额转换为中文金额的方式: 我们通常使用三种书面数字系统:全球使用的阿拉伯数字系统和两种本地数字系统(繁体.简体).常规时我们使用阿拉伯数字( ...

  9. 注意!JAVA中的值传递

    前言:今天在解决一个问题时,程序总是不能输出正确值,分析逻辑思路没问题后,发现原来是由于函数传递导致了这个情况. LeetCode 113 问题:给你二叉树的根节点root和一个整数目标和target ...

  10. VS Code 有哪些好用的插件呢?【持续更新】

    一.画图工具:vscode-drawio   功能:在 VSCode 中画流程图.数据流图等等.        使用方法:     创建一个后缀名为 .drawio 的文件,然后用 VSCode 打开 ...