由于需要对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. Java的标识符、关键字、 常量、变量、数据类型、 数据类型转换、字符ASCII码表(基础语法的学习)

    一.Java的关键字和标识符 关键字 1.定义: 在Java程序中,已经定义好的被预先使用的一些特殊的单词称为关键字,一共有50个关键字(48+2个保留字),关键字都是小写的英文单词 2.关键字的分类 ...

  2. Java并发(十二)----线程应用之多线程解决烧水泡茶问题

    1.背景 统筹方法,是一种安排工作进程的数学方法.它的实用范围极广泛,在企业管理和基本建设中,以及关系复杂的科研项目的组织与管理中,都可以应用. 怎样应用呢?主要是把工序安排好. 比如,想泡壶茶喝.当 ...

  3. 计算机网络那些事之 MTU 篇 pt.2

    哈喽大家好,我是咸鱼 在<计算机网络那些事之 MTU 篇 >中,咸鱼跟大家介绍了 MTU 是指数据链路层能够传输的最大数据帧的大小 如果发送的数据大于 MTU,则就会进行分片操作(Frag ...

  4. 基于FFMPEG+SDL的简单的视频播放器分析

    基于FFMPEG+SDL的简单的视频播放器分析 前言 最近看了雷霄骅前辈的博客<最简单的基于FFMPEG+SDL的视频播放器 ver2 (采用SDL2.0)>,参照他的代码,在window ...

  5. PowerBuilder从入坑到放弃(二)编码规范

    前言 上一篇我们从0到1用pb开发了一个helloworld程序,并成功将开发的程序编译打包并且制作了安装包. 程序员最讨厌的莫过于写文档和别人不写注释. 不知道大家会不会和我一样,在找bug时,有段 ...

  6. 基于java+springboot的视频点播网站-在线视频点播系统

    该系统是基于java+springboot开发的视频点播系统.是给师妹开发的毕业设计. 演示地址 前台地址: http://video.gitapp.cn 后台地址: http://video.git ...

  7. Centos 7安装JDK1.8

    # 安装 yum install -y java-1.8.0-openjdk* # 添加环境变量 vim /etc/profile export JAVA_HOME=/usr/lib/jvm/java ...

  8. CF1794B Not Dividing题解

    如果 \(a_i\) 可以整除 \(a_{i - 1}\),只要在 \(a_i\) 上 \(+1\) 即可,这样 \(a_i \bmod a_{i - 1} = 1\) 就满足题目要求了,如果这样算来 ...

  9. CentOS 30分钟部署免费在线客服系统

    前段时间我发表了一系列文章,开始介绍基于 .net core 的在线客服系统开发过程.期间有一些朋友希望能够给出 Linux 环境的安装部署指导,本文基于 CentOS 7.9 来安装部署. 我详细列 ...

  10. Java相关小知识_6_15

    实体完整性要求每个表都有唯一标识符,每一个表中的主键字段不能为空或者重复的值. 参照完整性要求关系中不允许引用不存在的实体.设定相应的更新删除插入规则来更新参考表. Java语言使用的是Unicode ...