jmeter下的websocket自动化与压力测试

最近新接手了个websocket项目,消息模式有点类似聊天室的操作。

没有办法确定response的内容和时间。在网上搜了一圈,也没有找到类似的科普文章。

在这里写一篇文章记录一下问题和解决情况。

希望能抛砖引玉,把这个问题攻克下来。

首先,准备jmeter环境和websocket的支持库。

相关操作在简书《JMeter测试WebSocket的经验总结》一文中可以找到。原文地址:

https://www.jianshu.com/p/bb8b3e928607

感谢 smooth00 大神的引用授权。

测试场景:

1.多名用户加入房间。

2.房间人数为固定人数(比如4人)

3.有人进入时,进入用户会收到反馈当前房间人员列表。

4.其他人会收到反馈新加入用户的信息消息。

5.当人数已满时,会自动推送消息给所有人。

6.在人满后,每个人需要按固定序列,发送消息。

7.所有人发送特定消息后,推进房间状态,返回新的一组信息。

jmeter的逻辑结构

建立连接

循环1开始

  进入房间

  循环2开始

    接受消息

    解析消息

    if(消息格式符合条件1)

      执行动作1

    if(消息格式符合条件2)

      执行动作2

      设置循环2控制变量,跳出循环

    ...

  循环2结束

循环1结束

在整个编辑过程中,踩了几个小坑。

1.用户自定义变量 不可修改

问题场景:在控制循环2的跳出条件时,直接使用了【用户自定义变量】来定义控制循环2的变量,结果,总是无法正确触发跳出循环。查询资料才知道【用户自定义变量】是会只读一次的类型。

解决方案:修改为【用户参数】,解决问题。

2.while循环和if判定的条件格式

问题场景:同样是用于条件格式,只有if强调了需要使用 __jexl3() 来计算语句逻辑,最终必须为true格式。

然后在实际使用中发现,while的判断也需要类似的需求。

最初填写的内容为  ${x}==a  ,此处由于  ${x} 不为 null 或false,就直接验证为成功了。

之后尝试修改 ${x}的值,仍然无法正确跳出循环,再加上问题1,导致浪费了很多时间。

解决方案:通过修改为 ${__jexl3(${notInRoom}==1,)},强制逻辑计算,解决手问题。

3.变量格式不一致,导致的判断异常

问题场景:同样是if判断,在判断中,由于字符变量的表现格式,在jmeter和java中的差异导致。

原本的判断类型为变量 stage 的值是否为字符串 settle。开始使用 ${__jexl3( ${stage} == settle,)},总是无法正确获取判断结果。

解决方案:修改两侧格式为字符串,${__jexl3( "${stage}" == "settle",)},解决问题。

4.固定定时器的延时状态会导致接受消息的时机被错过。

问题场景:原本为了放缓代码的刷新速度(调试阶段,太多了看不过来),在循环中添加了【固定定时器】延时。

结果在延时的过程中,经常会丢掉一些关键信息,导致本地逻辑无法继续。

解决方案:加长 response timeout的时长,代替延时

原文地址:https://www.cnblogs.com/worker-overtime/p/10197513.html

时间: 2024-10-10 09:13:39

jmeter下的websocket自动化与压力测试的相关文章

Jmeter对基于websocket协议的压力测试

WebSocket protocol 是HTML5一种新的协议.它实现了浏览器与服务器全双工通信(full-duplex). 浏览器和服务器只需要要做一个握手的动作,然后,浏览器和服务器之间就形成了一条快速通道.两者之间就直接可以数据互相传送.在此WebSocket 协议中,为我们实现即时服务带来了两大好处: 1. Header  互相沟通的Header是很小的-大概只有 2 Bytes 2. Server Push 浏览器请求 GET /WebSocket/LiveVideo HTTP/1.1

开发人员学Linux(4):使用JMeter对网站和数据库进行压力测试

前言表面看来,JMeter与本系列课程似乎关系不大,但实际上在后面的很多场景中起着重要作用:如何获知修改了某些代码或者设置之后系统性能是提升了还是下降了呢?商业的压力测试工具LoadRunner确实很高大上,但是据说费用也不便宜且体积也不小,而目前最高版本的开源免费压力测试工具JMeter3.2压缩包体积才不到53M,而且对于开发人员而非专业测试人员来说,JMeter提供的测试功能已经够强大了.要完整地介绍JMeter,即使把JMeter自带的文档翻译成中文就是一本厚厚的书了.但是在本篇只讲述如

Linux下四款Web服务器压力测试工具(http_load、webbench、ab、siege)介绍

一.http_load程序非常小,解压后也不到100Khttp_load以并行复用的方式运行,用以测试web服务器的吞吐量与负载.但是它不同于大多数压力测试工具,它可以以一个单一的进程运行,一般不会把客户机搞死.还可以测试HTTPS类的网站请求. 下载地址:http://soft.vpser.net/test/http_load/http_load-12mar2006.tar.gz 安装#tar zxvf http_load-12mar2006.tar.gz#cd http_load-12mar

Mac下使用Web服务器性能/压力测试工具webbench、ab、siege

Web开发,少不了的就是压力测试,它是评估一个产品是否合格上线的基本标准,下面我们来一一剖析他们的使用方式. 测试前,前面先把系统的端口限制数改大,看看Mac下面的默认限制 ulimit -a open files (-n) 2560 2000多的fd数是很小的,我们把他改大,当然我测试过了,也只能开10000而已,Linux可以开6W多,所以: ulimit -n 10000 在用 ulimit -a 检查一下 open files (-n) 10000 接下来把cpu检查打开,通常我们只看使

Apache服务器下使用 ab 命令进行压力测试

ab是Apache超文本传输协议(HTTP)的性能测试工具. 其设计意图是描绘当前所安装的Apache的执行性能,主要是显示你安装的Apache每秒可以处理多少个请求. #ab -v可以看出其基本信息 #ab -n1000 -c10 http://localhost:81/t.php 这是一个基本命令 -n1000表示总请求数为1000 -才0表示并发用户数为10 参数说明: Concurrency Level:并发用户数: Time taken for tests:请求处理花费的总时间: Co

Jmeter教程 简单的压力测试

转载:http://www.cnblogs.com/TankXiao/p/4059378.html?utm_source=tuicool Jmeter是一个非常好用的压力测试工具.  Jmeter用来做轻量级的压力测试,非常合适,只需要十几分钟,就能把压力测试需要的脚本写好. 什么是压力测试 顾名思义:压力测试,就是  被测试的系统,在一定的访问压力下,看程序运行是否稳定/服务器运行是否稳定(资源占用情况) 比如: 2000个用户同时到一个购物网站购物,这些用户打开页面的速度是否会变慢,或者网站

【转】利用JMeter进行压力测试

压力测试以软件响应速度为测试目标,尤其是在较短时间内大量并发用户的同时访问时,软件的性能和抗压能力. JMeter是一款开源的压力测试工具,目前最新Release版本是2.3.4,它不仅可以测试Web服务器,还可以测试数据库.JMS.Web Service.LDAP.JUNIT 等多种对象的测试能力.下载地址:http://jakarta.apache.org/site/downloads/downloads_jmeter.cgi 下面简单介绍一下JMeter. 测试计划是测试的起点,其他所有组

JMeter完成一个MySql压力测试

jmeter也可以用来做数据库的压力测试,并且兼容各种数据库类型,只需要更改对应的数据库驱动类和url.以下为整理到的数据库驱动类对应url.并且给出一个mysql数据库select的简单应用.如下: 一 不同数据库驱动类和对应的url: Datebase Driver class Database URL MySQL com.mysql.jdbc.Driver jdbc:mysql://host:port/{dbname} PostgreSQL org.postgresql.Driver jd

非GUI JMETER压力测试

修改E:\Program Files\jmeter\apache-jmeter-4.0\bin目录下的user.properties文件 jmeter.save.saveservice.output_format=csv 准备好压力测试的脚本,新建存放jtl报告和web报告的目录,确保每次执行脚本前result和webreport下为空 非GUIjmeter实现步骤: cmd切换目录 e: cd E:\Aresource\jmeter\pressure 在此目录下执行脚本,生成的jtl和网页版的