遇一山,过一山,处处有风景;只要勇敢向前,一路尽是繁花盛开。 | (点击查看→)【测试干货】python/java自动化、持续集成、性能、测开、简历、笔试面试等

【性能测试 - jmeter系列】工作中常用功能

 

jmeter系列

JMeter【第一篇】JMeter5.1在windows(含插件安装)及linux下安装

JMeter基础【第二篇】JMeter5.1介绍及脚本录制

JMeter基础【第三篇】JMeter5.1元件作用域及执行顺序

JMeter基础【第四篇】JMeter5.1参数化

JMeter基础【第五篇】JMeter5.1关联:正则关联一个及多个值

JMeter基础【第五篇】JMeter5.1关联:5种关联方法

JMeter基础【第六篇】JMeter5.1事务、检查点、集合点、思考时间、其余设置等

JMeter基础【第七篇】BeanShell

JMeter基础【第八篇】JMeter分布式压测

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协议接口脚本(有道云笔记)

 

 

https://mp.weixin.qq.com/mp/appmsgalbum?action=getalbum&__biz=MzIxMzMxMDcwNA==&scene=1&album_id=1338159192301027331&from=groupmessage#wechat_redirect

 

 

其它工具【第一篇】badboy安装及使用

其它工具【第二篇】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

 

posted @ 2020-02-21 21:46  全栈测试笔记  阅读(14839)  评论(0编辑  收藏  举报
浏览器标题切换
浏览器标题切换end