【性能测试 - jmeter系列】工作中常用功能
jmeter系列
JMeter【第一篇】JMeter5.1在windows(含插件安装)及linux下安装
JMeter基础【第三篇】JMeter5.1元件作用域及执行顺序
JMeter基础【第五篇】JMeter5.1关联:正则关联一个及多个值
JMeter基础【第五篇】JMeter5.1关联:5种关联方法
JMeter基础【第六篇】JMeter5.1事务、检查点、集合点、思考时间、其余设置等
JMeter基础:场景设计,https://www.cnblogs.com/uncleyong/p/15752364.html
性能监控、分析、调优、回归:https://www.cnblogs.com/uncleyong/p/15475614.html
jmeter引用jar包的3种方式 (已迁移至公众号『全栈测试笔记』)
Jmeter+Influxdb+Grafana监控平台搭建:https://www.cnblogs.com/uncleyong/p/11885192.html
性能测试:jmeter中通过beanshell把关联转变成参数化,(已迁移至公众号『全栈测试笔记』)
JMeter开发http协议接口脚本汇总: https://www.cnblogs.com/uncleyong/p/11668665.html,(已迁移至公众号『全栈测试笔记』)
JMeter脚本开发【第一篇】JMeter5.1开发http协议接口之form-data脚本
JMeter脚本开发【第二篇】JMeter5.1开发http协议接口之json
JMeter脚本开发【第三篇】JMeter5.1开发http协议接口之上传文件脚本
JMeter脚本开发【第四篇】JMeter5.1开发Java协议接口脚本
JMeter脚本开发【第五篇】JMeter5.1开发Dubbo协议接口脚本
JMeter脚本开发【第六篇】JMeter5.1开发WebSocket协议接口脚本
JMeter脚本开发【第七篇】JMeter5.1开发WebService接口脚本
wireshark配合jmeter测试webservice接口:https://www.cnblogs.com/uncleyong/p/6893482.html
JMeter脚本开发【第八篇】JMeter5.1开发SMTP协议接口脚本
JMeter脚本开发【第九篇】JMeter5.1开发TCP协议接口脚本
JMeter脚本开发【第十篇】JMeter5.1开发JDBC协议接口脚本
JMeter脚本开发【第十一篇】JMeter5.1开发FTP协议接口脚本(有道云笔记)
其它工具【第二篇】locust安装及使用
其它工具【第三篇】gattling
之前,写过一篇文章:jmeter,学这些重点就可以了,今天就来把一些重点细节点说一下。
jmeter安装(windows下):https://www.cnblogs.com/uncleyong/p/10731334.html
必须会的jmeter功能:https://mp.weixin.qq.com/s/0zL3HbmJ_YluNPdQ1QwRbA
jmeter更多:https://www.cnblogs.com/uncleyong/category/881242.html
另外:loadrunner,https://www.cnblogs.com/uncleyong/category/881231.html
性能监控平台搭建:https://www.cnblogs.com/uncleyong/p/11885192.html
性能测试实战系列(): 可视化性能测试监控平台搭建:JMeter+Grafana+Influxdb
测试计划
可以理解为各种测试元件的容器
其中:
定义整个测试中使用的重复值(全局变量),一般定义服务器的ip、端口,这样,我们改下值,就可以测试不同的环境了,比如测试环境、灰度环境等;
或者把对应的几个测试环境都设置为变量,后面用哪个,就引用哪个,不过这个引用,最好是在请求默认值中引用,实例参考:https://www.cnblogs.com/uncleyong/p/10988524.html
默认不勾选,如果测试计划下有多个启用的线程组,他们是并行执行的(也就是混合场景);如果勾选,是顺序执行,即前一个线程组执行完了,才执行下一个线程组,大家可以试一下;相当于lr的group模式;
调试的时候用,会打印更多日志,不勾选,勾选的话很影响性能,会有详细的请求记录,消耗资源;
函数测试模式勾选了,还要把查看结果树写到一个路径下的文件中,函数测试模式才生效
一般用于添加jar包配合着beanshell使用,注意:lib目录下加入了新的jar包,需要重启jmeter;参考链接中“方式一:把jar包加入到classpath”:https://www.cnblogs.com/uncleyong/p/11475577.html
线程组
相当于LR中场景设计,可以设置一些并发策略,模拟并发用户发送请求
其中:
默认即可,并发过程中,遇到错误,继续执行下一次请求
线程数:并发数
在指定的时间内启动线程,如果线程数是100,这里是10,表示10秒内启动100线程,但是不一定是每秒启动10个线程,详见:https://www.cnblogs.com/uncleyong/p/15783723.html
循环次数:不勾选永远,后面的次数生效;类似LR中运行时设置中迭代次数;循环控制器是循环,相当于LR中的for循环
调度器配置:
循环次数中勾选永远,持续时间就是并发的时间,一般10-15分钟,根据业务实际情况来设置
If Loop Count is not -1 or Forever, duration will be min(Duration, Loop Count * iteration duration),如果未勾选永远,建议不要勾选调度器和设置持续时间
在当前时间之后的启动延迟时间后开始运
【Sampler】
在线程组下(在测试计划下面不能添加取样器),是被请求内容;
假如请求是:http://192.168.168.168:8057/user/query?name=全栈测试笔记
自动重定向:只记录最后跳转请求,会丢失初始请求的Cookie等信息;
跟随重定向:记录整个请求过程所有信息, 过程请求为sub-sampler,即子请求
POST请求时,使用的Content-Type,文件上传的时候使用;默认不勾选,此时的Content-Type是application/x-www-form-urlencoded
参数中,如果有特殊字符时(“=”、“&”、“?”等),最好选上“编码”,否则字符串可能会被截断;
自动添加参数名和值之间的等号
发送json,实例参考:https://www.cnblogs.com/uncleyong/p/10990373.html
发送文件,实例参考:https://www.cnblogs.com/uncleyong/p/9794250.html
上图,客户端实现默认是HttpClient4,也可以从配置文件中看到,当然也可以改配置文件
客户端设置超时时间
jmeter在发出 HTTP请求并获得响应的HTML文件内容后,且对该HTML进行分析并获取HTML中包含的所有资源(图片等),默认不选中,此选项和loadrunner中是否下载非html资源类似;
响应保存为32位的MD5加密字符
(重点)HTTP请求:实例参考:测试必备:jmeter测试http协议接口的各种传参方式
BeanShell Sampler,实例参考:https://www.cnblogs.com/uncleyong/p/7189778.html,或者:https://www.cnblogs.com/uncleyong/p/9429752.html
Debug Sampler:调试的时候用,只看到jmeter变量,实例参考:https://www.cnblogs.com/uncleyong/p/10939647.html
如果是其它协议,比如dubbo、websocket、webservice、smtp、tcp、jdbc,添加对应的取样器等即可,如果没有,那么就需要我们自己开发,所以,java基础是必备的。
dubbo,实例参考:https://www.cnblogs.com/uncleyong/p/10732754.html
websocket,实例参考:https://www.cnblogs.com/uncleyong/p/10735967.html
webservice,实例参考:https://www.cnblogs.com/uncleyong/p/10990172.html
smtp,实例参考:https://www.cnblogs.com/uncleyong/p/10990159.html
tcp,实例参考:https://www.cnblogs.com/uncleyong/p/10739526.html
jdbc,实例参考:https://www.cnblogs.com/uncleyong/p/10990333.html
【逻辑控制器】
事务控制器
事务控制器:要把多个请求作为一个事务时才用,建议将这四个请求放在一个事务控制器中,并且勾选‘Generate parent sample’
ForEach控制器
类似计数器:https://www.cnblogs.com/uncleyong/p/13667202.html
ForEach的应用:先请求A页面,通过正则表达式获取到多个值,然后循环这些值,依次作为B请求的入参
classIds_matchNr=8,是jmeter正则个数的统计(${refName_matchNr}来引用函数总共发现的匹配组合数目),表示匹配到8个结果
所以,可以通过Debug PostProcessor取样器看到jmeter提供给我们的变量
输入变量classIds是一个数组
从0到${classIds_matchNr},(0, ${classIds_matchNr}],左开右闭 每次循环,获取到的值放到classId中
请求名称也加上变量,方便查看
仅一次控制器
仅一次控制器,是控制线程内部的循环只执行一次:
1个vuser,运行3次,查看结果树中1个结果
3个vuser,运行1次,查看结果树中3个结果
3个vuser,运行2次,查看结果树中3个结果
应用场景:非分布式压测中,只执行一次的被关联请求,比如登录
if控制器
https://www.cnblogs.com/uncleyong/p/13667202.html
循环控制器
https://www.cnblogs.com/uncleyong/p/13667202.html
【前置处理器】
发送请求前做的一些处理
BeanShell PreProcessor
实例参考:https://www.cnblogs.com/uncleyong/p/9429752.html,或者:https://www.cnblogs.com/uncleyong/p/7189778.html
【后置处理器】
发送请求后做的一些处理
正则表达式提取器
关联的方式很多,我喜欢用万能的正则,另外,大家可以看之前写的:jmeter关联的5种方式,或者:https://www.cnblogs.com/uncleyong/p/10779268.html
Debug PostProcessor
用于调试,除了可以看到jmeter变量,还可以看到配置信息,最好放在正则表达式提取器后面,否则看不到提取的结果;
BeanShell PostProcessor
实例参考:https://www.cnblogs.com/uncleyong/p/10939647.html
【断言】:检查点
响应断言
断言内容可以多个
断言持续时间
响应时间大于设置的值,就报错
BeanShell断言
实例参考:https://www.cnblogs.com/uncleyong/p/7189778.html
【定时器】:思考时间、集合点
固定定时器
相当于lr的思考时间
高斯随机定时器
下图表示思考时间在200-400ms之间
Synchronizing Timer:集合点
集合策略,集合线程数小于等于线程组设置的线程数,还可以设置超时时间
【配置元件】
HTTP信息头管理器
实例参考:https://www.cnblogs.com/uncleyong/p/11668665.html
HTTP Cookie管理器
域填写ip或者域名,路径根据实际情况填写,默认/
实例参考:https://www.cnblogs.com/uncleyong/p/11668665.html
CSV 数据文件设置
实例参考:https://www.cnblogs.com/uncleyong/p/12154065.html,或者:https://www.cnblogs.com/uncleyong/p/10988524.html
大量的变量值,我们一般用csv参数化
文件名:通过浏览,选择参数化的文件,参数化文件可以是多种格式,我一般用txt
文件编码:读取文件的编码,默认是US-ASCII,一般选择UTF-8
变量名称(西文逗号间隔):参数文件中每列的名称,如有多列,用英文逗号间隔,如果只有一列,则不加分隔符
忽略首行(只在设置了变量名称后才生效):如果参数文件中有很多列,为了区分每列,就在首行把列名写上,此时就要选True,
比如:username,passwd,age,addr,phone
jack,123456,18,beijing,119
tom,123456,19,beijing,110
分隔符(用'\t'代表制表符):是变量值的分隔符,比如上面,分隔符就是英文逗号。提醒:分隔符不能是参数化的值中的符号,否则会被截断,比如,你参数化整个json,逗号作为分隔符,而json中就有逗号,所以,发送请求的时候,会被截断。
是否允许带引号?:如果是False,请求中保留引号;如果是True:请求中去掉引号
遇到文件结束符再次循环?: True表示循环,False就取值EOF
遇到文件结束符结束线程?:值不够,停止线程,一般保持默认False,如果设置为true,则下面的设置失效
线程共享模式:
所有现场:所有线程共享一个数据文件
当前线程组:一个线程组一份数据文件,线程组内是所有线程共享一个数据文件
当前线程:每个线程一份数据文件
如果多个线程组,每个线程取值和测试计划中“独立运行每个线程组”是否勾选没有关系
总结,和LR差异
无随机、无每次出现、无once
模拟随机:其实把文件中值打乱,也相当于随机
HTTP请求默认值
一般填入ip、端口,后续的http取样器不填写,就读取http请求默认值
计数器
https://www.cnblogs.com/uncleyong/p/13667202.html
类似forEach
【监听器】:查看结果树、聚合报告
查看结果树
可以导入jtl文件查看结果
勾选表示仅展示失败的请求
可以选择结果展示方式为文本、html等
可以查看请求的内容
请求的响应结果
聚合报告
Label:每个JMeter的element的Name值。例如HTTP Request的Name
#Samples:发出请求数量。如第三行记录,模拟20个用户,循环100次,所以显示了2000
Average:平均响应时间(单位:ms)。默认是单个Request的平均响应时间,当使用了Transaction Controller时,也可以以Transaction为单位显示平均响应时间
Median:中位数,也就是50%用户的响应时间
90%Line:90%用户的响应时间【90%的用户响应时间不会超过这个值】
95%Line:同理
99%Line:同理
Min:最小响应时间
Max:最大响应时间
Error%:本次测试中出现错误的请求的数量/请求的总数;默认情况下,http200就是成功(http400这些就是error),如果加了断言,断言不通过的也算是error
Throughput:吞吐量。默认情况下表示每秒完成的请求数(包含成功和失败的)
KB/sec:每秒从服务器端接收到的数据量。
作用域
说起来既复杂又简单,为了大家不花过多时间在上面,我只说最简单的方式:
全局的放线程组下,局部的,专属哪个取样器,就放哪个取样器下。
jmeter执行顺序
配置元件 → 前置处理器 → 定时器 → 取样器 → 后置处理器 → 断言 → 监听器;
同一层级的,顺序执行;
函数助手
常用的函数需要掌握
随机函数
举例:生成1-1000的随机数,可以通过下面生成随机数,通过${key}可以获取这个随机数;
${__Random(1,1000,key)}
总之,需要某个功能可以先在函数助手中找找,没有的话,再考虑beashell实现。
官网:https://jmeter.apache.org/usermanual/functions.html
函数列表:
时间函数(含代码方式)
13位时间戳:${__time(,)}
10位时间戳:${__time(/1000,)}
jmeter获取当前时间、时间运算、时间比较、时间转换
https://www.cnblogs.com/uncleyong/p/12768623.html
加密函数
sha-256:https://www.cnblogs.com/uncleyong/p/12765569.html
md5:https://www.cnblogs.com/uncleyong/p/9429752.html
计数器:Counter
上面不勾选,这样,每个线程获取到的值都是不一样的。
00000表示格式,也可以加前缀,写成test00000
随机变量
00000表示格式,也可以加前缀,写成test00000
beanshell
beanshell相关的,实例参考:玩转jmeter:beanshell必备技能
日志相关
日志级别默认INFO
查看日志
分布式压测
分布式压测也是需要掌握的,实例参考:jmeter5.1分布式压测
生成报告
实例参考:https://www.cnblogs.com/uncleyong/p/9548723.html
jmeter最佳实践
最后,我们来看看官方的最佳实践,地址是:
http://jmeter.apache.org/usermanual/best-practices.html
上图大概意思是:https://mp.weixin.qq.com/s/0zL3HbmJ_YluNPdQ1QwRbA
关于jmeter脚本
脚本基本上不用录制方式,参考接口设计文档直接写,或者fiddler抓包写。
要想了解录制,实例参考:https://www.cnblogs.com/uncleyong/p/10990053.html
性能测试场景设计
性能测试中混合场景设计举例:https://www.cnblogs.com/uncleyong/p/12667392.html
【答疑】几个关于性能测试混合场景中比例控制的问题:https://www.cnblogs.com/uncleyong/p/16950853.html
__EOF__
关于博主:擅长性能、全链路、自动化、企业级自动化持续集成(DevTestOps)、测开等
面试必备:项目实战(性能、自动化)、简历笔试,https://www.cnblogs.com/uncleyong/p/15777706.html
测试提升:从测试小白到高级测试修炼之路,https://www.cnblogs.com/uncleyong/p/10530261.html
欢迎分享:如果您觉得文章对您有帮助,欢迎转载、分享,也可以点击文章右下角【推荐】一下!