天天看点

一文搞定jmeter:工作中jmeter常用功能

作者:软件测试教育知识

测试计划

  • 线程组
  • 【Sampler】
  • 【逻辑控制器】
  • 【前置处理器】
  • 【后置处理器】
  • 【断言】:检查点
  • 【定时器】:思考时间、集合点
  • 【配置元件】
  • 【监听器】:查看结果树、聚合报告
  • 作用域
  • jmeter执行顺序
  • 函数助手
  • beanshell
  • 日志相关
  • 分布式压测
  • 生成报告
  • jmeter最佳实践
  • 关于jmeter脚本
  • 性能测试场景设计

之前,写过一篇文章:jmeter,学这些重点就可以了,今天就来把一些重点细节点说一下。

测试计划

可以理解为各种测试元件的容器

一文搞定jmeter:工作中jmeter常用功能

其中:

用户定义变量:定义整个测试中使用的重复值(全局变量),一般定义服务器的ip、端口,这样,我们改下值,就可以测试不同的环境了,比如测试环境、灰度环境等;或者把对应的几个测试环境都设置为变量,后面用哪个,就引用哪个,不过这个引用,最好是在请求默认值中引用,默认不勾选,如果测试计划下有多个启用的线程组,他们是并行执行的(也就是混合场景);

如果勾选,是顺序执行,即前一个线程组执行完了,才执行下一个线程组,大家可以试一下;相当于lr的group模式;调试的时候用,会打印更多日志,不勾选,勾选的话很影响性能,会有详细的请求记录,消耗资源;函数测试模式勾选了,还要把查看结果树写到一个路径下的文件中,函数测试模式才生效

一文搞定jmeter:工作中jmeter常用功能
一文搞定jmeter:工作中jmeter常用功能

一般用于添加jar包配合着beanshell使用,注意:lib目录下加入了新的jar包,需要重启jmeter;参考链接中“方式一:把jar包加入到classpath”:参考其他文章:https://www.cnblogs.com/uncleyong/p/11475577.html

线程组

相当于LR中场景设计,可以设置一些并发策略,模拟并发用户发送请求

一文搞定jmeter:工作中jmeter常用功能

其中:

一文搞定jmeter:工作中jmeter常用功能

默认即可,并发过程中,遇到错误,继续执行下一次请求

线程数:并发数

一文搞定jmeter:工作中jmeter常用功能

在指定的时间内启动线程,如果线程数是100,这里是10,表示10秒内启动100线程,但是不一定是每秒启动10个线程,循环次数:不勾选永远,后面的次数生效;类似LR中运行时设置中迭代次数;循环控制器是循环,相当于LR中的for循环

一文搞定jmeter:工作中jmeter常用功能

调度器配置:

循环次数中勾选永远,持续时间就是并发的时间,一般10-15分钟,根据业务实际情况来设置If Loop Count is not -1 or Forever, duration will be min(Duration, Loop Count * iteration duration),如果未勾选永远,建议不要勾选调度器和设置持续时间

一文搞定jmeter:工作中jmeter常用功能

在当前时间之后的启动延迟时间后开始运

【Sampler】

在线程组下(在测试计划下面不能添加取样器),是被请求内容;假如请求是:http://192.168.168.168:8057/user/query?name=全栈测试笔记

一文搞定jmeter:工作中jmeter常用功能

自动重定向:只记录最后跳转请求,会丢失初始请求的Cookie等信息;

跟随重定向:记录整个请求过程所有信息, 过程请求为sub-sampler,即子请求

一文搞定jmeter:工作中jmeter常用功能

POST请求时,使用的Content-Type,文件上传的时候使用;默认不勾选,此时的Content-Type是application/x-www-form-urlencoded

一文搞定jmeter:工作中jmeter常用功能

参数中,如果有特殊字符时(“=”、“&”、“?”等),最好选上“编码”,否则字符串可能会被截断;

一文搞定jmeter:工作中jmeter常用功能

自动添加参数名和值之间的等号

一文搞定jmeter:工作中jmeter常用功能

发送json和发送文件

一文搞定jmeter:工作中jmeter常用功能
一文搞定jmeter:工作中jmeter常用功能

上图,客户端实现默认是HttpClient4,也可以从配置文件中看到,当然也可以改配置文件

一文搞定jmeter:工作中jmeter常用功能
一文搞定jmeter:工作中jmeter常用功能

客户端设置超时时间

一文搞定jmeter:工作中jmeter常用功能

jmeter在发出 HTTP请求并获得响应的HTML文件内容后,且对该HTML进行分析并获取HTML中包含的所有资源(图片等),默认不选中,此选项和loadrunner中是否下载非html资源类似;

一文搞定jmeter:工作中jmeter常用功能

响应保存为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

一文搞定jmeter:工作中jmeter常用功能

如果是其它协议,比如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’

一文搞定jmeter:工作中jmeter常用功能

ForEach控制器

类似计数器:https://www.cnblogs.com/uncleyong/p/13667202.html

ForEach的应用:先请求A页面,通过正则表达式获取到多个值,然后循环这些值,依次作为B请求的入参

一文搞定jmeter:工作中jmeter常用功能
一文搞定jmeter:工作中jmeter常用功能

classIds_matchNr=8,是jmeter正则个数的统计(${refName_matchNr}来引用函数总共发现的匹配组合数目),表示匹配到8个结果

所以,可以通过Debug PostProcessor取样器看到jmeter提供给我们的变量

一文搞定jmeter:工作中jmeter常用功能

输入变量classIds是一个数组

1、从0到${classIds_matchNr},(0, ${classIds_matchNr}],左开右闭。

2、每次循环,获取到的值放到classId中。

请求名称也加上变量,方便查看

一文搞定jmeter:工作中jmeter常用功能

仅一次控制器

仅一次控制器,是控制线程内部的循环只执行一次:

1个vuser,运行3次,查看结果树中1个结果

3个vuser,运行1次,查看结果树中3个结果

3个vuser,运行2次,查看结果树中3个结果

应用场景:非分布式压测中,只执行一次的被关联请求,比如登录

一文搞定jmeter:工作中jmeter常用功能

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变量,还可以看到配置信息,最好放在正则表达式提取器后面,否则看不到提取的结果;

一文搞定jmeter:工作中jmeter常用功能

BeanShell PostProcessor

实例参考:https://www.cnblogs.com/uncleyong/p/10939647.html

【断言】:检查点

响应断言

断言内容可以多个

一文搞定jmeter:工作中jmeter常用功能

断言持续时间

响应时间大于设置的值,就报错

一文搞定jmeter:工作中jmeter常用功能

BeanShell断言

实例参考:https://www.cnblogs.com/uncleyong/p/7189778.html

【定时器】:思考时间、集合点

固定定时器

相当于lr的思考时间

一文搞定jmeter:工作中jmeter常用功能

高斯随机定时器

下图表示思考时间在200-400ms之间

一文搞定jmeter:工作中jmeter常用功能

Synchronizing Timer:集合点

集合策略,集合线程数小于等于线程组设置的线程数,还可以设置超时时间

一文搞定jmeter:工作中jmeter常用功能

【配置元件】

HTTP信息头管理器

一文搞定jmeter:工作中jmeter常用功能

实例参考:https://www.cnblogs.com/uncleyong/p/11668665.html

HTTP Cookie管理器

域填写ip或者域名,路径根据实际情况填写,默认/

一文搞定jmeter:工作中jmeter常用功能

实例参考: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参数化

一文搞定jmeter:工作中jmeter常用功能

文件名:通过浏览,选择参数化的文件,参数化文件可以是多种格式,我一般用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,则下面的设置失效

线程共享模式:

  所有现场:所有线程共享一个数据文件

  当前线程组:一个线程组一份数据文件,线程组内是所有线程共享一个数据文件

  当前线程:每个线程一份数据文件

  如果多个线程组,每个线程取值和测试计划中“独立运行每个线程组”是否勾选没有关系

HTTP请求默认值

一般填入ip、端口,后续的http取样器不填写,就读取http请求默认值

一文搞定jmeter:工作中jmeter常用功能

计数器

https://www.cnblogs.com/uncleyong/p/13667202.html

类似forEach

【监听器】:查看结果树、聚合报告

查看结果树

一文搞定jmeter:工作中jmeter常用功能
一文搞定jmeter:工作中jmeter常用功能

可以导入jtl文件查看结果

一文搞定jmeter:工作中jmeter常用功能

勾选表示仅展示失败的请求

一文搞定jmeter:工作中jmeter常用功能

可以选择结果展示方式为文本、html等

一文搞定jmeter:工作中jmeter常用功能

可以查看请求的内容

一文搞定jmeter:工作中jmeter常用功能

请求的响应结果

聚合报告

一文搞定jmeter:工作中jmeter常用功能

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:同理

一文搞定jmeter:工作中jmeter常用功能

Min:最小响应时间

Max:最大响应时间

Error%:本次测试中出现错误的请求的数量/请求的总数;默认情况下,http200就是成功(http400这些就是error),如果加了断言,断言不通过的也算是error

Throughput:吞吐量。默认情况下表示每秒完成的请求数(包含成功和失败的)

KB/sec:每秒从服务器端接收到的数据量。

作用域

说起来既复杂又简单,为了大家不花过多时间在上面,我只说最简单的方式:

全局的放线程组下,局部的,专属哪个取样器,就放哪个取样器下。

jmeter执行顺序

配置元件 → 前置处理器 → 定时器 → 取样器 → 后置处理器 → 断言 → 监听器;

同一层级的,顺序执行;

函数助手

常用的函数需要掌握

随机函数

举例:生成1-1000的随机数,可以通过下面生成随机数,通过${key}可以获取这个随机数;

1、${__Random(1,1000,key)}

一文搞定jmeter:工作中jmeter常用功能

总之,需要某个功能可以先在函数助手中找找,没有的话,再考虑beashell实现。

官网:https://jmeter.apache.org/usermanual/functions.html

函数列表:

一文搞定jmeter:工作中jmeter常用功能
一文搞定jmeter:工作中jmeter常用功能

时间函数(含代码方式)

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

一文搞定jmeter:工作中jmeter常用功能

上面不勾选,这样,每个线程获取到的值都是不一样的。

00000表示格式,也可以加前缀,写成test00000

随机变量

一文搞定jmeter:工作中jmeter常用功能

00000表示格式,也可以加前缀,写成test00000

beanshell

beanshell相关的,实例参考:玩转jmeter:beanshell必备技能

日志相关

日志级别默认INFO

一文搞定jmeter:工作中jmeter常用功能

查看日志

一文搞定jmeter:工作中jmeter常用功能

分布式压测

分布式压测也是需要掌握的,实例参考:jmeter5.1分布式压测

生成报告

实例参考:https://www.cnblogs.com/uncleyong/p/9548723.html

jmeter最佳实践

最后,我们来看看官方的最佳实践,地址是:http://jmeter.apache.org/usermanual/best-practices.html

一文搞定jmeter:工作中jmeter常用功能

关于jmeter脚本

脚本基本上不用录制方式,参考接口设计文档直接写,或者fiddler抓包写。

要想了解录制,实例参考:https://www.cnblogs.com/uncleyong/p/10990053.html

性能测试场景设计

性能测试中混合场景设计举例:https://www.cnblogs.com/uncleyong/p/12667392.html

继续阅读