Jmeter 压测保姆级入门教程

1、Jmeter本地安装

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伺候就停止压测。
    在这里插入图片描述

具体该配置的并发行为可以用下图来形象的表示。 可以看到一开始是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

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

3.1、 压测接口Hello World

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、启动线程组执行压测
操作: 右键线程组-》启动
原理: 线程组会去并发执行线程组下面配置的所有取样器(这里只添加了一个还可添加多个)

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

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的日志输出默认就是告诉我们应该这样做
具体的官方文档: https://jmeter.apache.org/usermanual/best-practices.html

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

JoySSL OV证书

JoySSL OV证书全称为Organization Validation SSL证书&#xff0c;属于组织验证型SSL证书。它是一种增强型的SSL证书&#xff0c;不仅能够提供基本的数据加密功能&#xff0c;还能提供更高级别的安全保障。通过验证申请者身份的方式&#xff0c;确保了用户访问的网站是由合法的…

精益生产中的周转箱优势:提升效率与质量的得力利器

在当今竞争激烈的制造业中&#xff0c;企业追求高效生产和卓越质量是至关重要的。精益生产理念提供了一套有效的工具和方法&#xff0c;其中周转箱作为一个关键的组成部分&#xff0c;在优化生产流程、提高效率和质量方面发挥着重要作用。下面谈谈精益生产中的周转箱优势&#…

测试设备的选型

随着科技的不断发展和进步&#xff0c;各行各业都在积极地进行产业升级和转型。在这个过程中&#xff0c;各种测试设备发挥着不可或缺的作用。如何选择合适的测试设备&#xff0c;成为了企业生产过程中必须面对的重要问题。本文将探讨测试设备的选型&#xff0c;为企业提供一些…

roseha for windows 11+oracle 11g部署过程

文章目录 一、环境准备关闭防火墙配置hosts共享存储准备 二、部署步骤1.主机A、B安装数据库软件2.主机A进行数据库实例创建3.主机B创建数据库4.安装配置roseha软件 一、环境准备 windows server 2019 oracle 11.2.0.3 EE roseha for windows 11 5个IP地址&#xff1a;2心跳、3…

【开源】基于JAVA的衣物搭配系统

项目编号&#xff1a; S 016 &#xff0c;文末获取源码。 \color{red}{项目编号&#xff1a;S016&#xff0c;文末获取源码。} 项目编号&#xff1a;S016&#xff0c;文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、研究内容2.1 衣物档案模块2.2 衣物搭配模块2.3 衣…

Zookeeper 集群中是怎样选举leader的

zookeeper集群中服务器被划分为以下四种状态&#xff1a; LOOKING&#xff1a;寻找Leader状态。处于该状态的服务器会认为集群中没有Leader&#xff0c;需要进行Leader选举&#xff1b;FOLLOWING&#xff1a;跟随着状态&#xff0c;说明当前服务器角色为Follower&#xff1b;LE…

Python用爬虫ip抓取数据为啥还被限制ip?

今天遇到一个奇怪的事情&#xff0c;使用python爬取一个网站&#xff0c;但是频繁出现网络请求错误&#xff0c;之后使用了爬虫ip&#xff0c;一样会显示错误代码。一筹莫展之下&#xff0c;我对现在的IP进行在线测试&#xff0c;发现IP质量很差。后来我总结了以下几点原因。 P…

实时LCM的ImgPilot搭建部署

ImgPilot是具有实时潜在一致性模型&#xff08;LCM&#xff09;功能的图像试点 下载源码 GitHub - leptonai/imgpilot: Image pilot with the power of Real-Time Latent Consistency Modelhttps://github.com/leptonai/imgpilot安装前端web cd imgpilot npm install 安装…

opencv-使用 Haar 分类器进行面部检测

Haar 分类器是一种用于对象检测的方法&#xff0c;最常见的应用之一是面部检测。Haar 分类器基于Haar-like 特征&#xff0c;这些特征可以通过计算图像中的积分图来高效地计算。 在OpenCV中&#xff0c;Haar 分类器被广泛用于面部检测。以下是一个简单的使用OpenCV进行面部检测…

我的ros2机器人整体设置

树莓派---------上位机-----------不用安装vscode stm32---------下位机------------安装micro_ros---------不用安装vscode Windows笔记本电脑----------工作平台------安装vscode--------安装STM32CubeMX-----安装KEIL ARM visual studio code 只需要安装在工作平台上面--即…

【Go语言从入门到实战】反射编程、Unsafe篇

反射编程 reflect.TypeOf vs reflect.ValueOf func TestTypeAndValue(t *testing.T) {var a int64 10t.Log(reflect.TypeOf(a), reflect.ValueOf(a))t.Log(reflect.ValueOf(a).Type()) }判断类型 - Kind() 当我们需要对反射回来的类型做判断时&#xff0c;Go 语言内置了一个…

uniapp高德、百度、腾讯地图配置 SHA1

uniapp高德、百度、腾讯地图配置 SHA1 当winr弹出cmd弹框后输入 keytool -list -v -keystore debug.keystore 显示keytool 不是内部或外部命令&#xff0c;也不是可运行的程序或批处理文件。可以先看看是否有下载jdk且配置了环境变量&#xff0c;具体操作如下&#xff1a;keyto…

docker compose搭建渗透测试vulstudy靶场示例

前言 渗透测试&#xff08;Penetration test&#xff09;即网络安全工程师/安全测试工程师/渗透测试工程师通过模拟黑客&#xff0c;在合法授权范围内&#xff0c;通过信息搜集、漏洞挖掘、权限提升等行为&#xff0c;对目标对象进行安全测试&#xff08;或攻击&#xff09;&am…

关于鸿蒙网络请求的问题

https://developer.huawei.com/consumer/cn/forum/topic/0204136145853212268?fid0102683795438680754 鸿蒙OS 代码 import http from ohos.net.http;export const httpUtils (url: string, data: any) > {return new Promise((resolve, reject) > {let httpRequest …

都2023年了,为什么大家还都在吹捧 Python?

2023 年&#xff0c;Python 还可学吗&#xff1f; 答案当然是可。 近些年间&#xff0c;Python 的火热有目共睹&#xff0c;作为一种功能强大的高级编程语言&#xff0c;在 2018 年的时候它的流行程度就得到了大幅提高。 图源&#xff1a;Stack Overflow 网站编程语言浏览量统…

Jmeter基础和概念

JMeter 介绍&#xff1a; 一个非常优秀的开源的性能测试工具。 优点&#xff1a;你用着用着就会发现它的重多优点&#xff0c;当然不足点也会呈现出来。 从性能工具的原理划分&#xff1a; Jmeter工具和其他性能工具在原理上完全一致&#xff0c;工具包含4个部分&#xff1a; …

linux进程调度(一)-进程概述

一、什么是进程 进程是指计算机已运行的程序。程序本身只是指令、数据及其组织形式的描述。进程就是一个程序的执行实例&#xff0c;也就是正在执行的程序。在linux操作系统的中&#xff0c;进程就是一个担当分配系统资源CPU时间、内存的实体。进程控制的主要功能是对系统中的所…

接口测试学习路线

接口测试分为两种&#xff1a; 测试外部接口&#xff1a;系统和外部系统之间的接口 如&#xff1a;电商网站&#xff1a;支付宝支付 测试内部接口&#xff1a;系统内部的模块之间的联调&#xff0c;或者子系统之间的数据交互 测试重点&#xff1a;测试接口参数传递的正确性&…

PLC通过RS232转PROFINET与电子分析天平秤通讯案例

本案例是通过用兴达易控的XD-PNR200型RS232转Profinet网关连接电子分析天平秤与PLC通讯的配置案例&#xff0c;用到设备为西门子S7-1200PLC&#xff0c;RS232转Profinet网关&#xff0c;电子分析天平秤。 打开博图&#xff0c;添加PLC&#xff1b;本案例使用的是1200PLC。 添加…

精益制造中的周转箱和工具柜优势

制造业&#xff08;Manufacturing industry&#xff09;是指机械工业时代利用某种资源&#xff08;物料、能源、设备、工具、资金、技术、信息和人力等&#xff09;&#xff0c;按照市场要求&#xff0c;通过制造过程&#xff0c;转化为可供人们使用和利用的大型工具、工业品与…