JMeter配置和使用入门指南

🌈感谢大家的阅读、点赞、收藏和关注

💕希望大家喜欢我本次的讲解💕

性能测试工具jmeter可以用来做接口测试,广泛用于做性能测试(我们可以针对接口用postman来做功能测试,功能测试没有问题再来做性能测试)。

目录

✨jmeter的配置

打开jmeter的方式:

[1、找到保存jmeter的路径,打卡bin文件夹 在里面找到jmeter.bat文件然后双击打开。](#1、找到保存jmeter的路径,打卡bin文件夹 在里面找到jmeter.bat文件然后双击打开。)

[2、给jmeter的启动程序所在的文件配置环境变量,在终端执行命令 jmeter 打卡jmeter程序。](#2、给jmeter的启动程序所在的文件配置环境变量,在终端执行命令 jmeter 打卡jmeter程序。)

给jmeter设置成中文

字体调整

✨如何使用jmeter来配置一个基本的url请求?

1、创建线程组

2、创建请求

3、配置查看结果树

HTTP信息管理头器

元件作用域

HTTP请求默认值

JSON提取器

JSON断言


✨jmeter的配置

打开jmeter的方式:

1、找到保存jmeter的路径,打卡bin文件夹 在里面找到jmeter.bat文件然后双击打开。

就会弹出一个命令框和jmeter

注意,这两个任意一个关闭,jmeter都会退出关闭。

但是这种方法很麻烦 需要记住jmeter存放的位置再去点击jmeter.bat

2、给jmeter的启动程序所在的文件配置环境变量,在终端执行命令 jmeter 打卡jmeter程序。

需要先找到jmeter的bin所在路径复制

然后配置环境变量,找到path双击,然后新建环境变量,把刚刚复制的路径粘贴进去:

然后打卡cmd终端输入jmeter就能启动jmeter程序了

如果不配置环境变量的话,系统就识别不了jmeter命令不会启动程序。

给jmeter设置成中文

但是我们打开的jmeter是英文的,可以通过配置来设置成中文。

首先还是打开jmeter的bin文件,找到jmeter.properties文件

打开它找到langua=en这一行,把en换成zh_CN表示简体中文。

保存修改后,重新用命令打开jmeter就是中文了:

字体调整

默认打开jmeter后字体是比较小的

点击选项后有"放大"和"缩小"可调整字体大小。

针对接口进行性能测试首先需要对接口有一定的了解,比如接口的请求方法、url、有没有请求头的限制、请求参数的限制等。

✨如何使用jmeter来配置一个基本的url请求?

1、创建线程组

首先需要我们右键测试计划来添加一个线程组,

线程组中配置了多少个线程,就会有多少个线程同时请求我们的接口,进而达到并发的目的。

创建好了之后,如下图,这就是线程组的配置,

名称就是对这个线程组取一个名字,改了名字之后左侧"线程组"也会随之变化。

注释可以用来提醒我们这个线程组是用来干嘛的。

在取样器错误后要执行的动作,

继续------>比如 现在配置的线程组对我们的接口要发起5次请求,前2次成功,第3次失败了,"继续"就表示继续发起后续的2次请求。

我们一般都选择这个"继续 "。

启动下一进程循环------>比如 线程循环2次,每次 5 请求。第 3 次请求失败 → 放弃本次循环的 4、5 请求 → 直接开始第 2 次循环的 5 个请求

停止线程------>表示 这个线程立刻停止,不再执行任何后续请求。其他线程不受影响。

停止测试 是等待发起请求的线程结束了再停止,后续不再发起请求 、立即停止测试是不管现在线程是什么状态都立即停止。

线程数 我们可以理解为并发数 ,也可以叫虚拟用户数 。我们需要同时发起多少个请求,就填几个线程数。

Ramp-Up时间是启动所有线程所需要花费的总时间。

JMeter会在Ramp-Up时间内,均匀地启动指定数量的线程。比如我们线程数是10,Ramp-Up时间是5,那么JMeter会每隔0.5秒(5秒/10个线程)启动1个线程。

Ramp-Up时间可以模拟用户逐渐增加的场景,更真实地反映服务器性能。

循环次数表示循环执行线程组多少次。比如线程数是3,循环次数是2,那么一共就会发起请求6次。

勾选了"永远"的话,必须打开"调度器"并配置。

如上图,这就表示在2s内3个虚拟用户不断的发起请求,具体请求多少次是不得而知的。

2、创建请求

接下来就是右键线程组添加HTTP请求。

添加HTTP请求,我们需要知道:url+方法+请求参数+请求头中有没有特殊配置。

如何判断请求头中有没有特殊配置呢?有一个简单的方法,就是把 url+方法+请求参数 这三个直接填写到postman中去进行接口测试看看能不能跑通,如果能,说明请求头中不需要额外配置。

我们再来看一下HTTP的基本配置,如图
比如这个url,http://47.108.157.13:8090/blog_login.html,协议就是http,服务器名称或IP是 47.108.157.13, 端口号是 8090, 路径是/blog_login.html

点击"启动",就能运行这个测试计划

点击运行后会提示我们保存,需要我们保存一下文件。

运行起来之后我们感觉什么都没有发生 没看到效果,这就需要我们配置查看结果树

3、配置查看结果树

右键线程组,点击添加监听器,找到"查看结果树"。

这样配置好的 查看结果树 就和这个线程组下创建的HTTP请求在一个作用域,那么这个结果树就能查看到这个作用域中的所有请求结果。

现在我们再次点击运行,就能看到结果树中有请求

我们可以看到HTTP请求在取样器中,因此我们一般又会用取样器来代称HTTP请求。

通过接口请求前面的绿色盾牌、取样器结果中 Response code: 200都能判断出接口请求成功。


如图,这里的1-1、1-2、1-3前面的1指的是第一个线程组,1、2、3是线程的编号,这3个线程都在一个线程组中。

图中的Sample Start就是取样器(HTTP请求)的执行时间。

Load time是响应时间,单位是毫秒ms。

在请求中,我们可以看到请求头和请求体:

响应数据中,我们可以看到响应数据和响应体:

从图中响应头的信息我们可以看到响应体的格式是json格式。

但是jmeter默认的是text格式,我们可以自己手动切换

切换json格式后:

如下图,红色的一般就表示请求失败。

但是我们不能只通过盾牌颜色来判断成功与否,我们还需要检查接口返回的响应数据是否正确。


HTTP信息管理头器

未登录状态下请求某些接口会失败,需要我们携带用户的凭证。这就和我们在postman中进行某些接口测试是一样的,都需要在请求头中添加需要的信息才会执行成功。

但是在jmeter的HTTP请求中没有能添加请求头信息的地方,这就需要添加另外一个东西了------HTTP信息管理头器。

在HTTP信息头管理器中添加了配置后,线程组中的HTTP请求在发起请求之前都会给请求头添加上HTTP信息头管理器中添加的配置。

如果我只想让HTTP信息头管理器作用于某个HTTP请求,那么就在该HTTP请求下添加这个HTTP信息头管理器。我们也可以双击想要挪动的HTTP请求头管理器把它移动到想要作用的HTTP信息头管理器下面。

元件作用域

如果存在父子元件,则作用域是父子关系;

如果同一层级有多个HTTP请求,对于同一个线程按从上往下的顺序依次执行。

对于大多数配置元件,作用域在它所在的同一层级及子级。

HTTP请求默认值

我们还可以来添加HTTP请求默认值,

对于HTTP接口请求中的相同部分,我们可以填在HTTP请求默认值中,这样它作用的其它HTTP接口请求即使不填写这部分相同的内容也能成功发起请求。

因此当多个接口在发起请求时存在大量重复的http配置时,我们就可以将重复的这部分提取出来统一放进 HTTP请求默认值 中来管理,后续 HTTP取样器 中就不再需要填写这部分重复内容。(若HTTP请求中没有添加这部分配置才会从 HTTP请求默认值 中读取, 否则使用这个请求它自己的配置)

JSON提取器

用于提取 json返回数据 中的某个字段,需要用到json操作符。

操作符 描述
$ 表示根元素
@ 当前元素
* 通配符,匹配所有节点
.. 选择所有符合条件的节点
.<name> 子元素
['<name>' (, '<name>')] 括号表示子元素或子元素列表
[<number> (, <number>)] 数组索引或索引列表
[start:end] 数组切片操作符
[?(<expression>)] 过滤器表达式,表达式必须评估为布尔值

例如提取下面这段json数据:

{

"code": 200,

"data": {

"user": {

"id": 10086,

"name": "测试君",

"tags": [

"Java",

"JMeter",

"测试开发"

]

},

"orders": [

{

"id": 1,

"price": 99.0

},

{

"id": 2,

"price": 199.0

}

]

},

"message": "success"

}

操作符 作用 示例表达式 提取结果
$ 根节点入口 $.code 200
. 子元素定位 $.data.user.name 测试君
.. 递归搜索 (穿透) $..id 10086, 1, 2 (提取所有 id)
* 通配符 $.data.orders[*].price 99.0, 199.0
[] 数组索引 $.data.user.tags[1] JMeter (索引从 0 开始)
[,] 索引列表 $.data.user.tags[0,2] Java, 测试开发
[start:end] 数组切片 $.data.orders[0:1] [{"id":1,"price":99.0}]
[?()] 条件过滤 $.data.orders[?(@.price>100)].id 2
@ 过滤器内当前节点 同上 配合 ? 使用

我们也能在jmeter中来验证json操作符有没有用对,

把查看结果树的格式换成 JSON Path Tester,然后就会出现如下图这样的一个框,我们可以在里面输入我们想要提取的数据,如果写正确了,那么点击 Test 后下面就会出现对应的数据。

比如 我们给登录请求接口添加一个JSON提取器,

因为后续接口的请求头需要带上token才能成功请求,但token是有失效的,而登录接口的响应数据是返回了其它接口需要的token,

因此这个数据我们就可以用 json提取器 提取出来,由图可知,我们需要提取的数据的json表达式是 $.data

(登录接口的响应数据)

(给登录请求接口添加一个JSON提取器)

然后再通过 ${变量名} 的方式来获取提取到的数据,

HTTP信息管理头中的内容就可以写成 ${token}


在详情页接口请求中使用了具体的blogId,如果恰好这个id对应的博客被删除了,那么我们执行这个接口请求就会有问题。

但是列表页接口请求返回的数据中就包含了所有的博客id,只要列表中还有博客,就一定能返回博客id数据,因此我们也可以给 列表页接口请求 添加一个json提取器 来获取一个id。

我们就只获取第一个id,

然后就可以把 详情页接口请求 路径中的具体id换成 ${blogId)

JSON断言

前面我们判断接口请求有没有成功是根据绿色盾牌的图标+响应数据中的信息来判断的,

但是当接口请求非常多的时候,比如有100个、1000个,我们不可能挨着去判断是否成功。

因此我们可以使用到 JSON断言。

比如在登录接口请求的响应数据中有一个code字段 值为SUCCESS

假如只要有code就能判断这个接口请求成功了,

我们先给这个接口添加一个json断言,

Assert JSON Path exists 这里就填我们需要json断言判定的字段,

假如我们给json表达式设置为 $.codeaaa,json断言发现响应数据不存在这个codeaaa字段就报错了。

下图是JSON断言中其它部分的用法,当我们勾选上Additionally assert value的时候,我们就可以在Expcted Value框内输入想要给json表达式判断的值。

运行后如果这个字段存在且值和我们预期填写的一样就没有报错,否则就会报错。

我们填写的是FAIL,但实际code字段是SUCCESS就报错了。


💖感谢观看🌹

相关推荐
kaico20182 小时前
jenkins值之job的配置
java·jenkins
维度攻城狮2 小时前
TrendRadar:搭建新闻热搜自动化推送工具,打破信息差
运维·自动化·trendradar
xixixiLucky2 小时前
TreeSet |TreeMap|jar包|web包易混淆解答
java·开发语言
●VON2 小时前
2G 内存云服务器部署 Spring Boot + MySQL 实战:从踩坑到上线
服务器·开发语言·spring boot·mysql·ui·von
飞Link2 小时前
洞察数据的“分寸感”:深度解析对比学习(Contrastive Learning)
开发语言·python·学习·数据挖掘
飞函安全2 小时前
Vite 8.0:Rust.bundle,性能提升10-30倍
开发语言·人工智能·rust
liulilittle2 小时前
Debian/Ubuntu 18.04 上安装 GLIBC 2.28 (2026)
linux·运维·服务器·开发语言·c++·ubuntu·debian
Volunteer Technology2 小时前
核心框架源码常见问题(下)
java·开发语言·spring
兆子龙2 小时前
React useTransition:让 UI 更新更丝滑的并发特性
java·javascript