下面记录Jmeter的一些常用控件
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请求的采样器
protocol:发起http 或 https请求
Server Name or IP:服务器ip或者域名地址
Port Number:端口号
Get Post等请求
Path:访问的接口路径 如果get请求还可以拼接上参数
下面还可以选择参数类型,根据需要添加参数
一般用来调试用,来打印参数等作用
Jmeter properties
Jmeter variable
System variable
有这样三那个选项,他们的值都是bool型,填写 true代表该类型的参数会打印,false表示不打印
运行debug Sampler 可以在结果树中会在Resonse中打印出参数值
因此用来打印参数调试用例
beanShell Sampler用来编写类Java脚本,实现某些自定义功能,如下图所示:
用来监控测试过程,实时查看测试结果
创建监听器:线程组右键->add -> listener ->监听器
常用监听器:
查看结果树:View Result Tree
聚合报告:Aggregate Report
后端监听器:Backend Listener
添加该空间后 执行Sampler会记录每一个Sampler的请求和响应信息,并且可以看请求是否成功,如果失败则显示红色,能直观看出请求的成功失败
聚合报告,一般用来汇总压测数据
Samples :总的发动请求个数
Average:平均响应时间(毫秒)
Median:中位数响应时间(毫秒)(前50%)
90%Line 95%Line 99%Line:表示90% 95% 99%的请求的响应时间都在多少毫秒以内
Min Max 最大最小响应时间
Error 失败率
Throughput 流量,表示每秒请求多少次
receive:每秒接收多少字节的
sent:每秒发送多少字节
后端监听器,需要与第三方监控体系配合使用例如Graphite、InfluxDB等,常用InfluxDB 时序数据库,一般搭配一个前端展示工具来展示压测数据
定时器时用来控制采样器发出请求间隔时间的组件
常见定时器:
固定定时器:Constant Timer
高斯定时器:Gaussiant Random Timer
吞吐量定时器:Constant Throughput Timter
并发定时器:Sycronized Timter
创建定时器:线程组右键 ->add->timer ->定时器
高斯随机定期器,也即是使用高斯曲线来实现 请求的间隔时间的随机性,例如两个请求之间的间隔时间不确定,需要模拟随机的一个间隔时间时使用
参数解析:
Deviation:等待偏移量A
Constant Delay Offset :等待时间B
计算方式大概是 等待时间间隔随机范围大概为: B-A ~~B+A 之间
实际的并发值与吞吐量不一致,通过流量吞吐量 来控制请求,比如控制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->断言
响应断言,下图所示,Field to Test 中包含很多断言类型
text Response:响应的文本
Response code:响应状态码
Response Headers:响应头信息
…
在Pattern matching Rules 填写 匹配规则:包含、相等 …等规则
再在下面 Patterns to test 下填写期望结果
对返回的响应的大小进行断言,对于响应内容的大小 是否小于或者大于某预定值来判断响应结果是否正确
例如可以对Response body的大小进行断言,则需要在下面的Respnse Size Field to Test 选择 Response body
再填写预定的大小以及选择比较逻辑
有时候response的结果是xml格式的,使用Xpath 查找到响应结果的某元素,获取这个元素断言结果是否符合预期
下面的输入框中写如Xpath定位元素的规则
有些http请求Response的响应结果是Json格式,因此使用Json断言
Assert Json Path exists:使用JsonPath来提取元素
Additionally assert value:提取到的元素时候与下面期望值一致
Match as regular expression:匹配规则是否是正则表达式
Expected value:期望值
如果Additionally assert value不勾选的话,则 只要提取到的元素存在就断言成功,不会与下面的期望值比较