目录
一、下载安装方式
二、页面操作说明:
1.添加线程组
2.在线程组中添加取样器Sampler
3.添加监听器
4.添加Http Cookie管理器
5.Jmeter参数化(三种方式)
6.同步定时器(集合点)
7.正则表达式提取器
8.Json提取器
9.响应断言
10.压力测试
11.Jmeter生成多维度HTML报告
一些常用小工具,非必须
12.Jmeter函数助手之__time函数(获取当前时间)
Apache JMeter是Apache组织开发的基于Java的压力测试工具。纯java开发的。
一、下载安装方式
1.下载安装JDK(java环境,开源的,网上很容易下载),安装后配置环境变量
java添加到环境变量
2.下载解压Jmeter压缩包(无需安装,直接解压即可)
打开jmeter/bin/jmeter.bat(批处理文件),直接双击即可打开Jmeter
二、页面操作说明:
1.添加线程组
测试计划右键添加线程组
线程组页面说明
2.在线程组中添加取样器Sampler
右键测试计划添加Sampler
请求必填项
3.添加监听器
常用的为:查看结果树、聚合报告
添加监听器
查看结果树
4.添加Http Cookie管理器
保存上一步取样器结果中返回的Cookie值供下一步使用,不用额外配置,一次自上而下的操作认为是一个用户,都会添加同一个Cookie。
5.Jmeter参数化(三种方式)
方法1:添加
前置处理器——用户参数,使用‘${参数名}’进行调用
右键测试计划在前置处理器里添加用户参数
在用户参数中添加值
方法2:使用
函数读取.csv文件中的数据(.csv可以用Excel建或者用notepad++)
_CSVRead函数原理:先去读取csv文件,然后读取其中的列,挨个赋值给取样器中的参数。
操作步骤:
点击选项→函数助手对话框(快捷键ctrl+shift+F1)→选择CSVRead函数→第一个参数值放文件路径名称,第二个参数是开始的列,0代表第一列→点击生成
然后复制生成的参数化的字符串到Sampler中粘贴即可,注意改下列号
问题排查:如果请求里的参数取的有问题,把.csv文件编码改为‘以utf-8无BOM格式进行编码’(在nodepad里可以改编码)
方法3:使用元件读取CSV Data参数(类似方法1使用函数调用.csv文件数据)
添加csv读取元件
设置参数解读
Delimiter:变量之间的分隔符,.csv文件用‘,’分隔
Allow quoted data?(是否支持引号,默认选False就可以):选择True,可用双引号来识别内部包含逗号或双引号的数据;
比如数据文件中为1,2,"3,"4",5",为false时,则识别为5个数据a=1,b=2,c=“3,d=“4”,e=5”;为True识别为3个数据a=1,b=2,c=3,"4",5。
Recycle on EOF?:True时读取文件到结尾时,再从头读取;False时读取到文件结尾停止读取。
Stop thread on EOF?:和上一个Recycle on EOF相关,当Recycle on EOF为False时,当读取不到数据时是否停止线程,True为停止,False为继续。Recycle on EOF为True时此项无意义,因为一直能读到数据。
参数调用
6.同步定时器(Synchronizing Timer),也叫集合点(就是大家在集合好了一起走)
定时器→同步定时器中添加,目的是并发测试,让多个用户同时调用接口,原理是等待n个用户,满足后才一起运行。
添加同步定时器
同步定时器参数含义
7.正则表达式提取器(属于后置处理器,请求结束后拿的响应的数据):并不直接涉及请求测试,但是对
数据传递起着很大作用。
添加方式:右键添加→后置处理器→正则表达式提取器,位于具体的请求里面,代表获取这个请求返回的结果中的值。
正则表达式提取器添加路径
正则表达式页面
说明
引用名称:下一个请求要引用的参数名称,上图中名称为uid,其他请求使用${uid}调用这个参数值。
正则表达式:()起来的部分是要提取的内容,()前后为定位用的内容,一般把目标值前后多复制一些,然后把目标值用()取代
.代表匹配任何字符串,不对一些特殊字符做处理,全部取回
+一次或多次
?匹配到第一个匹配项后就停止
(.+?)经常一起用,代表只取第一个值
模板:正则表达式也可以写多个,用;隔开,$1$代表取第一个模板的正则表达式
扩展
但是,在JDBC请求后的响应结果中,往往需要关联的内容是只有左边界而没有右边界的,此时,我们怎么去关联呢?
实现的关键就在正则表达式的编写,提取一段字符串后所有内容用 [^"]+ 实现,这里的具体实例是n([^"]+)n,意思是提取cpgroupname后面所有内容,加上n是因为这里有换行(空格用s)
8.Json提取器:对于响应结果是Json体的就可以用
Json表达式提取器
Compute concatenation var(suffix_ALL):用于匹配到多个结果时,勾选此项会生成一个名称为“变量名_ALL”的列表,一般不用。
说明:如果json路径有层级结构,格式
$.key1.key2[0].key3
.区分层级,列表的话用[]下标
9.响应断言
添加断言
注意:响应代码取的的是“取样器结果”中的Response Code,不是“响应数据”中的。
响应信息取的是“取样器结果”中的Response message
响应文本取的是“响应数据”中的信息
匹配模式:包括是包含即可,匹配是完全一样
断言中也可以使用变量${}作为预期结果,需要跟着用户改变的话直接加到用户参数中即可。
10.压力测试linux服务器上安装插件,帮助统计服务器资源使用情况反馈回来,相当于资源获取器
java -jar /home/AIbert/ServerAgent-2.2.1/CMDRunner.jar(插件地址) --tool PerfMonAgent --udp-port 7777 --tcp-port 4445(分配端口)
服务需要每次开启,测试完成后Crtl+C退出;
Jmeter中添加监听器
说明:PerfMon Metrics Collector资源监听器
Response Times Over Time响应时间监听器
11.Jmeter生成多维度HTML报告- 关闭Jmeter
- 如果没有.jtl文件,进入Jmeter下/bin目录,按住shift+右键,选择在此处打开命令窗口;Ctrl+C退出;
- 运行命令:jmeter -n -t source.jmx -l result.jtl -e -o /tmp/ResultReport
参数说明:-n以非GUI方式运行Jmeter
-t source.jmx脚本路径(改成你的测试计划的路径)
-l result.jtl运行结果保存路径(.jtl),此文件必须不存在
-e 在脚本运行结束后生成HTML报告
-o 用于存放HTML报告的目录(建议放在根目录下,目录中无汉字)
命令行
生成文件
HTML图表
图表说明:
Apdex参数越接近1说明性能表现越好,反之越接近0则越差。
聚合报告
聚合报告图表,和Jmeter聚合报告数据一致
错误统计页面
12.Jmeter函数助手之__time函数(获取当前时间)功能:__time函数可以获取到当前的时间并传参供调用
使用方式:1.打开函数助手,找到__time这个函数,可以看到该函数有两个参数,即格式和参数名称,两者都不是必填项。
- 格式 :格式如果不填那么就是默认获取当前时间的毫秒数(此项也常被用于接口参数中那些不允许重复的字段);
- 参数名称 :非必填项,如果填了,则生成的时间会被放到该参数中,可以在任意地方调用这个参数,常用于多接口中某个值使用同一个时间参数的情况;
${__time(,)}:获取当前时间的毫秒数;
${__time(,time_ms)}:获取当前时间的毫秒数并存入参数time_ms中;
${__time(/1000,)}:获取当前时间的秒数;
${__time(/1000,time_s)}:获取当前时间的秒数并存入参数time_s中;
${__time(yyyy-MM-dd,)}:获取当前日期;
${__time(yyyy-MM-dd,time_date1)}:获取当前日期并存入参数time_date1中;
${__time(yyyy-MM-dd HH:mm:ss,)}:获取当前时间,固定格式;
${__time(yyyyMMddHHmmss,time_2)}:获取当前时间,固定格式,并存入参数time_2中;
${__time(YMDHMS,)}:获取当前时间,固定格式
2.点击生成按钮即可生成函数字符串,copy后放到需要的位置即可;