Jmeter-控件的基本使用
下面记录Jmeter的一些常用控件
文章目录
- Jmeter-控件的基本使用
- 前言
- 一、线程组
- 二、控制器
- 事物控制器:
- 条件控制器
- 循环控制器
- 随机控制器
- 三、采样器/取样器
- Http Request Sampler
- Debug Sampler
- BeanShell Sampler
- 四、监听器
- View Result Tree
- Aggregate Report
- Backend Listener
- 五、定时器
- Constant Timer
- Gaussiant Random Timer
- Constant Throughput Timter
- 六、响应断言
- Respose Assertion
- Size Assertion
- Xpath Assertion
- Json Assertion
前言
Jmeter是Apache的一个开源免费的压测工具,底层是java实现,能跨平台,并且支持二次开发,可以对服务器、网络、对象模拟负载进行压力测试,也可以用于接口测试,支持分布式 多节点部署
下载地址:https://jmeter.apache.org/download_jmeter.cgi
(安装步骤可参考网上教程)
以下是本篇文章正文内容
一、线程组
如下图所示支持创建这四种线程组,线程组是用来创建http请求的可配置并发数等,是所有测试计划的一个开始点,所有的请求都要在线程组下面进行,其中最常用普通的Thread Group
setUp Thread Group:相当于是前置处理,可以用来获取参数等操作
tearDown Thread Group:相当于后置处理。
创建线程组:TestPlan -> Threads ->ThreadGroup
线程组属性如下如图所示,线程组下面主要是添加 Sampler
属性解析:
action to be tabke after a Sampler error:该区域下有5个值可以选,是用例处理错误的,当有一个Sampler出现错误
Continue:是否继续执行下面的请求
Start next thread Loop:开启下一个线程池
Stop Thread:如果存在多个线程时,结束当前线程,
Stop Test :结束当前测试,正在运行中的请求会在完成后停止
Stop Test Now:出现错误立刻停止测试执行
Thread Properties:该区域是一些并发配置
Number of Threads(user):开启的线程数
Ramp-up period(seconds):并发数是在多少s内启动起来
Loop Count:在压测时,一般是线程组下面的请求循环执行,这里配置循环次数
Same user on each iteration:勾选这个选项表示 线程组下的请求 按照顺序执行,不勾选就是并发执行(没有顺序)
Delay Yhread creation until need:这是一个性能优化,需要时创建线程 可以延迟线程的创建 减少不必要的资源损失
Specify Thread lifetime:定时配置,设置并发时长,如果这里配置了并发市场为 60s ,如果60s内没执行完,则请求会结束,运行中的会等待完成,但是不会去创建新线程了
二、控制器
创建控制器,在线程组上右键 Add->Logic Controller ->控制器
jmeter提供了很多中控制器,根据需要选取,其中常用控制器:
事务控制器:Transaction Controller:
条件控制器:If Controller
循环控制器:Loop Controller
随机控制器:Random Controller
事物控制器:
事务控制器下,添加当成事物的Sampler(http request)
Generate parent sample:勾选这一选项,则事务控制器下的Sampler会被当成是一个整体,这样使用 Aggregate Report(聚合报告)来查看运行结果时,会显示一个整体的情况,不勾选的话,则分别展示每个Sampler的情况
Include duration of timer and …:如果增加了pre processors 或者 post processors 则他们的结果也需要统计
条件控制器
条件控制器类似于条件语句,条件控制器下也可以添加Samplers 如果满足条件则执行 Samplers,否则不执行
下面这个输入框内,输入条件语句,也可以点击下方按钮,会有一个默认的语句,断言最后一个线程组下的最后一个Sampler,如果最后一个Sampler响应成功则执行条件控制器下的Samplers
循环控制器
循环控制器下添加Samples,可实现循环请求
Loop Count:循环次数
随机控制器
随机控制器下添加多个 Samplers ,则实现随机选择Sampler执行
三、采样器/取样器
采样器可以模拟用户操作,向服务器发送请求,记录响应时间和响应信息
采样器的创建:线程组 右键 add -> sampler ->采样器
常用采样器:
HTTP Request Sampler
Debug Sampler
BeanShell Sampler
Http Request Sampler
发起http请求的采样器
protocol:发起http 或 https请求
Server Name or IP:服务器ip或者域名地址
Port Number:端口号
Get Post等请求
Path:访问的接口路径 如果get请求还可以拼接上参数
下面还可以选择参数类型,根据需要添加参数
Debug Sampler
一般用来调试用,来打印参数等作用
Jmeter properties
Jmeter variable
System variable
有这样三那个选项,他们的值都是bool型,填写 true代表该类型的参数会打印,false表示不打印
运行debug Sampler 可以在结果树中会在Resonse中打印出参数值
因此用来打印参数调试用例
BeanShell Sampler
beanShell Sampler用来编写类Java脚本,实现某些自定义功能,如下图所示:
四、监听器
用来监控测试过程,实时查看测试结果
创建监听器:线程组右键->add -> listener ->监听器
常用监听器:
查看结果树:View Result Tree
聚合报告:Aggregate Report
后端监听器:Backend Listener
View Result Tree
添加该空间后 执行Sampler会记录每一个Sampler的请求和响应信息,并且可以看请求是否成功,如果失败则显示红色,能直观看出请求的成功失败
Aggregate Report
聚合报告,一般用来汇总压测数据
Samples :总的发动请求个数
Average:平均响应时间(毫秒)
Median:中位数响应时间(毫秒)(前50%)
90%Line 95%Line 99%Line:表示90% 95% 99%的请求的响应时间都在多少毫秒以内
Min Max 最大最小响应时间
Error 失败率
Throughput 流量,表示每秒请求多少次
receive:每秒接收多少字节的
sent:每秒发送多少字节
Backend Listener
后端监听器,需要与第三方监控体系配合使用例如Graphite、InfluxDB等,常用InfluxDB 时序数据库,一般搭配一个前端展示工具来展示压测数据
五、定时器
定时器时用来控制采样器发出请求间隔时间的组件
常见定时器:
固定定时器:Constant Timer
高斯定时器:Gaussiant Random Timer
吞吐量定时器:Constant Throughput Timter
并发定时器:Sycronized Timter
创建定时器:线程组右键 ->add->timer ->定时器
Constant Timer
固定定时器,顾名思义 固定每个请求的间隔时间 单位毫秒
Gaussiant Random Timer
高斯随机定期器,也即是使用高斯曲线来实现 请求的间隔时间的随机性,例如两个请求之间的间隔时间不确定,需要模拟随机的一个间隔时间时使用
参数解析:
Deviation:等待偏移量A
Constant Delay Offset :等待时间B
计算方式大概是 等待时间间隔随机范围大概为: B-A ~~B+A 之间
Constant Throughput Timter
实际的并发值与吞吐量不一致,通过流量吞吐量 来控制请求,比如控制1分钟内发起60个请求
参数解析:
Target throughput:每个请求的间隔时间,这里单位是分钟
Calculate Throughput base on:表示作用在什么线程上,有多个选择,一般选择 all active threads
六、响应断言
如果用来压测的话,一般断言能少用就少用,断言会影响Jmeter的性能,会影响发出压力的能力,从而影响压测结果
常见断言:
响应断言:Respone Assertion
大小断言:Size Assertion
Xpath断言:Xpath Assertion
Json断言:Json Assertion
为Sampler增加断言:sampler右键 ->add ->Assertions->断言
Respose Assertion
响应断言,下图所示,Field to Test 中包含很多断言类型
text Response:响应的文本
Response code:响应状态码
Response Headers:响应头信息
…
在Pattern matching Rules 填写 匹配规则:包含、相等 …等规则
再在下面 Patterns to test 下填写期望结果
Size Assertion
对返回的响应的大小进行断言,对于响应内容的大小 是否小于或者大于某预定值来判断响应结果是否正确
例如可以对Response body的大小进行断言,则需要在下面的Respnse Size Field to Test 选择 Response body
再填写预定的大小以及选择比较逻辑
Xpath Assertion
有时候response的结果是xml格式的,使用Xpath 查找到响应结果的某元素,获取这个元素断言结果是否符合预期
下面的输入框中写如Xpath定位元素的规则
Json Assertion
有些http请求Response的响应结果是Json格式,因此使用Json断言
Assert Json Path exists:使用JsonPath来提取元素
Additionally assert value:提取到的元素时候与下面期望值一致
Match as regular expression:匹配规则是否是正则表达式
Expected value:期望值
如果Additionally assert value不勾选的话,则 只要提取到的元素存在就断言成功,不会与下面的期望值比较