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配置连接
运行结果