【性能测试】Jmeter下载安装、环境配置-小白使用手册(1)

发布于:2025-03-11 ⋅ 阅读:(15) ⋅ 点赞:(0)

本篇文章主要包含Jmeter的下载安装、环境配置

添加线程组、结果树、HTTP请求、请求头设置。JSON提取器的使用,用户自定义变量

目录

一:引入

1:软件介绍

2:工作原理

3:安装Jmeter

4:启动方式

(1)命令⾏启动

(2)手动启动

5:语言配置

二:基础使用

1:线程组&参数介绍

(1)Ramp-Up 时间

(2)调度器持续时间

(3)循环次数

2:添加结果树

(1)响应时间

(2)响应码

 3:添加HTTP请求

(1)HTTP默认请求值

4:请求头的设置 

(1)bug复现

(2)建立HTTP请求头管理器

(3)在请求头中加入token后正确返回结果

(4)作用域设置

(5)错误信息分析

二:JSON提取器

1:引入

(1)问题引入

(2)JSON Path Tester

(3) JSON操作符

(4)具体使用例子

(5)避免重覆盖问题

(6)解决方式

2:运用JSON提取器

三:用户定义变量

四:设置请求头格式 

1:bug引入

2:解决思路

3:正确示例


一:引入

1:软件介绍

Apache JMeter是Apache组织基于Java开发的压⼒测试⼯具,⽤于对软件做性能测试

2:工作原理

3:安装Jmeter

链接直达:Apache JMeter - 下载 Apache JMeter

4:启动方式

(1)命令⾏启动

这里阿华安装的是5.5版本,版本不影响启动方式,在用户菜单中搜索环境变量

点击新建变量,把你刚下载的文件的路径——找到那个bin就可以了。变量名字随意,变量值要对应路径

然后windows+r   回车键 ——打开命令操作,输入jmeter,就可以启动我们的软件了

(2)手动启动

5:语言配置

找到jmeter.properties这个文件,用记事本打开,修改language=zh_CN

二:基础使用

1:线程组&参数介绍

看图说话。这俩个参数容易混淆,Ramp-Up,指的是我们10个线程在这1s内匀速启动,调度器的持续时间是,这个说的是这10个线程启动后(也就是1s后),持续测试的时间(这里勾选了永远,即使写了2s,也会一直测试下去)。

(1)Ramp-Up 时间

控制的是线程的启动节奏

(2)调度器持续时间

控制的是整个测试运行的时长

(3)循环次数

指的是要执行的轮次(比如说我设置个循环次数为2,那第一轮10个线程1s启动完,在持续2s不断地发送请求,之后结束第一次循环,紧接着进入第二次循环,还是这10个线程慢启动1s,在持续2s不断地发送请求......)

注意点①:调度器的持续时间是要等所有线程启动后,才开始计时

注意点②:一轮循环结束,新一轮循环还是这10个线程,需要重新匀速启动,在持续时间内发送请求

注意点③:如果这里不勾选,永远,这个选项,那么一定要在输入框中输入数字,否则,在启动的时候,会自动勾选上永远

2:添加结果树

这里用来查看我们查看发出请求后收到的响应结果

 取样器结果中需要去关注的信息

(1)响应时间

load time 响应时间  单位是ms

(2)响应码

(这里的响应时间就不正常)Response code

 3:添加HTTP请求

(1)HTTP默认请求值

同一个系统中协议,ip,端口是不会发生改变的,所以我们把这些信息提取出来,放到默认值当中,注意它们的作用域是同级的!

注意点:当取样器中存在未配置的选项,会直接去http请求默认配置中取;取样器中配置了的选项就不会去默认配置中取了。

4:请求头的设置 

(1)bug复现

主要是针对登录的状态

举例,看我们在浏览器中登录后,请求头中就有了这个JWT令牌

(2)建立HTTP请求头管理器

(3)在请求头中加入token后正确返回结果

(4)作用域设置

因为有拦截器的设置,所以没有token令牌的页面是不会正确加载的,我们如果把这个默认请求头设置放到同级作用域,那还要登录干啥呀,所以把这个头管理器放到列表页就OK了。

将登录后的data拿过来

(5)错误信息分析

如果我们在HTTP请求当中把域名写错,会报下面这个错误

二:JSON提取器

1:引入

(1)问题引入

我们配置的这个token是死的,一旦过期,或者重新请求token更新了,那么我们这个请求头中的token就无效了,所以想一想

那可不可以将每次我们登录后拿到的token抽取出来———>赋值到我们的默认HTTP请求头当中呢

(2)JSON Path Tester

有可能会遇到兼容性问题,重启一下Jmeter即可,直到 test按钮出现为止

(3) JSON操作符

(4)具体使用例子

同样我们也可以提取到code等等

提取data中的数据记为变量token,可以这么理解奥

这里用的时候用{}选择token就行了

此时我们在进行请求就可以正常访问了,

发问:我把取用户登录凭证放到登录前面不会产生影响吗,我这都还没登录呢?——这里我们把提取用户登录凭证(也就是Json提取器)放到线程组的前方(这个顺序不影响结果),它的作用范围是同级

(5)避免重覆盖问题

梳理一下——发起登录请求——>拿到返回值中的data数据(也就是token)记为token (token=$.data)——>在把这个${token}设置为HTTP响应头,当我们请求列表页的时候,HTTP响应头中就会带上这个token——>但是问题来了,此时列表页也会返回回来相关data数据,那么我们的token = $.data就被覆盖了,下次发起新的HTTP请求,请求头当中就不在是令牌了,而是我们列表页返回回来的data数据——这不就g了

(6)解决方式

第一步:把提取用户登录凭证放到登录当中,这里我们的登录请求中也会携带token,但是token为空(我们还没登录成功呢嘛)

第二步:把HTTP信息头管理放到最前面,作用于整个同级作用域之内

============================================================

总结:我们的HTTP信息头管理器中配置的token变量 ,它去取数据的时候,会去同级和同级的子集中去找,找到就给你拿过来!!

2:运用JSON提取器

如果我们的blogId=9999不存在,就g了,那考虑我们能不能把这个9999写成活的不要写死。

继续JSON提取器, 提取我们列表页中有效的blogId,设置为blogId

后续使用的时候直接${blogId}就可以用了!!如下

三:用户定义变量

想象一下,如果有一个blogId需要重复使用过,我们能不能定义一个变量来统一管理呢?

假设现在有200个请求都要去请求blogId=1993,这里我们就可以提出来,进行统一管理

四:设置请求头格式 

1:bug引入

场景引入,有一些内部的接口 ,限制了请求头中的格式为application/json,而并非Jmeter中默认的 charset=UTF-8

所以我们设置一下请求头的属性,但是这个位置不要乱放,应该放到添加博客这个级别下,否则就作用于全局啦!!

2:解决思路

第一步:去网页web前端查看一下,F12查看网页请求中的请求头信息

第二步:去postman中测试是否是content-type的原因

第三步:定位到bug之后,去Jmeter对应接口测试下中设置请求体格式为application/json

第四步:测试

3:正确示例


网站公告

今日签到

点亮在社区的每一天
去签到