安装JMeter

下载解压后直接运行即可:https://jmeter.apache.org/download_jmeter.cgi

打开后如下:

安装插件

参考:Performance Testing Web Sockets with JMeter

本身jmeter并不支持web socket,但是好在有插件。

首先下载jmeter-plugins,具体见:https://jmeter-plugins.org/install/Install/。然后会多出一个选项:

打开后搜索websocket安装即可:

Jmeter基础

1)组件概览

打开jmeter后,默认有个Test Plan项目,我们只需要右击,添加需要的组件来组合实现我们的测试脚本即可。

如下图,有9大类(Options/Choose Language/Chinese 可切换语言):

2)Threads(Users)

概述

可以指定开多少个线程,在这个节点下的逻辑,都会在不同的线程中并发执行。这也是jmeter最基础的组件。

有2个特殊的线程组:

  • setUp:在其他线程组执行之前执行。一般用来初始化一些信息,比如请求token。
  • tearDown:停止的时候做一些事情,不常用。

如下,有1个setup,2个并发测试http接口的线程组,其中 查火车 会被并发执行10次(启动10个线程同时请求)。

执行顺序

创建好线程组之后,我们就可以 “写脚本语句” 了,“脚本语句” 执行的顺序也是从上往下执行的,比如,下图的效果就是,启动jmeter之后,会暂停3秒钟

注意:我们必须创建一个线程组,才能执行http接口请求

Sampler(采样器)

在线程组上点击,会多出2个子组件:

  • Sampler:采样器,最重要的组件。比如发送HTTP请求,打开WebSocket连接等等。
  • Logic Controller:这个选项只会在 线程组上点击时才会出现,包含 IF判断、for/while循环、switch等一些逻辑组件,可以实现编程的效果!

支持的Sampler :

示例Sampler——HTTP Request界面:

到这里,通过 Threads(Users)Sampler 的组合,我们就可以测试HTTP接口的并发了。

3)Config Element

配置组件,主要是为Sampler服务的。比如有个HTTP接口,需要携带认证的token头,这个时候,我们可以增加一个 HTTP Header Manager来实现接口认证。

下图是一个示例:

我们拖入一个View Results tree,就可以看到效果了(自动为这个请求注入了Token值,并且是动态的):

4)Listener(监听器)
最有用的是这2个组件

  • View Result Tree:HTTP结果调试,有点类似浏览器的F12。
  • Summary Report:性能测试报告,比如请求次数、成功次数、接口耗时、流量等等

View Result Tree见上一节中的截图,Summary Report界面如下:

5)Timer(定时器)

我们可以结合 Logic Controller 来实现 接口间隔 N 秒请求的功能,来测试稳定性,有固定间隔的、也有随机间隔的。这个比较简单,不再过多介绍。

6)Pre Processors 和 Post Processors

前置处理器不常用,主要是后置处理器,经常搭配 Debug Sampler来使用,比如 JSON Extractor 会经常用来解析登录后的token,并把这个token传递给其他接口调用。

JSON Extractor用法
假设 登录 接口返回下面的数据:

{"guestToken":"eyJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCJ9.eyJjbGllbnRfaWQiOiI5NmJjMzNmZC00YzdmLTRmMGUtYTQxZS0xMWZjNGU3NmMyM2YiLCJleHBpcmVzX2F0IjoxNjg3NTAwNjE4LCJ0eXBlIjoiYWNjZXNzIn0.RZxufN0kAw5XnDpVDvkxycJOxMo9WNuohl5kTsrtH-JgwnkZnz0ozNGtJaSPnwAxdG95RQSpZmk92eisNcvSOg"}

我们只需要这样配置即可把结果拿出来:

然后,在这个Sampler后面拖入一个Debug Sampler,我们看到值被保存:

最后, 在后面的Sampler里,就可以引用了:
1)同一个 Thread Group,可以直接用${ 变量名 } 引用

2)跨 Thread Group,需要使用Shell脚本,设置全局变量

代码:

${__setProperty(token,${token},)};

其他线程组引用:

${__property(token,,)}

示例:

四、示例

1.模拟流程

以下面这个流程为例,演示测试WebSocket并发:

  • 通过/auth/login登录,拿到token
  • 模拟多人同时在线场景(100人)
    • 打开webSocket连接,头部需要携带login拿到的token做认证
    • 定时发送ping心跳,循环执行N次
    • 最后,关闭webSocket连接
  • 输出性能测试报告

2.详细步骤

登录认证

1)创建setUp Thread Group。选中Test Plan,鼠标右击->setUp Thread Group->Add->Threads->setup Thread Group,使用默认线程数1即可。

2)拖入HTTP请求。在 setUp Thread Group 上右键点击->Add->Sampler->HTTP Request。

3)配置接口参数,设置请求格式。如果是x-www-form-urlencoded格式,还需要额外增加一个HTTP Header Manager,具体参考:如何配置 x-www-form-urlencoded?


4)创建Json后置处理器,用来提取登录成功后返回的token,便于其他接口使用。

token是存储的变量,accessToken是解析的路径,比如下面这样:

{"accessToken":"eyJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCJ9.eyJjbGllbnRfaWQiOiI5NmJjMzNmZC00YzdmLTRmMGUtYTQxZS0xMWZjNGU3NmMyM2YiLCJleHBpcmVzX2F0IjoxNjg3NTAwNjE4LCJ0eXBlIjoiYWNjZXNzIn0.RZxufN0kAw5XnDpVDvkxycJOxMo9WNuohl5kTsrtH-JgwnkZnz0ozNGtJaSPnwAxdG95RQSpZmk92eisNcvSOg"}

5)拖入一个Debug Sampler,来调试Json提取是否提取正确。

6)拖入一个BeanShell Sampler,来把token设置成全局变量,供其他线程组使用。

${__setProperty(token,${token},)};

最后,看起来该是这样的:

WebSocket线程组

1)创建一个Thread Group,设置线程数量(Number of Threads(users) )为10个

2)为例节省篇幅,请按照下图,分别拖入对应的组件:

3)对应上图1和2,拖入View Results Tree 和 Summary Report。
4)点击执行
5)鼠标点击View Results Tree,我们就能看到执行结果了(红色代表错误,绿色代表成功) 。

6)最后,点击Summary Report,看下各个请求的执行情况即可

7)最后,别忘记把整个脚本保存,jmeter通过命令行的方式执行,这个通常只是编辑器而已。

附录:Golang WebSocket服务日志

五、性能报告和统计

Summary Report比较简单,Jmeter可以生成html格式的详细性能报告。比如:

执行以下命令即可:

jmeter -n -t test_demo.jmx -l result.jtl -e -o /Users/xxx/Desktop/ResultReport

说明:

  • -n :以非 GUI 形式运行 Jmeter
  • -t :test_demo.jmx 脚本路径
  • -l :result.jtl 运行结果保存路径,.jtl 文件名不能重复
  • -e :在脚本运行结束后生成 HTML 报告
  • -o :用于存放 HTML 报告的目录

然后,/Users/xxx/Desktop/ResultReport 目录下会生成一个html文件,用浏览器打开即可。

具体的各个报表的解释,可以参考这篇文章:Jmeter生成HTML性能测试报告

六、Jmeter上云

在裸金属服务器或者个人电脑上跑,总是会受限于物理环境或者成本的原因,导致模拟的并发有限或者不太贴近真实环境,好在各大云服务商也提供了对jmeter的支持,可以分发CSV配置文件,把Jmeter调度到不同的真实物理机上运行,从而尽可能贴近真实场景,突破物理限制。

以阿里云举例(PTS压测和JMeter压测),我提取了几个特点(详情):

  • 提供JMeter插件,在本地一键启动云上分布式压测
  • 流量支持动态秒级调整,百万QPS亦可瞬时脉冲
  • 流量来源于全国上百城市覆盖各运营商(可拓展至海外),真实模拟最终用户的流量来源,相应的报表、数据更接近用户真实体感。

看到这里,恐怕你要直呼:这么牛逼,我怎么用得起?

其实,我们购买一台2C4G的服务器,再购买一个压测资源包(价格点这里),总成本应该在几百左右,可以作为一个进阶的备选方案。

除此之外,要实现分布式Jmeter压测,需要使用 CSV Data Set Config 功能,可以参考这里(https://help.aliyun.com/document_detail/91788.html)。

参考

  • JMeter WebSocket Samplers - A Practical Guide
  • https://www.blazemeter.com/blog/how-use-http-basic-authentication-jmeter
  • 在JMeter中提取token值并传递给其它接口使用
  • JMeter中各种请求格式
  • Jmeter跨线程使用变量的几种方式
  • Jmeter生成HTML性能测试报告
  • JMeter使用CSV参数文件
  • CSV Data Set Config
  • jmeter使用csv进行参数化(一)

使用JMeter测试Go WebSocket服务的并发相关推荐

  1. JMeter 测试组件介绍 - 物联网大并发测试实战 02

    在本系列文章的上一篇中,我们介绍了开源测试工具 JMeter,并以一个简单的HTTP测试为例一窥JMeter的能力.在本篇文章中,我们将进一步介绍JMeter丰富的组件,以帮助大家构建复杂场景的测试脚 ...

  2. 运维测试工作笔记0003---使用Jmeter测试_http接口_高并发测试

    技术交流QQ群[JAVA,C++,Python,.NET,BigData,AI]:170933152 实际上jmeter可以测试很多不光是http的高并发测试 1.先去Jmeter官网下载Jmeter ...

  3. 使用JMeter测试WebSocket接口

    因为我之前对WebSocket接口也不是很了解,所以本篇文章先简单的概括的说明一下WebSocket的相关概念.在文章的后半部分,进行测试WebSocket接口的步骤说明. 1.什么是WebSocke ...

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

    WebSocket protocol 是HTML5一种新的协议.它实现了浏览器与服务器全双工通信(full-duplex). 浏览器和服务器只需要要做一个握手的动作,然后,浏览器和服务器之间就形成了一 ...

  5. 【接口测试】JMeter测试WebSocket接口

    目录 一.WebSocket简介 二.JMeter测试WebSocket接口 三.WebSocket和Socket的区别 最近老被问到WebSocket,突然想到以前大学时上Java课的时候,老师教我 ...

  6. jmeter 测试websocket接口(一)

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

  7. jmeter测试java服务_Jmeter 测试 JMS (Java Message Service)/ActiveMQ 性能

    前言 JMS 介绍:JMS 即 Java 消息服务(Java Message Service)应用程序接口,是一个 Java 平台中关于面向消息中间件(MOM)的 API,用于在两个应用程序之间,或分 ...

  8. 三分钟构建高性能 WebSocket 服务 | 超优雅的 SpringBoot 整合 Netty 方案

    前言 每当使用SpringBoot进行Weboscket开发时,最容易想到的就是spring-boot-starter-websocket(或spring-websocket).它可以让我们使用注解, ...

  9. 使用BeetleX.NetBenchmark压测TCP,HTTP和Websocket服务

    真没想到大过年还在家里写代码写文章,本来还打算自驾半个月没想出现这情况.在这里祝福全国同胞在新的一年里身体健康!希望阳光天气早日照射在这片土地上,给人带来新一年的希望! NetBenchmark是针对 ...

最新文章

  1. 项目管理必知的7个重点
  2. java工作流引擎证照库类型的流程设计 实现方案与演示案例
  3. vue-quill-editor上传内容由于图片是base64的导致字符太长的问题解决
  4. android pcm频谱_Android音频可视化
  5. linux 脚本socket通信,Linux实例:用socket通讯远程执行命令
  6. php rpc连接Python,PHP语言之Python、PHP通过xml-rpc进行通信,xml-rpc中文的解决
  7. 如何将 Azure 上的 Ubuntu 19.10 服务器升级到 20.04
  8. 武汉大学linux课程,武汉大学超算中心
  9. UEFI+GPT与BIOS+MBR的优缺点
  10. 匹马行天下之思维决定高度篇——编程“价”更高
  11. 剑指offer——面试题41-2:和为S的两个数字
  12. Tomcat、Servlet、Servlet容器
  13. 数据结构试卷及答案(六)
  14. PS--常用操作技巧(一)快捷键
  15. “一县一店·全国乡土消费社群”平台:助力乡村振兴农产上行
  16. zookeeper初步
  17. UG NX 三维PMI标注培训
  18. 如何将数字123转化成大写的文字 一百二十三 或 一二三?
  19. 【人事】面试仪表你必须要注意
  20. 爬虫笔记八----selenium

热门文章

  1. 数学建模之主成分分析(PCA)
  2. 【练拳不练功,到老一场空】深入浅出计算机组成原理
  3. PCB板“ESD保护电路设计”9大措施,拿来吧你!
  4. sw运行很卡怎么办_solidworks2016在win10下运行很卡怎么办_solidworks在win10中打开缓慢如何解决...
  5. 数学建模学习(67):XGBoost分类模型详细入门案例教程
  6. Java实战:仿QQ游戏大厅五子棋
  7. 分享一个开源的番茄计时器应用『极简番茄』和 统计图的库
  8. access查找出生日期年份_Access:按时间段查询信息
  9. 手机百度网盘倍速播放的方法步骤
  10. Scale-Invariant Error