Jmeter 压测保姆级入门教程

  •  📢专注于分享软件测试干货内容,欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正!
  • 📢交流讨论:欢迎加入我们一起学习!
  • 📢资源分享:耗时200+小时精选的「软件测试」资料包
  • 📢 软件测试学习教程推荐:火遍全网的《软件测试》教程

1、Jmeter本地安装

官方文档地址: jmeter.apache.org/index.html

1.1、下载安装

软件下载地址: https://mirrors.tuna.tsinghua.edu.cn/apache/jmeter/binaries/ 选择一个压缩包下载即可

在这里插入图片描述

然后解压缩后进入bin目录直接执行命令jmeter即可启动

在这里插入图片描述

1.2 修改语言

默认是英文的,修改中文,点击选项-》选择语言-》简体中文

在这里插入图片描述

1.3 必备插件安装

jmeter内置的常用的插件不是很多,如果要额外安装其他插件需要先下载一个插件安装工具的jar包然后放到jmeter的目录下才能使用插件安装工具的功能。

  1. 插件安装工具下载地址

在这里插入图片描述

2) 下载jar包之后放到 jmeter的 /lib/ext 目录下,重启Jmeter即可。

3 打开插件管理。 选项-》 插件管理器

在这里插入图片描述

  1. 点击可用插件tab,然后勾选安装即可

    在这里插入图片描述

推荐勾选: 带jpgc相关的插件,可以做梯度增压

1.4 修改Jmeter的堆内存

由于压测是通过Jmeter这个Java程序去跑的,所以压测的性能和能开启的线程数量都与这个程序本身运行的环境以及配置有关。 一般Jmeter部署在服务器那边性能会更强。

修改jmeter的 /bin/jmeter 文件 (mac环境),如果是window修改 jmeter.bat 。 修改下图的这一行就是调整堆内存信息

${HEAP:="-Xms1g -Xmx8g -XX:MaxMetaspaceSize=656m"}

在这里插入图片描述

验证是否修改成功,重启使用jconsole工具连接Jmeter进程查看jvm信息即可看到是否修改成功。 或者使用jps命令查看进程号然后再jmap命令查看堆内存分配情况。

在这里插入图片描述

2、 Jmeter操作说明

2.1、测试计划

默认打开的界面如下, 一份测试计划就是一份jmx文件,点击保存就会弹出保存地址。 测试计划就是包含此次做压测的所有信息。 支持导入导出。

在这里插入图片描述

2.2 测试计划界面介绍

异常信息

  • 右上角那个小三角可以看到jemter的执行信息,如果你的压测执行不了可以去里面看看一般是报错了

用户自定义变量

  • 可以在这里配置压测的全局变量,这样我们在使用的时候就不用传具体的值,传变量的值即可。 这样以后要修改的话只需要修改这里的变量值就可以了就不用到处都修改了。
  • 比如我们压测的接口的域名肯定是都一样所以一般会提取出来做全局变量。比如下面配置全局变量域名host, 然后使用的时候就直接配 ${host}即可。

    在这里插入图片描述

2.3、配置元件

默认支持的配置元件列表,主要作用就是配置我们压测接口的一些参数配置

在这里插入图片描述

2.3.1、Http请求默认值

操作: 右键点击测试计划-》 添加-》 配置元件-》 Http请求默认值组件

作用

  • 一般压测的接口的很多请求参数可能是一致的。 所以这里可以设置压测接口时的默认请求参数。 这样就不用每次配压测接口都去配置,默认会带上这里配置的请求参数。

在这里插入图片描述

比如下图配置默认的http协议,以及默认的域名。 这里的域名配置就使用我们前面配置的全局变量 ${host}

在这里插入图片描述

2.3.2、HTTP信息头管理器

操作: 右键点击测试计划-》 添加-》 配置元件-》 HTTP信息头管理器

作用

  • Http请求默认值配置元件类似,都是配置压测接口的请求默认值。 不过这个元件就像其名字一样配置的是默认的Http请求头信息,这样压测接口就不用再配置Http请求头信息默认会带上
  • 比如我们可以配置常用的默认的请求头Content-TypeCookie 。 尤其是Cookie请求头 这样即使是登录接口也能进行调通。

在这里插入图片描述

2.3.3、CSV Data Set Config

操作: 右键点击测试计划-》 添加-》 配置元件-》 CSV Data Set Config

作用

  • 一般用于模拟生成不同的请求参数。 因为一般我们对一个接口进行压测真实的场景是请求参数是不同的

具体配置如下:

  • 主要是先配置一个csv文件的地址,然后指定列头变量字段名。 之后再配置压测接口的时候就可以把使用这些变量字段名。使用格式为: {变量名称}。 比如下面配置使用格式就是 {userName}.
  • 这样在请求压测接口的时候就会来随机读取这个csv文件的这个变量对应的列的某一个的值, 一般我们就是通过这个组件去模拟不同的请求参数。

在这里插入图片描述

2.4、线程组

线程组就是用来模拟并发的数量以及并发的行为。 比如你是要启动10个并发还是100个并发去压测接口就是通过这个组件。并且启动压测程序其实就是通过启动我们的线程组的执行压测。

自带带的线程组如下,其中带gc的使我们添加插件后才有的。 不同的线程组的区别就是设置的并发行为不同

  • 比如有些线程组是一股脑配10个并发然后一直执行10分钟。

  • 有些线程组是配置先启动1个并发,每过5秒后再启动10个并发,当到达100个并发后就执行10分钟。

    在这里插入图片描述

2.4.1、普通线程组

操作: 右键点击测试计划-》 添加-》 线程-》 线程组 作用

  • 下图就是我们配置一个线程组, 配置了20个并发,然后在5秒内启动完20个并发,循环次数为10000次就停止压测。注意: 最终接口请求数(样本数) = 线程数 x 循环次数

    在这里插入图片描述

具体该配置的并发行为可以用下图来形象的表示。 可以看到一开始是0个并发,然后随着时间增加不短增加并发,最终在第5秒达到最大并发20,然后就一直20个并发一直执行。

在这里插入图片描述

2.4.2、梯度线程组(Stepping Thread Group)

操作: 右键点击测试计划-》 添加-》 线程-》 jp@gc - Stepping Thread Group 作用

  • 与普通线程组的并发行为不同的是,这个线程组可以做到类似于先启动5个并发,然后隔10秒后再启动10个并发,当达到100个并发,持续执行30s,然后再每隔5秒降低20个并发这种更为详细的并发行为。 而普通线程组每次只能保持固定的并发数去跑, 我们只能不断修改这个固定的并发数去压测以求找到接口最大的吞吐量。 下图就形象的表示了这种驼峰式的并发行为

在这里插入图片描述

具体配置对应的语义和并发行为如下图所示:

  • this goup will start语义: 表示最多启动多大线程。对应图中的峰顶的值
  • first wait for语义: 从运行之后多长时间开始启动线程;若设置为60秒, 对应图中开头的底部横线。
  • then start语义: 表示第一次要启动几个线程。 对应图中第一个上升线。
  • next add语义 + threads every 语义: 表示每隔多少秒启动多少个线程。对应图中的上升梯度线。
  • using ramp-up 语义: 其中与普通线程组一样表示启动线程的时间。 对应图中的上升梯度线的斜度,越大越斜表示用的时间越久。
  • then hold load for语义: 表示达到最大线程后保持最大线程持续执行多久。 对应图中的峰顶的横线。
  • finally sotp + threads every语义: 达到峰顶后,表示每隔多少秒释放多个线程。 对应图中的下降梯度线。

2.5、取样器

如果说线程组就是我们Java的线程池,那么取样器就相当于我们线程池要执行的Runnable任务。比如我们要压测哪个接口就可以配置成取样器。

自带取样器如下

  • 操作: 右键线程组-》 添加-》取样器
  • 一般我们用的比较多就是Http请求取样器,用来压测接口。

    在这里插入图片描述

2.5.1、Http请求取样器

操作: 右键线程组-》 添加-》取样器-》 Http请求 作用: 主要就是用来配置Http接口的信息,包括请求域名,端口,接口路径、接口参数等等。 有了它就可以发起请求。

在这里插入图片描述

3、 实战案例

此处压测的接口代码逻辑: 模拟执行时间是500ms

    @GetMappingpublic String getA1(){try {Thread.sleep(500);} catch (InterruptedException e) {throw new RuntimeException(e);}return "33";}

3.1、 压测接口Hello World

3.1.1、压测配置和执行

1、在测试计划下面添加线程组,设置100个并发,持续执行600秒。

在这里插入图片描述

2、添加压测的接口 添加http取样器,并且配置接口信息

在这里插入图片描述

3、添加接口执行结果监听器

操作: 右键线程组-》添加-》监听器-》查看结果树。 这样我们接口是否调通以及返回结果都可以看到

在这里插入图片描述

4、添加压测接口汇总报告

操作: 右键线程组-》添加-》监听器-》汇总报告。 这样看到这个线程组压测的统计报告,包括吞吐量TPS、响应时间、是否异常,网络请求量,执行次数。

在这里插入图片描述

5、添加吞吐量TPS实时统计图(可忽略)

操作: 右键线程组-》添加-》监听器-》jp@gc - Transactions per Second。 这样就可以监测吞吐量的实时变化情况。

在这里插入图片描述

5、添加响应时间实时统计图(可忽略)

操作: 右键线程组-》添加-》监听器-》jp@gc - Response Times Over Time 这样就可以监测接口响应时间的实时变化情况。

在这里插入图片描述

5、添加激活线程实时统计图(可忽略)

操作: 右键线程组-》添加-》监听器-》jp@gc - Active Threads Over Time 这样就可以监测线程组的并发行为,因为线程组的组件有很多,如果不是非常熟悉可能都不知道自己配置的线程组正在模拟什么样的并发行为。

在这里插入图片描述

7、启动线程组执行压测

操作: 右键线程组-》启动

原理: 线程组会去并发执行线程组下面配置的所有取样器(这里只添加了一个还可添加多个)

3.1.2、压测结果分析

最后我们看下各部分压测结果:

1、首先是接口执行情况:

  • 都是绿色表示接口调通,并且右侧可看到接口响应结果。

在这里插入图片描述

2、我们看一下压测汇总报告统计:

  • 从下图可以看到样本数就是总共请求的数量, 平均值就是平均响应时间(单位是毫秒)结果跟我们接口代码逻辑还是一致的,最小值和最大值也是接口响应时间。 异常率就是接口调不通(吞不下)的概率。 吞吐量就是每秒能处理168个请求。

在这里插入图片描述

3、看一下吞吐量变化情况 随着并发数增加,最终一直维持在180到200的吞吐量之间

在这里插入图片描述

3、看下响应时间的变化 基本维持在500ms左右,与我们的代码逻辑耗时基本一致

在这里插入图片描述

3.2、 模拟不同的请求参数

1、新建一个CSV文件,里面放我们不同的请求参数,比如内容为

userId,userName
1,	zhangShan
2,  liSi
3,  xaioming

2、新增CSV 数据文件设置组件 将我们刚才新增的csv文件路径配到这里,然后配置变量名,并且设置忽略首行(因为我们的csv文件内容首行不是请求参数)

在这里插入图片描述

3、在Http取样器里面直接使用变量即可。 请求参数要使用变量地方就用{}包起来就行。 原理就是请求的时候会去随机读取该文件的的这个字段的值从而达到模拟不同请求参数的效果

在这里插入图片描述

3.3、 如何请求要登录验证的接口

这个看你们的登录验证逻辑,假如我们的登录信息是放在cookies里面,那么我们就可以添加HTTP信息头管理器,然后在里面配置cookie请求头信息。只要把我们的登录cookies放进去就可以执行成功。

在这里插入图片描述

缺点就是cookie失效后每次要重新配置,具体还有其他更自动化的解决方法

3.4、 接口如何上传文件

接口配置那选择文件上传, 配置配置具体的配置路径即可。会去读取上传。 然后参数名称写死file就行。 然后MIME根据具体来。 一般是application/octet-stream 或者 multipart/form-data即可。 如果要模拟上传不同的文件,同上面模拟不同请求参数一样,这里用变量填充代表文件路径即可。

在这里插入图片描述

3.5、 如何在服务端执行Jmeter压测(重要)

之前我们是通过本地Jmeter的GUI界面去进行压测的。但是官方不建议压测通过GUI模式去跑,而是使用CLI命令行的模式去跑压测。 所以我们得先准备测试计划文件.jmx, 然后使用jmeter的命令去跑测试计划。最终会将测试计划的结果报告保存到指定的文件。

具体命令:

jmeter -n -t [xxx.jmx] -l [results file] -e -o [Path to web report folder]
  • -n:非GUI模式,即在非客户端模式下运行JMeter
  • -t:指定待执行的JMeter脚本
  • xxx.jmx是要被执行的JMeter测试计划脚本即在JMeter客户端保存的脚本
  • -l: 指定相关结果到指定的文件中
  • results file就是压测结果保存的文件名,默认存放在命令行当前目录下
  • Path to web report folder 就是报告目录路径

其实细心的可能会发现我们启动jmeter的日志输出默认就是告诉我们应该这样做 具体的官方文档: jmeter.apache.org/usermanual/…

image.png

以下是我的执行命令案例:

jmeter -n -t 1.1版本xx测试计划.jmx -l result.txt -e -o report

(base) ➜  tmp6 ll
-rw-r--r--@ 1 burukeyou  staff    16K 11 23 14:19 1.1版本xx测试计划.jmx
(base) ➜  tmp6 jmeter -n -t 1.1版本xx测试计划.jmx -l result.txt -e -o report
Creating summariser <summary>
Created the tree successfully using 1.1版本xx测试计划.jmx
Starting standalone test @ November 23, 2023 2:21:03 PM CST (1700720463057)
Waiting for possible Shutdown/StopTestNow/HeapDump/ThreadDump message on port 4445
summary +      1 in 00:00:01 =    1.6/s Avg:   556 Min:   556 Max:   556 Err:     0 (0.00%) Active: 13 Started: 13 Finished: 0
summary +    299 in 00:00:06 =   50.9/s Avg:   509 Min:   504 Max:   556 Err:     0 (0.00%) Active: 0 Started: 100 Finished: 100
summary =    300 in 00:00:07 =   46.0/s Avg:   510 Min:   504 Max:   556 Err:     0 (0.00%)
Tidying up ...    @ November 23, 2023 2:21:09 PM CST (1700720469740)
... end of run
(base) ➜  tmp6 ll
total 216
-rw-r--r--@ 1 burukeyou  staff    16K 11 23 14:19 1.1版本xx测试计划.jmx
-rw-r--r--  1 burukeyou  staff    44K 11 23 14:21 jmeter.log
drwxr-xr-x  6 burukeyou  staff   192B 11 23 14:21 report
-rw-r--r--  1 burukeyou  staff    41K 11 23 14:21 result.txt

可以发现跑完压测报告后最终在生成了result.txt文件和report目录,进入report目录找到index.html浏览器打开即可看到报告如下

image.png

jmeter -n -t [xxx.jmx] -l [results file]执行压测也可不指定 Path to web report folder参数。 只生成 results file. 然后通过 jmeter -g result.txt -o output 命令使用结果文件去生成Html报告。

比如:

(base) ➜  tmp6 ll
total 136
-rw-r--r--@ 1 burukeyou  staff    16K 11 23 14:19 1.1版本xx测试计划.jmx
-rw-r--r--  1 burukeyou  staff   5.3K 11 23 14:26 jmeter.log
-rw-r--r--@ 1 burukeyou  staff    41K 11 23 14:21 result.txt
(base) ➜  tmp6 jmeter -g result.txt -o output 
(base) ➜  tmp6 ll
total 152
-rw-r--r--@ 1 burukeyou  staff    16K 11 23 14:19 1.1版本xx测试计划.jmx
-rw-r--r--  1 burukeyou  staff    14K 11 23 14:29 jmeter.log
drwxr-xr-x  6 burukeyou  staff   192B 11 23 14:29 output
-rw-r--r--@ 1 burukeyou  staff    41K 11 23 14:21 result.txt

如果看压测的每个请求结果响应类似GUI界面那样,可以在jmeter的GUI界面的查看结果树组件的浏览那里导入结果文件即可。

image.png


最后如果你想学习提升找不到资料,没人答疑解惑时,请及时加入群,里面有各种测试开发资料和技术可以一起交流哦。

最后: 下方这份完整的软件测试视频教程已经整理上传完成,需要的朋友们可以自行领取 【保证100%免费】

软件测试面试文档

我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/216569.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Synchronized 优化

目录 前言 重点 一、 轻量级锁 二、锁膨胀 三、重量锁 四、偏向锁 五、其他优化 我的其他博客 前言 Java synchronized 是一种机制&#xff0c;可以保证多个线程在访问共享资源时的同步性。synchronized 关键字可以用于方法或代码块上&#xff0c;当一个线程获取了这个对…

消息中间件比较

那都有哪些中间件可供选择呢。其实现在主流的消息中间件就4种&#xff1a;kafka、ActiveMQ、RocketMQ、RabbitMQ 下面我们来看一下&#xff0c;他们之间有什么区别&#xff0c;他们分别应该用于什么场景 ActiveMQ 我们先看ActiveMQ。其实一般早些的项目需要引入消息中间件&…

Java笔记草稿——已完成

导航&#xff1a; 【Java笔记踩坑汇总】Java基础JavaWebSSMSpringBootSpringCloud瑞吉外卖/黑马旅游/谷粒商城/学成在线设计模式面试题汇总性能调优/架构设计源码-CSDN博客 推荐学习视频&#xff1a; 黑马程序员全套Java教程_哔哩哔哩 尚硅谷Java入门视频教程_哔哩哔哩 目录 零…

Unity_ET框架项目-斗地主_启动运行流程

unity_ET框架项目-斗地主_启动运行流程 项目源码地址&#xff1a; Viagi/LandlordsCore: ET斗地主Demohttps://github.com/Viagi/LandlordsCore下载项目到本地。 启动运行步骤&#xff1a; 下载目录如下&#xff1a; 1. VS&#xff08;我用是2022版VisualStudio&#xff09…

快速上手linux | 一文秒懂Linux各种常用目录命令(上)

&#x1f3ac; 鸽芷咕&#xff1a;个人主页 &#x1f525; 个人专栏:《C语言初阶篇》 《C语言进阶篇》 ⛺️生活的理想&#xff0c;就是为了理想的生活! 文章目录 一 、命令提示符和命令的基本格式1.1 如何查看主机名称及修改 二、命令基本格式2.1 命令格式示例2.2 参数的作用…

C# WebSocket简单使用

文章目录 前言Fleck调试工具初始化简单使用 前言 最近接到了一个需求&#xff0c;需要网页实现上位机的功能。那就对数据传输的实时性要求很高。那就只能用WebSocket了。这里简单说一下我的WebSocket如何搭建 Fleck C# WebSocket(Fleck) 客户端:html Winfrom Fleck Github官网…

Kafka集成springboot

安装kafka&#xff0c;直接到官网下载bin文件&#xff0c;本文使用windows进行使用kafka。 下载之后&#xff0c;第一步&#xff0c;启动zookeeper&#xff1a; zookeeper-server-start.bat ..\..\config\zookeeper.properties 第二步&#xff0c;启动kafka&#xff1a; kafka…

对比SPI、UART、I2C通信的区别与应用

SPI、UART、I2C通信是常用的数字通信协议&#xff0c;它们在不同的场景下有不同的应用。下面&#xff0c;我将分别介绍它们的特点、区别与应用。 SPI通信 SPI通信是一种串行同步通信协议&#xff0c;它的全称为“Serial Peripheral Interface”。SPI通信是一种单主多从的通信方…

你都那么老了,还在每天写博客吗?

关注卢松松&#xff0c;会经常给你分享一些我的经验和观点。 白色便民网&#xff1a;我想多开一个公司会不会被税局查? 事件背景&#xff1a; 松松已创业9年&#xff0c;自媒体14年&#xff0c;经历过从0开公司、项目失败、赚钱等各种高光时刻。所以对于小微企业经营还是…

程序中关于时间和比较运算符的单词

时间 在日志中&#xff0c;我们经常碰到关于一些时间的单词缩写 比如这个Fri Dec 1 就代表了Friday &#xff08;星期五&#xff09;&#xff0c; December &#xff08;十二月&#xff09; 12月1日星期五 或者使用date查看时间的时候 dateWed Dec 13 05:55:54 PM CST 2023这…

OfficeWeb365 SaveDraw 文件上传漏洞复现

0x01 产品简介 OfficeWeb365 是专注于 Office 文档在线预览及PDF文档在线预览云服务,包括 Microsoft Word 文档在线预览、Excel 表格在线预览、Powerpoint 演示文档在线预览,WPS 文字处理、WPS 表格、WPS 演示及 Adobe PDF 文档在线预览。 0x02 漏洞概述 OfficeWeb365 Sav…

Win10 安装.NET Framework 3.5 报错0x80240438

环境&#xff1a; Win10专业版 NET Framework 3.5 问题描述&#xff1a; Win10 安装.NET Framework 3.5 报错0x80240438 解决方案&#xff1a; 1.检查自动更新服务是否未开启&#xff0c;开启自动更新失败&#xff0c;用工具开启自动更新,重启电脑&#xff08;未解决&am…

Proxmox创建Windows虚拟机

文章目录 下载ISO安装文件上传 下载ISO安装文件 下载地址&#xff1a;https://www.xitongzhijia.net/ 也可去官网进行下载 上传 将下载的ISO文件上传到Proxmox 选择ISO文件进行上传 上传后再ISO镜像中可以看到安装文件 点击创建虚拟机 填写名称&#xff0c;不能填写中文 镜…

团建策划信息展示服务预约小程序效果如何

团建是中大型企业商家每年举办的员工活动&#xff0c;其形式多样化、具备全部参与的娱乐性。但在实际策划流程及内容时&#xff0c;部分公司便会难以入手&#xff0c;术业有专攻&#xff0c;这个时候团建策划公司便会发挥效果。 如拓展训练、露营、运动会、体育竞技等往往更具…

[Linux] 基于LAMP架构安装论坛

一、安装Discuz论坛 1.1 创建数据库&#xff0c;并进行授权 mysql -u root -p123CREATE DATABASE bbs; #创建一个数据库GRANT all ON bbs.* TO bbsuser% IDENTIFIED BY admin123; #把bbs数据库里面所有表的权限授予给bbsuser,并设置密码admin123flush privileges; #刷新数据库…

Linux系统调试课:I2C tools调试工具

文章目录 一、如何使用I2C tools测试I2C外设1、I2C tools概述: 2、下载I2C tools源码:3、编译I2C tools源码: 4、i2cdetect 5、i2cget 6、i2cdump

docker基本管理和相关概念

docker是什么&#xff1f; docker是开源的应用容器引擎。基于go语言开发的。运行在Linux系统当中开源轻量级的“虚拟机”。 docker的容器技术可以在一台主机上轻松的为任何应用创建一个轻量级的&#xff0c;可移植的&#xff0c;自给自足的容器。 docker的宿主机是Linux系统…

天池SQL训练营(四)-集合运算-表的加减法和join等

-天池龙珠计划SQL训练营 4.1表的加减法 4.1.1 什么是集合运算 集合在数学领域表示“各种各样的事物的总和”, 在数据库领域表示记录的集合. 具体来说,表、视图和查询的执行结果都是记录的集合, 其中的元素为表或者查询结果中的每一行。 在标准 SQL 中, 分别对检索结果使用 U…

Spring Cloud gateway - CircuitBreaker GatewayFilte

前面学习Spring cloud gateway的时候&#xff0c;做测试的过程中我们发现&#xff0c;Spring Cloud Gateway不需要做多少配置就可以使用Spring Cloud LoadBalance的功能&#xff0c;比如&#xff1a; spring:application:name: spring-gatewaycloud:gateway:routes:- id: path…

Python 自动化之修理PDF文件(二)

PDF文件_合并与拆分PDF文档Pro版本 文章目录 PDF文件_合并与拆分PDF文档Pro版本前言一、要做成什么样子二、主要用到的函数三、基本思路1.引入库2.创建用户输入模块3.确定主框架 四、文档合并代码模块1.用户输入和函数调用2.引导用户输入文档信息3.合并文档内容4.命名新文档生成…