Jmeter工具入门-新手小白必学
详细介绍Jmeter工具的使用,大全。
Jmeter简介
JMeter,一个100%的纯Java桌面应用,由Apache组织的开放源代码项目,它是功能和性能测试的工具。具有高可扩展性、支持Web(HTTP/HTTPS)、SOAP、FTP、JAVA等多种协议的特点。
官方网站:https://jmeter.apache.org/ 下载Binaries二进制包zip 官网有最全的工具手册
Jmeter安装与配置
- 本机配置好Java环境变量
- 官网下载压缩包,在任意目录下解压
- 修改配置文件,打开Jmeter的bin目录下jmeter.properties,修改
language=zh_CN
sampleresult.default.encoding=utf-8 - 进入到Jmeter的bin目录下,双击jmeter.bat启动
Jmeter主要元件
- 测试计划
- 线程组
- 采样器(sampler)
- 断言
- 监听器
Jmeter基本元件-线程组
添加线程组并设置参数大小:测试计划→添加→Threads →线程组
线程组:代表一组用户,代表一群人,一个线程就是一个并发用户
Jmeter基本元件-http请求
添加HTTP请求:线程组下添加→Sampler →HTTP请求
Jmeter超时处理
查看结果树:添加查看结果树:监听器-查看结果树
JSON断言:对于返回结果的判断,绿的成功,红的失败
- Jmeter默认情况下,会对HTTP接口做一个协议层面的判断,即响应状态码是否是200,并非基于业务
添加断言-JSON断言
json路径表达式
$.code 代表json中的code字段值
详细用法参见:https://github.com/json-path/JsonPath
响应断言:可以判断接口返回的所有文本的内容,功能更广,更强大
- 包括(Contains):如果响应中包含了指定的字符串,判断为成功,支持正则表达式
- 匹配(Matches):如果响应完全匹配指定的字符串,判断为成功,支持正则表达式
- 相等(Equals):如果响应完全匹配指定的字符串,判断为成功,不支持正则表达式
- 子字符串(Substring):如果响应中包含了指定的字符串,判断为成功,不支持正则表达式(使用最多)
- 或者or 字段返回是否包含其中一个,not否
定义全局变量
Jmeter中调用参数的方法:${ip}
常用的参数化方式-随机数:将接口中的数据动态化,不使用固定的,写死的数据
jmeter中能输入数据的地方都可以输入参数化函数等
可以通过“函数助手”生成各种函数
生成随机数: __Random函数(随机数小概率会重复)
进行使用
随机数参数化断言:
常用的参数化方式-随机字符串(可能重复,支持中文)
生成随机字符串函数: _RandomString
引用
uuid:唯一的不重复的字符串,位数固定
时间戳:毫秒值,从1970-1-1 00:00:00开始到当前时间所累计的毫秒值
时间戳格式化:yyyy-MM-dd HH:mm:ss,注意大小写
灵活使用
随机日期
常用的参数化方式-csv_read:从文本文件中读取数据
多个用户才能调取其他的用户,如果设置了6个用户,则循环调用
运行,查看结果
参数化文件
添加CSV Data Set Config :线程组→添加→配置元件 → CSV Data Set Config
File encoding:和记事本格式保持一致(编码解码保持一致,针对中文) 不填,使用文件自己的编码
Variable Names :数据保存到什么变量里,不要和前面全局定义的变量重名,会被覆盖
忽略首行:针对列名之类的非数据,否则会出现乱码
区别:
与csv_read不同,CSV Data Set Config可以自动循环赋值,不受并发数限制;
csv_read如果线程数为1,则永远赋值第一行数据。
参数化函数
- CSV文件读取:${__CSVRead(D:\data.txt,0,)}
- 随机数:${__Random(1,100,)}
- 随机字符串:${__RandomString(8,abcdefghigklmnopqrstuvwxyz0123456789,)}
- 时间戳:${__time(,)}
- 生成唯一UUID:${__UUID}
注:上述函数都可以将结果保存到一个变量里,函数的最后一个参数为变量名称
后置处理器-Json提取器
专门对json数据进行提取的后置处理器
变量名称:自定义的变量名称
json路径:见下面链接
匹配数字:0代表随机,n代表具体的数字,-1代表所有
json路径表达式:https://github.com/json-path/JsonPath
匹配多个值时,四个地方都要填写内容
jmeter数据关联
场景:下一个接口的入参,需要用到上一个接口的返回值的某个数据
解决思路:
- 先调用第一个接口
- 将接口的返回值中某个数据保存在某个变量里
- Json提取器:可以对接口返回的json数据做提取,并保存
- 下一个接口直接通过${变量名}方式使用变量
调试取样器
调试取样器可以打印出来Jmeter运行过程中保存下来的参数,需要配合查看结果树使用
常用于复杂的json数据:取出所有的用户姓名,json数组
1取第一个值,0取随机的值
-1保存所有数据,调用其中一个
后置处理器-正则表达式提取器
可以通过正则表达式来获取http请求返回的数据
引用名称:匹配后的结果,保存到一个参数中,如param
正则表达式:
- 三步走
- 1、拷贝目标数据和左右边界
- 2、把目标数据用括号括起来
- 3、把目标数据用.+?代替
模板:$1$表示取匹配到的第一组数据
匹配数字:当某组数据中包含多少个参数时,0代表随机,1代表该组的第一个参数,2表示第二个
常用的万能正则表达式:
b.b可匹配:bab bdb bed b2b .能匹配任意1个字符,除了换行符
b.+b可匹配:baab b132b bweaf3b +能匹配前面的正则表达式一次或多次
.+能匹配任意1个或多个字符 贪婪模式 按照最长的匹配
?能匹配前面出现的正则表达式零次或一次 通常配合.+一起使用
最终,万能的正则表达式写法为: .+? 能匹配任意多个字符,同时在最小范围内匹配
“stock”:“(.+?)”
常用正则表达式:
Jmeter结果统计-聚合报告(Aggregate Report):压测时,查看结果树不适合查看结果,性能有影响,此时就用聚合报告
Throughput:吞吐量——默认情况下表示每秒完成的请求数(Request per Second)
对于接口测试来说,Jmeter里的吞吐量=TPS
同一个线程组的接口TPS一致,是因为请求是接口轮流请求
Jmeter聚合报告中:
特点:
- 如果多个接口在同一个线程组内,那么它们的TPS是一样的,响应时间不一样(顺序执行)
- 如果多个接口不在同一个线程组内,那么他们的TPS是不一样的,响应时间也不一样
什么样的接口适合放在同一个线程组内呢???
图形化插件的使用
使用Jmeter插件可以扩展Jmeter的功能
插件官网: http://jmeter-plugins.org/downloads/all
使用Jmeter插件管理器,可以自动下载并安装插件,更加方便简单
-
使用方法:
a. 下载插件管理器对应的jar包,然后放在Jmeter的lib/ext目录下
b. 打开Jmeter,选项-插件管理器
c. 勾选对应的插件,等待下载完成,点击apply,等待重启Jmeter,即可使用
-
几个好用的插件:
a. 3 Basic Graph:windows下可用的实时tps和响应时间的插件
b. Custom JMeter Functions
c. Random CSV Data Set Config
每次测试,都是随机的
d. PerfMon :服务端性能实时监控插件
注:并发量高的话需要使用linux系统,基于linux下的压测
图形化插件的使用-TPS
添加tps监听器:事务控制器→添加→监听器 →jp@gc – Transaction per Second
图形化插件的使用-平均响应时间
到这里,Jmeter基本使用的工具就学习完成啦,如果想要学习更高阶的请继续跟进我的《性能测试》专栏噢~~~
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)