Jmeter使用指南
一、Jmter安装
- 安装jdk并配置环境变量。
官网https://www.oracle.com/java/technologies/downloads/#java8下载jdk文件,后缀名为dmg格式,Windows环境下载exe文件。
配置环境变量具体可百度。
- 安装jmeter并配置成命令文件。
官网http://jmeter.apache.org/下载并安装后在安装目录下/bin/jmeter打开终端输入sh ~/apache-jmeter-5.4.1/bin/jmeter启动JMeter。
打开Mac的脚本编辑器,输入sh ~/apache-jmeter-5.4.1/bin/jmeter保存为文本文件后存放于桌面,并重名为 Jmeter.command。
用linux命令 chmod +x /Users/~/Desktop/Jmeter.command赋予可执行权限后再桌面双击即可打开Jmeter。
二、基础使用
- 线程组:
常用的线程诅、setUp线程组、tearDown线程组。
setUp线程组:测试计划中进行初始化的线程组。
tearDown线程组:测试计划进行回收销毁的线程组。
线程组:即一个虚拟用户组,其中的线程数代表多少个虚拟用户,Rame-up时间为增长到指定线程数所需要的时间。
例如:1个线程组里面有10个请求,线程数为10个,跑完后得到10*10=100。
并发数:100;线程数:10;
2.http请求:
接口包含三要素请求地址/方式、请求参数和返回参数。
请求方式分为get和post。
get请求的请求参数用【参数】填写,其中的登录信息、编码方式Content-type可用httpCookie管理器。
post请求的请求参数用【消息体数据】进行填写,其中的登录信息、编码Content-type最好用http信息头管理器(否则可能会报错)。
服务器地址和固定参数可以用变量,便于根据环境进行修改。
3.http信息头管理器(配置元件):
针对请求需要定义的规范,包括Accpet、User-Agent、Content-type、Cookie等。
4.httpCookie管理器:
对需要保存的信息以键值对的方式存储在Cookie中,且需要设置作用域。该域以下的请求都会带有Cookie。
获取Cookie中的值,在配置文件中meter.properties设置CookieManager.save.cookies=true保存Cookie后,Cookie会自动保存,如果需要获取cookie中的值,可使用${COOKIE_cookie名称}
5.断言及查看结果
断言常用的是响应断言,需要测试的字段一般是响应文本、响应头、请求头。
测试字段:
响应文本:响应文本信息,不包括响应头。
响应代码:对应http返回的响应码。
响应信息:匹配响应信息。
响应头:响应头信息。
模式匹配规则:
包括:如果文本中包含给定的正则表达式模式则为true
匹配:如果文本可以匹配给定的正则表达式则为true
Equals:如果整个文本等于给定的字符串(完全一模一样,大小写敏感)则为true。
Substring:如果文本包含模式字符串(大小写敏感),则为true
否:如果文本不包含或匹配给定文本,则为true
取样器分为主样器、子样器、主样器和子样器、要使用的变量名,一般默认主样器即可。
设置好断言后需要添加查看结果树,运行测试计划后查看结果树的断言结果。
三、正则表达式提取并跨线程使用
正则表达式是常用的一种后置处理器,用于提取变量并实现接口之间的关联。
引用名称:变量名称,线程内引用是${变量名}。
正则表达式:() 括起来部分则是需要提取的部分。
. 匹配除了换行以外的任何字符、
* 重复某字符0次或更多次
+ 重复某字符1次或更多次
? 找到第一个匹配值后停止
*? 重复任意次,但尽可能少重复
+? 重复1次或更多次,但尽可能少重复
模板:用$$引用起来,例如$1$,表示多个正则表达式中第一个表达式()取到的值
匹配数字:0表示随机取值,-1表示所有值,1表示正则表达式取到的第一个值
缺省值:正则表达式匹配失败时的默认值
一个提取器提取多个值时,表达式有多个(),模板不用隔开 “$1$$2$” ,用一个变量接收,线程内使用时用变量_g1,变量_g2即可。
跨线程使用变量:
提取变量后在线程内使用BeanShell 后置处理程序,将变量${__setProperty(shareSign,${shareSign},)}存储为全局变量,然后跨线程使用时用引用全局变量${__P(shareSign,)}即可。
四、CSV数据提取器并模拟并发
如果需要模拟并发场景,则需要先创建好需要的测试数据文件,例如一般用csv文件或txt文件,如果是txt文件,多个参数用‘,’英文逗号隔开。
添加一个CSV数据文件设置,其中文件名直接浏览导入,文件编码用UTF-8,变量名称用‘,’隔开,文件中如果首行为参数名则选择忽略首行。分隔符用‘,’。
文件获取到的变量在线程内请求使用用{变量名}即可。
模拟并发场景还需要使用一个同步定时器,主要用于等待多少个线程数后同一时间请求,其中的模拟用户组的数量最好等于单个线程组的用户数,超时时间为超过多少时间后同时释放指定的的线程数,一般设置为0,该定时器会等待到指定数量,否则会一致等待。
五、TPS和响应时间监听器
TPS:吞吐量,指服务器每秒处理的事务数。其中的T在接口性能测试中指接口级,在业务中指每个业务和完整的业务流程。计算方式为 总处理请求数 / 总耗时 ),范围为RPS为单位。
响应时间:指请求从发出到接收到响应的总耗时,由网络传输耗时、服务处理耗时等多个部分组成,一般以ms为单位。
并发数:指在同一时间点同时请求服务的客户数量。
平均响应时间:指所有请求平均花费的时间
一般来说,当并发数增大时,吞吐率为上升,但当并发数达到某个边界值后,吞吐率则会下降。
Jmeter支持TPS监听和响应时间监听,需要下载第三方插件,网上下载plugins-manager.jar后放入Jmeter的安装目录下的lib/ext,然后重启后在选项中选择Plugins-Manager,选择Available Plugins中的jpgc - Standard Set插件。
六、实例说明
- 合作方要求某接口详情响应时间达到150ms,据往期推算高峰期接口回达到2W/秒,请规划需要多少台服务器资源?
性能基准=高峰期请求量/单体服务器承载量。
评估报告应包括xx接口多少用户同时进行xx操作,包括消息成功率、平均响应时间、CPU使用率。
- 设置持续增加负载的负载场景,例如100个线程,每5秒增加20个进程直到100个进程,每个阶梯运行600秒,最后一个阶梯运行1000秒,最后每秒停止10个。
使用Stepping thread group线程组(逐渐加压线程组),不断加压。
3.在波浪型的压力测试场景中常用Ultimate thread group线程组,设置多个测试计划,按照时间轴顺序执行。
第一个任务:1000个线程在10秒内启动,持续运行1800秒,然后在10秒内结束运行;
第二个任务:1000个线程在第620秒的时候在10秒内启动完成,并运行1200秒,然后在10秒内结束运行;
第三个任务:1000个线程在第1240秒的时候在10秒内启动完成,运行600秒之后在10秒内结束运行;
七、常见问题
1.如果遇到乱码,可以在jmeter/bin目录下找到jmeter.properties文件,将#sampleresult.default.encoding=ISO-8859-1改为sampleresult.default.encoding=uft-8。
2.无法保存测试计划文件,一般是由于当前jmeter版本与系统不兼容导致,修改当前Jmeter的皮肤即可,不要选择系统黑色。