一、JMeter5.1安装部署
1.安装Jmeter之前需要先配置Java环境
目前最新版本的是jmeter5.1,对应JDK1.8
检查JDK版本: win + R 快捷键打开运行,输入 cmd 打开面板,在面板中输入 java -version,显示版本是1.8.0_101支持最新版的jmeter5.1
2.安装JMeter
官网地址:http://jmeter.apache.org/download_jmeter.cgi
点击左侧导航栏的Download-Download Releases
点击Binaries下边的jmeter压缩包
解压apache-jmeter-5.1zip文件至目录,我的是D:\目录。
3.配置环境变量
点击我的电脑----属性----高级----环境变量----在系统变量中----点击新建,
变量名输入:JMETER_HOME
变量值输入:D:\apache-jmeter-5.1
然后编辑CLASSPATH变量,加上%JMETER_HOME%\lib\ext\ApacheJMeter_core.jar;%JMETER_HOME%\lib\jorphan.jar;%JMETER_HOME%\lib\logkit-2.0.jar;
然后确定保存即可
4.点击Jmeter中bin目录下面的jmeter.bat文件即可打开Jmeter了。出现两个窗口,说明jmeter安装已经完成
注意:打开的时候会有两个窗口,Jmeter的命令窗口和Jmeter的图形操作界面,不可以关闭命令窗口。
安装配置好JMeter以后,来进行JMeter入门级的学习
二、常用组件介绍
(一)常用组件
1.测试计划(Test Plan)
测试计划是使用JMeter进行测试的起点,也是其他测试组件的容器
2.线程用户(threads)
(1)setup thread group:用于初始化操作,这种特殊类型的线程组的行为和正常的线程组元件一样,不同的是它用于测试前进行定期线程组的执行
(2)teardown thread group:用于执行测试后的动作,主要是数据清理一类,用于执行测试后定期线程组
(3)thread group:线程组,所有测试任务必备 的元件,有多少个线程组就有多少个并发用户,它可以用来模拟并发用户发送请求,具体请求内容在sampler中定义
右击Test Plan—ADD—Thread Group,线程组页面如下:
1.线程数:请求并发的用户数量
2.Ramp-Up Period(in seconds):在多少秒内创建线程数中定义的所有线程。每秒并发数 = 线程数/RUP
3.Loop Count:循环次数,当前线程组中的测试用例循环执行的次数
3.逻辑控制器(Logic Controller)
用于自定义JMeter发送请求的行为逻辑,包括两种元件,一种是用于控制teset plan中sampler节点发生请求的逻辑顺序的控制器,常用的有if controller,loop controller,while controller,switch controller。另一类用于组织可控制节点,如事务控制器,吞吐量控制器
4.配置元件(config element)
配置元件配置一些默认的属性和信息,供取样器获取所需的各种配置信息,它不向服务器发送任何请求,配置元件仅在其所在的测试树分支范围有效。CSV Data Set Config用于将本地数据文件形成数据池,http request defaults设置了服务器的名称,那么它所在的测试分支内的HTTP请求的服务器名称都是这个服务器,HTTP请求仅设置路径就可以访问网页了
HTTP请求默认值(HTTP Request Defaults):用于设置其作用范围内所有HTTP请求的默认值,可被设置的包括HTTP请求host,端口,协议
HTTP Authorization Manager(HTTP授权管理器):用于自动设置一些对需要NTLM验证的页面进行认证和登录
HTTP Cache Manager:用于模拟浏览器的Cache行为,为test plan增加该属性管理器以后,test plan 运行过程中会使用Last-Modified,ETag,Expired等决定是否从Cache中获取相应的元素
HTTP Cookie Manager(Cookie管理器):用于管理test plan运行时的所有cookie,并在发送请求时附加上合适的Cookie。同时,用户也可以在HTTP Cookie Manager中手工添加一些Cookie,这些被手工添加的Cookie会在发送请求时被自动附加到请求
HTTP Header Manager(信息头管理器):用于定制Sampler发出的HTTP请求的请求头的内容。不同的浏览器发出的HTTP请求具有不同的Agent。访问某些有防盗链的页面时需要正确的Refer...这些情况下都需要通过HTTP Header Manager来保证发送的HTTP请求是正确的
5.前置处理器(Pro processors)
前置处理器一般用于发出请求前对即将发出的请求进行特殊的处理(例如,http URL重写修复符则可以实现URL重写,当URL中有session ID一类的session信息时,可以通过该处理器填充发出请求的实际的session ID)
6.定时器(timer)
定时器是用于操作之间设置等待时间,如果不设置等待时间,JMeter会在短时间内产生大量请求,导致服务器被请求淹没。如果为线程组添加了多个定时器,那么JMeter会将这些定时器的时长叠加起来,共同影响作用域范围内的采样器。定时器可以作为采样器或者逻辑控制器的子项,目的是只影响作用域内的采样器。JMeter设置了如下类型的定时器
7.采样器(sampler)
采样器是性能测试中向服务器发出请求,记录响应信息,记录响应时间的最小单元,通常情况下采样器会按照其在测试树中的顺序来执行,但是也会根据逻辑控制器来改变运行的次数和顺序
8.后置处理器(Post processors)
后置处理器一般用于对采样器发出请求后得到的服务器响应进行处理,一般用来提取响应中的特定数据,例如,XPath Extractor:可以提取响应数据中通过给定XPath 值获得的数据;正则表达式提取器:可以利用正则表达式方便的提取测试时所需的数据,用以参数传递和断言等
9.断言(assertions)
断言用来判断采样器是否正常工作,判断响应结果是否正确,符合预期
10.监听器
监听器主要用于收集整理测试结果,处理测试结果并展示出来,可以指定格式生成XML,CSV格式的文件,
图形结果(graph results)、查看结果树(view results tree)、聚合报告(aggregate report)都是我们经常用到的元件。
(二)组件执行顺序
测试计划的元素执行是有序的,通过以下方式执行:
1–配置元件(Config Element)
2–前置处理器(Pre Processors)
3–定时器(Timer)
4–取样器(sampler)
5–后置处理器(Post Processors,只在有结果可用情况下执行)
6–断言(Assertions,只在有结果可用情况下执行)
7–监听器(Listener,只在有结果可用情况下执行)
(三)组件作用域
元件收集其作用范围的每一个sampler元件的信息并呈现,元件的作用域是靠测试计划中测试树的父子关系来决定的,作用域的原则是:
sampler:采样器不和其他采样器发生作用因此不存在作用域的问题
logic controller:只对其子节点的采样器和逻辑控制器起作用
除了采样器和逻辑控制器,其他六个元件如果是某个sampler的子节点,则该元件只对其父子节点起作用。如果不是sampler的子节点,则其作用域是该元件父节点下的其他所有后代节点(包括子节点,子节点的子节点等)。
特殊说明:配置元件(Config Elemnet)-->用户自定义变量组件(User Defined Variables):这个组件不管放在哪个位置,它定义的变量都会被整个线程所共享。
三、结果分析
查看结果树:
通过查看结果树,可以查看每个请求的结果,绿色代表通过,红色表示出错的请求
|
Thread Name:线程名称 |
Sample Start:线程开始时间 |
|
Load time:加载时长(ms)
|
Latency:等待时长(ms) |
|
Size in bytes:发送的数据总大小 |
Headers size in bytes:发送数据其余部分大小 |
|
Sample Count:发送统计 |
Error Count:交互错误统计
|
|
Response code:返回状态码 |
Response message:返回信息
|
通过响应数据可以查看响应头:
聚合报告分析:
Samplers:线程数目,本次测试场景所有累加
Average:平均响应时间
Median:统计意义的响应时间中值(ms)
90%line:90%线程响应时间都小于x值(ms)
Min:最小响应时间,Max:最大响应时间,error%:出错率
Throughput:吞吐量,以requests/second.request/min,request/hour来衡量,每秒多少请求,每分钟多少请求,每小时多少请求。当吞吐量被保存到CVS文件时,采用的是requests/second,所以30.0 requests/second 在CVS中被保存为0.5
Kb/sec:以kilosecond/sec为单位表示的吞吐量
可以看出100个用户在10秒内同时访问考拉首页的时候,最小响应时间是121ms,最大响应时间是336ms,平均响应时间是196ms,错误率为0,所有用户都能得到响应
用表格查看结果:
Sample:每个请求的编号
Start Time:每个请求开始时间
Thread Name:每个线程的名称
Label:Http请求名称
Sample Time:每个请求所花时间,单位毫秒
Status:请求状态,如果为勾则表示成功,如果为叉表示失败。
Bytes:请求的字节数
样本数目:也就是上面所说的请求个数,成功的情况下等于你设定的并发数目乘以循环次数
平均:每个线程请求的平均时间
最新样本:表示服务器响应最后一个请求的时间
偏离:服务器响应时间变化、离散程度测量值的大小,或者,换句话说,就是数据的分布。
在这里面可以看到,线程组名称,每个线程响应时间,返回结果是否成功,字节数等。
图形结果:
横坐标:时间,单位是ms
纵坐标:处理时间(ms)
样本数目:等于线程数目(用户请求数)*请求次数
最新样本:最后一个请求的处理时间
偏离:服务器响应时间的变化,离散程度测量值的大小
一些参数定义:
吞吐率:我们用单位时间内服务器处理的请求个数来描述其处理并发的能力,单位是req/s
吞吐率代表单位时间内所能承受的压力,是测试的重要指标,当随着并发数增加时,吞吐率是不断增加的,直至达到服务器的一个极限值以后,再增加并发数,吞吐率会急剧下降直至服务器奔溃。所以当到达临界点时(吞吐量最高点,负载和处理均衡时),为最大吞吐率,是系统在运行下的一个理想阈值范围
吞吐量:是指在一次性能测试过程中,网络上传输的数据量总和。对于交互式应用来说,吞吐量反应的是服务器承受的压力,在容量规划测试中,吞吐量是重要的指标,因为它能说明系统级别的负载能力。
TPS(Transaction per second):每秒钟系统能处理的事务或者交易的数量。事务,就是用户某一步或者某几步操作的集合,。TPS是衡量系统处理能力的重要指标。点击率可以看做是事务的一种特定情况,更能体现用户端对服务器端的压力。
TPS表示每秒钟用户向web服务器提交的HTTP请求数,是web应用特有的指标,web应用是请求-响应模式,用户发一个申请,服务器就要处理一次,所以点击是web应用能处理交易的最小单位。
TPS:每秒事务数,该插件的作用是在测试脚本执行过程中,监控查看服务器的TPS表现--比如整体趋势,实时平均值走向,稳定性等。
TRT:事务响应时间,该插件的作用主要是在测试脚本执行过程中,监控查看服务器的响应时间表现--实时平均值,整体响应时间走向等
如果把每次点击当做一次交易,点击率和TPS就是一个概念。
四、JMeter参数化
参数化的一般做法是把脚本中的某些输入使用参数来代替,在脚本运行时指定参数的取值范围和规则。这样脚本在运行时就可以根据需要选取不同的参数作为输入,这种方式被称为数据驱动测试,参数的取值范围被称为数据池。
jmeter支持以下四种参数化方式:
函数助手:_CSVRead
CSV Data Set Config:CSV数据控件
User Defined Variables:用户定义的变量
User Variables:用户参数
后置处理器:在请求结束或者返回响应结果时发挥作用
正则表达式提取器:允许用户从服务器的响应中通过使用perl的正则表达式提取值。该元素会作用在指定范围取样器,用正则表达式提取所需值,生成模板字符串,并将结果存储到给定的变量名中。
参考:https://wenku.baidu.com/view/04366c6e0722192e4536f66e.html
http://www.cnblogs.com/fnng/archive/2012/12/27/2836506.html
《jmeter:菜鸟入门到进阶》https://www.cnblogs.com/imyalost/p/7062784.html?utm_source=itdadao&utm_medium=referral