Jmeter实验
一、基础操作
启动Jmeter
点击bin目录下的,jmeter进行启动

修改界面语言为中文


发起一个最基本的请求
GET请求
线程组,Http请求,察看结果树





提示:参数、消息体数据这两个按钮是互斥的、只要其中一个有数据,就无法选中另一个了

清除察看结果树的结果

察看结果树的作用范围



设置请求跟随重定向



响应断言-响应文本
判断响应文本中是否有"百度一下"



判断响应文本中是否有"百度一下"和"百度两下"


判断响应文本中是否有"百度一下"和"你就知道"


增加一个断言,判断响应文本中是否有"百度两下",发现响应没有通过断言,因此只有所涉及的断言都为真,察看结果树里才为绿色

响应断言-响应代码(状态码)
测试发现,判断响应代码是以最后一个响应包的状态码为判断依据
先单纯的请求一个存在重定向的网址


开始断言响应代码,由下可见,是以重定向后最后一个请求的状态码为判断依据


关闭跟随重定向,断言302遍通过了


Json断言
通过测试发现,响应数据为json格式的情况,依然可以使用上面的响应断言来进行断言。
看一下正常运行的结果,此接口功能为查询ip归属地


获取json内的值的方法

添加json断言

json断言1


json断言2


json断言3


json断言4


后置处理器
先写出正则"city":"(.?)",匹配出所需要的东西,对于需要的内容,(.?) 这个括号得用,因为在正则表达式处理器中,需要选择要提取哪个分组,所以在正则表达式中得用括号来形成分组

配置正则表达式处理器

常规配置
引用名称,是把匹配的结果定义为一个变量,后续调用方式为${city}
$1$代表第一个分组,在这里我们也只写了一个分组
匹配数字1代表匹配到matchs中的第1个match


运行正确,前一个请求的响应数据,被匹配出来后,代入到后一个请求中
(这个在每次请求都需要更新token的情况,就可以用了)


再测试一下正则表达式提取器的细节

模板写$1$代表使用第一个分组



模板写$2$代表使用第二个分组




Jmeter使用函数

Random函数

设置线程组循环次数为3,查看运行结果,看到产生了随机数




但是第三个请求,红色的没有成功,由于请求频率太快了,在这里尝试加入一个定时器,三个请求都获得了正常的响应



counter函数

设置线程组循环次数为3,查看运行结果,看到产生了从1开始的递增1,2,3。




V函数
在测试计划中,添加用户定义的变量

单纯的调用变量

使用到了address_1的值

现在想依次使用 address_1、address_2、address_3
若像下面这样,则不能达到我们的目的


所以要使用V函数
填入
address_${__counter(false,)}
生成
${__V(address_${__counter(false,)},)}

循环次数设置为3,运行,看到使用V函数达到了目的




Jmeter定时器
在第HTTP请求2中加一个固定定时器,设置线程延迟5秒,便会在发起HTTP请求2之前,等待5秒


添加一个监听器-用表格查看结果,这样比较直观


把线程组的线程数改为2(也就是代表2个用户),看看情况

可以看到每个线程的http请求2,在发起请求之前,都会等待5秒


Jmeter http请求默认值

填写默认值,类似于编程里函数的缺省参数,若该配置原件作用域内的请求没有填写值的话,就使用默认值,否则就使用填写进去的值



运行结果


Jmeter http信息头管理器
以下面这个请求包为例
GET /-0U_dTmfKgQFm2e88IuM_a/ps_fp.htm?pid=superman&fp=undefined&im=undefined&wf=undefined&br=3&qid=0xe19b53a60000a467&bi=E00733E6DB1132C3BDB30C1FCBD4AC01:FG=1 HTTP/1.1
Host: sp3.baidu.com
Cookie: BAIDUID=E00733E6DB1132C3BDB30C1FCBD4AC01:FG=1; BIDUPSID=E00733E6DB1132C3593AA4A3AB7EB685; PSTM=1681867541; H_PS_PSSID=38515_36552_38470_38351_38364_38468_38486_37926_37709_38356_26350; BDORZ=FFFB88E999055A3F8A630C64834BD6D0; BDRCVFR[gltLrB7qNCt]=mk3SLVN4HKm; delPer=0; PSINO=7; BA_HECTOR=21a52h0lal252520ah01a4ag1i3umqt1m; ZFY=:AUQpANihlHKS9ZwOdYuA:BQo:AV:AV:AxnBTg33OUIk8iOc:C
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/112.0
Accept: image/avif,image/webp,*/*
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Referer: https://www.baidu.com/
Sec-Fetch-Dest: image
Sec-Fetch-Mode: no-cors
Sec-Fetch-Site: same-site
Te: trailers
Connection: close
添加信息头管理器,它的作用范围则是它自己的作用域

复制请求包里所需要的请求头信息,点击从剪切板添加,便会自动填充


运行结果,请求头带入到了请求中,但是比较奇怪的是,cookie放到了request body中,不知道为什么会这样

Jmeter http代理服务器
想要抓取https的包,得把Jmeter的证书导入到浏览器里,自行百度。
配置代理服务器

目标控制器,指定抓到的数据包,放到哪个线程组
Naming scheme,接口显示的内容格式

设置过滤的数据包类型,点击添加后,在后面加上.* 过滤才生效

点击启动

配置浏览器代理

刷新页面,得到抓包结果

添加察看结果树,运行一下,可看到运行结果

Jmeter http cookie管理器(未完善)
Jmeter参数化
JMeter中常用的参数化方式:
1、用户参数(User Parameter):适用于参数取值范围很小,需要少量测试数据时使用。
2、用户自定义变量(User Defined Variables):更多用于设置全局变量,常用于数据库地址,测试环境、开发环境地址等常量配置。
3、CSV数据文件设置(CSV Data Set Config)。
用户参数和用户自定义变量
用一个例子来进行说明




运行结果


删除测试计划中的-用户定义的变量

运行结果


CSV数据文件设置

准备测试数据,我这里使用的是Tab键分隔的

给每一列,定义为一个变量,至于其它的选项,等用到的时候,再自行选择


有5行数据,线程数设置为5,刚好把txt里的数据用完

运行结果



Jmeter逻辑控制器
一堆堆的、暂时没有需要用到的场景,未学习使用

Jmeter连接数据库
访问https://downloads.mysql.com/archives/c-j/,下载Jmeter连接数据库需要用到的驱动程序,所需下载的版本,与mysql的版本有关,自行查看版本对应关系后选择匹配版本进行下载,以下为下载结果,把jar文件放到jmeter的bin目录下


启动数据库

使用Jmeter配置连接




运行结果




















