JMeter——逻辑控制器、定时器、分布式、测试报告(四)

1. JMeter逻辑控制器

逻辑控制器

逻辑控制器可以按照设定的逻辑控制取样器的执行顺序

常用的逻辑控制器:

  • 如果(If)控制器
  • 循环控制器
  • ForEach控制器

1.1 如果(If)控制器

If控制器用来控制它下面的测试元素是否运行

添加方式:测试计划 --> 线程组–> (右键添加) 逻辑控制器 --> 如果(If)控制器

1.1.1 案例

需求

  1. 使用‘用户定义的变量’定义一个变量name,name的值可以是‘baidu’或‘taobao’
  2. 根据name的变量值实现对应网站的访问

操作步骤

  1. 添加线程组
  2. 用户定义的变量
  3. 添加If控制器,判断name是否等于baidu
  4. 添加HTTP请求,用来访问百度
  5. 添加If控制器,判断name是否等于taobao
  6. 添加HTTP请求,用来访问传智播客
  7. 添加查看结果树

If控制器
JMeter——逻辑控制器、定时器、分布式、测试报告(四)_第1张图片

1.1.2 详细参数
  • 名称 : 用于标识JMeter元素树中的元素的控制器
  • 注释 : 可用于包含指定条件的描述性解释的字段(有时条件可能非常复杂,将此类注释留作引用很有用)
  • 条件(默认Javascript): 由执行流程验证的条件,用于决定是否应执行子元素。默认情况下,条件被解释为返回“true”或“false”的Javascript代码
  • Interpret Condition as Variable Expression? - 此参数适用于不需要评估Javascript代码的情况。默认方法接受并将指定的条件解释为Javascript代码,然后验证结果是否等于true或false。但是如果您选择此参数,则不会使用任何Javascript解释,并且条件将被视为JMeter变量。
  • Evaluate for all children? - 如果选择此属性,则将检查每个子条目的指定条件,而不仅仅是一次,因为默认情况下已完成

1.2 循环控制器

通过设置循环次数,来实现循环发送请求

添加方式:测试计划 --> 线程组–> (右键添加) 逻辑控制器 —循环控制器

1.2.1 案例

需求

循环访问百度10次

操作步骤

  1. 添加线程组
  2. 添加循环控制器
  3. 添加HTTP请求
  4. 添加查看结果树

循环控制器
JMeter——逻辑控制器、定时器、分布式、测试报告(四)_第2张图片
线程组属性可以控制循环次数,那么循环控制器有什么用?

线程组属性控制组内所有取样器的执行次数,而循环控制器可以控制组内部分取样器的循环次数,后者控制精度更高

1.3 ForEach控制器

ForEach控制器一般和用户自定义变量或者正则表达式提取器一起使用,其在用户自定义变量或者从正则表达式提取器的返回结果中读取一系列相关的变量。 该控制器下的取样器都会被执行一次或多次,每次读取不同的变量值。

添加方式:测试计划 --> 线程组–> (右键添加) 逻辑控制器 --> ForEach控制器

1.3.1 案例

需求

有一组关键字
[hello,jmeter,test],使用用户定义的变量存储要依次取出关键字,并在百度搜索,例如:https://www.baidu.com/s?wd=hello

操作步骤

  1. 添加线程组
  2. 用户定义的变量
  3. 添加ForEach控制器
  4. 添加HTTP请求
  5. 添加查看结果树

用户定义的变量
JMeter——逻辑控制器、定时器、分布式、测试报告(四)_第3张图片

1.3.2 注意

序号前不要带0,如:name_01、name_02这种识别不到。

JMeter——逻辑控制器、定时器、分布式、测试报告(四)_第4张图片

1.3.3 综合应用案例(*)

需求

访问https://demodaojia.ecjia.com/,获取返回信息中的商品分类名称信息,并全部保存下来要依次取出关键字,并在百度搜索,例如:https://www.baidu.com/s?wd=说过蔬菜

JMeter——逻辑控制器、定时器、分布式、测试报告(四)_第5张图片

操作步骤

  1. 添加线程组
  2. 添加HTTP请求1 (水果网站)
  3. 添加正则表达式提取器
  4. 添加ForEach控制器
  5. 添加HTTP请求2(百度)
  6. 添加查看结果树

JMeter——逻辑控制器、定时器、分布式、测试报告(四)_第6张图片

JMeter——逻辑控制器、定时器、分布式、测试报告(四)_第7张图片
JMeter——逻辑控制器、定时器、分布式、测试报告(四)_第8张图片
JMeter——逻辑控制器、定时器、分布式、测试报告(四)_第9张图片
JMeter——逻辑控制器、定时器、分布式、测试报告(四)_第10张图片

2. JMeter定时器

2.1. 同步定时器(Synchronizing Timer)[集合点]

提示:在Jmeter中叫做同步定时器,在其他软件中又叫集合点。

思考?

  1. 如何模拟多个用户同时抢一个红包?
  2. 如何测试电商网站中的抢购活动、秒杀活动?
2.1.1 介绍

SyncTimer的目的是阻塞线程,直到阻塞了n个线程,然后立即释放它们。 同步定时器相当于一个储蓄池,累积一定的请求,当在规定的时间内达到一定的线程数量,这些线程会在同一个时间点一起= 并发,所以可以用来做大数据量的并发请求。

添加方式:测试计划 --> 线程组–> HTTP请求 --> (右键添加) 定时器 --> Synchronizing Timer

2.1.2 案例

场景

模拟100个用户同时访问百度首页,统计高并发情况下运行情况

操作步骤

  1. 添加线程组,设置线程数=100
  2. 添加HTTP请求
  3. 添加同步定时器
  4. 添加查看结果树
  5. 添加监听器-聚合报告

JMeter——逻辑控制器、定时器、分布式、测试报告(四)_第11张图片

JMeter——逻辑控制器、定时器、分布式、测试报告(四)_第12张图片
JMeter——逻辑控制器、定时器、分布式、测试报告(四)_第13张图片

2.1.3 注意事项

问题: 当用户数不能整除集合点组件的一组用户数属性时,如果超时时间是 0,会导致程序挂起,怎么避免挂起?

方案1: 点击 stop 强行终止,但是不建议
方案2: 修改一组用户数,能够做到整除(治标不治本)
方案3: 修改超时时间,不设置为 0,即便一组用户数填充不满,只要超时,也会执行(建议)

2.2 常数吞吐定时器(Constant Throughput Timer)

2.2.1 介绍

常数吞吐量定时器可以让JMeter以指定数字的吞吐量(以每分钟的样本数为单位,而不是每秒)执行。
吞吐量计算的范围可以为指定为当前线程、当前线程组、所有线程组。

添加方式:测试计划 --> 线程组–> HTTP请求 --> (右键添加) 定时器 --> Constant Throughput Timer

2.2.2 案例

场景

一个用户以 20QPS (20 次/s) 的频率访问百度首页,持续一段时间,统计运行情况

操作步骤

  1. 添加线程组,循环次数设置成永远
  2. 添加HTTP请求
  3. 添加常数吞吐定时器
  4. 添加查看结果树
  5. 添加监听器-聚合报告

JMeter——逻辑控制器、定时器、分布式、测试报告(四)_第14张图片

3. JMeter分布式

在使用JMeter进行性能测试时,如果并发数比较大(比如项目需要支持10000并发),单台电脑的(CPU和内存)可能无法支持,这时可以使用JMeter提供的分布式测试的功能。

3.1 JMeter分布式执行原理

  • JMeter分布式测试时,选择其中一台作为控制机(Controller),其它机器做为代理机(Agent)。
  • 执行时,控制机会把脚本发送到每台代理机上,代理机拿到脚本后就开始执行,代理机执行时不需要启动JMeter界面,可以理解它是通过命令行模式执行的。
  • 执行完成后,代理机会把结果回传给控制机,控制机会收集所有代理机的信息并汇总。

3.2 代理机(Agent)配置

  1. Agent机上需要安装JMeter
  2. 修改服务端口
  • 注意:非必须。如果是在同一台机器上演示需要使用不同的端口,多台机器可以不修改
  • 打开bin/jmeter.properties文件,修改server_port,比如:server_port=2001
  1. 将RMI SSL设置为禁用
  • 打开bin/jmeter.properties文件,修改为:server.rmi.ssl.disable=true
  1. 运行Agent上的jmeter-server.bat文件,启动JMeter

3.3 控制机(Controller)配置

  1. 修改JMeter的bin目录下jmeter.properties配置文件,修改remote_hosts
  • 示例:remote_hosts=192.168.182.100:1099,192.168.182.101:1099
  • IP和Port是Agent机的IP以及自定义的端口,多台Agent之间用","隔开
  1. 将RMI SSL设置为禁用
  • 打开bin/jmeter.properties文件,修改为:server.rmi.ssl.disable=true
  1. 启动JMeter
  2. 选择菜单:运行–>远程启动/远程全部启动

3.4 案例

一台控制机和两台执行机,做分布式;要求控制机启动,两台执行机执行,反馈结果;

实现步骤

1.配置代理机一,并启动
2.配置代理机二,并启动
3.配置控制机,并启动
4.添加线程组
5.添加HTTP请求
6.添加聚合报告

3.5 备注

  1. 修改完端口要重启JMeter
  2. 控制机和代理机最好分开,由于控制机需要发送信息给代理机并且会接受代理机回传的测试数据,所以控制机自身会有消耗
  3. 参数文件:如果使用csv进行参数化,那么需要把参数文件在每台slave上拷一份且路径需要设置成一样的;
  4. 每台机器上安装的JMeter版本和插件最好都一致,否则会出一些意外的问题;

4. JMeter测试报告

4.1 聚合报告

位置: 测试计划->右键->监听器->聚合报告

JMeter——逻辑控制器、定时器、分布式、测试报告(四)_第15张图片

  1. Label:每个请求的名称(勾选:在标签中包含组名称,显示线程组名-取样器名)
  2. #样本:各请求发出的数量
  3. 平均值:平均响应时间(单位:毫秒)。默认是单个Request的平均响应时间
  4. 中位数:中位数,50% <= 时间
  5. 90%百分比:90% <= 时间
  6. 95%百分比:95% <= 时间
  7. 99%百分比:99% <= 时间
  8. 最小值:最小响应时间
  9. 最大值:最大响应时间
  10. 异常%:请求的错误率 = 错误请求的数量/请求的总数
  11. 吞吐量:吞吐量。默认情况下表示每秒完成的请求数,一般认为它为TPS。
  12. 接收 KB/sec:每秒从服务器端接收到的千字节数
  13. 发送 KB/sec:每秒向服务器发送的千字节数

4.2 生成html测试报告

JMeter支持生成HTML测试报告,以便从测试计划中获得图表和统计信息。

4.2.1 生成HTML测试报告的两种方式
4.2.1.1利用已有.jtl文件生成报告

进入jmeter的bin目录下,输入如下命令:

jmeter -g test.jtl -o /path
# -g:后跟test.jtl文件所在的路径
# -o:后跟生成的HTML文件存放的路径

注意:如果是在Windows环境命令行运行,必须指定生成的HTML文件存放文件夹,否则会报错;如果是linux环境,如指定路径下不存在该文件夹,会生成对应的文件夹存放报告文件!

4.2.1.2无.jtl文件生成测试报告

如果还未生成.jtl文件,则可以通过如下命令,一次性完成测试执行和生成HTML可视化报告的操作,进入jmeter的bin目录下,输入如下命令:

jmeter -n -t ./test.jmx -l ./test.jtl -e -o ./path
# -n:以非GUI形式运行Jmeter 
# -t:source.jmx 脚本路径 
# -l:result.jtl 运行结果保存路径(.jtl),此文件必须不存在 
# -e:在脚本运行结束后生成html报告 
# -o:用于存放html报告的目录

注意

test.jtl和report会自动生成,如果在执行命令时result.jtl和report已存在,必须用先删除,否则在运行命令时就会报错

JMeter——逻辑控制器、定时器、分布式、测试报告(四)_第16张图片

4.3 测试报告内容

JMeter——逻辑控制器、定时器、分布式、测试报告(四)_第17张图片

4.3.1 Dashboard

Test and Report informations
JMeter——逻辑控制器、定时器、分布式、测试报告(四)_第18张图片
APDEX (应用性能指标)
JMeter——逻辑控制器、定时器、分布式、测试报告(四)_第19张图片

  • Apdex计算每笔交易APDEX的容忍和满足阈值基于可配置的值,范围在 0-1 之间,1表示达到所有用户均满意
  • T(Toleration threshold):容忍或满意阈值
  • F(Frustration threshold):失败阈值

Requests Summary(请求总结)
成功与失败的请求占比,KO指失败率,OK指成功率
JMeter——逻辑控制器、定时器、分布式、测试报告(四)_第20张图片

4.3.2 Chart(图表)

它包括Over Time(时间变化) 、Throughput(吞吐量) 、Response Times(响应时间)

4.3.2.1 Over Time

①、Response Times Over Time(脚本运行期间的响应时间变化趋势图)

说明:可以根据响应时间和变化和TPS以及模拟的并发数变化,判断性能拐点的范围。

JMeter——逻辑控制器、定时器、分布式、测试报告(四)_第21张图片
②、 Response Time Percentiles Over Time (successful responses)

说明:脚本运行期间成功的请求响应时间百分比分布图,可以理解为聚合报告里面不同%的数据,图形化展示的结果。
JMeter——逻辑控制器、定时器、分布式、测试报告(四)_第22张图片
③、Bytes Throughput Over Time(脚本运行期间的吞吐量变化趋势图)

说明:在容量规划、可用性测试和大文件上传下载场景中,吞吐量是很重要的一个监控和分析指标。

JMeter——逻辑控制器、定时器、分布式、测试报告(四)_第23张图片
④、 Latencies Over Time(脚本运行期间的响应延时变化趋势图)

说明:在高并发场景或者强业务强数据一致性场景,延时是个很严重的影响因素。
JMeter——逻辑控制器、定时器、分布式、测试报告(四)_第24张图片

4.3.2.2 Throughput

①、Transactions Per Second(每秒事务数)

说明:每秒事务数,即TPS,是性能测试中很重要的一个指标,它是用来衡量系统处理能力的一个重要指标。
JMeter——逻辑控制器、定时器、分布式、测试报告(四)_第25张图片

4.3.2.3 Response Times

①、 Response Time Percentiles(响应时间百分比分布曲线图)

说明:即响应时间在某个范围内的请求在所有请求数中所占的比率,相比于平均响应时间,这个值更适合用来衡量系统的稳定性。
JMeter——逻辑控制器、定时器、分布式、测试报告(四)_第26张图片

②、Time Vs Threads(平均响应时间和线程数的对应变化曲线)

说明:可以通过这个对应的变化曲线来作为确定性能拐点的一个参考值。

JMeter——逻辑控制器、定时器、分布式、测试报告(四)_第27张图片

你可能感兴趣的:(Jmeter,jmeter,分布式)