一、Jmeter核心结构和运行原理
1、JMeter核心结构
测试计划
线程组
配置元件
前置处理器
取样器
定时器
后置处理器
断言
监听器
逻辑控制器
测试计划:如果把JMeter的结构看成一棵树,测试计划就是树的根,所有JMeter脚本都在测试计划下去运行
线程组:线程组是任何一个测试计划的开始点。在一个测试计划中的所有元件都必须在某个线程组下。所有的任务都是基于线程组。因为JMeter是基于线程去运行请求的
配置元件:配置元件提供对静态数据的支持。如:数据库配置、JMeter变量定义、读取外部数据文件的配置等等
前置处理器:执行JMeter取样器之前,会被运行的元件;相当于pytest中的钩子,主要用来准备测试数据。
取样器:JMeter编写核心业务脚本的元件,所有其他元件本质上都是作用于取样器。
定时器:让每个线程中的每个请求按照设置的时间停顿,可以控制请求的频率,性能测试中会使用它进行吞吐量的限制。
后置处理器:执行JMeter取样器之后,会被运行的元件;主要用于处理响应数据
断言:断言取样器的响应结果的元件,通过它可以让程序帮助我们判断实际结果与预期是否一致
监听器:监听并采集所有元件的运行结果,例如监听器中的查看结果树可以采集取样器的运行结果
逻辑控制器:控制JMeter业务脚本的运行逻辑
2、JMeter的体系结构
X维度描述不同的组件、Y维度描述性能、Z维度描述监听
X1:用户脚本,断言
X2:对用户脚本的补充,例如数据准备、参数化、销毁还原数据等等
X3:控制用户脚本的业务流程
X4:控制用户脚本的执行周期,在性能测试中可以控制请求的频率;也可以设置集合点进行并发测试
X5:JMeter基于线程组来控制线程运行用户脚本
Y1:对性能的划分,使用取样器、配置元件、控制器、定时器
Y2:负责校验用户脚本的运行结果
Z:负责收集用户脚本的执行结果,它可以采集多个线程组的执行结果
不同层次从下往上执行
同一层次从左向右执行
线程组——》定时器——》控制器——》前置处理器——》配置原件——》采样器——》后置处理器——》断言——》监听器
3、JMeter运行原理
JMeter是以线程的方式运行的,通过线程组来驱动多线程运行测试脚本
JMeter的运行方式,可以分为两种:
a、GUI模式:
图形用户界面运行模式,可视化,更加直观,使用鼠标操作,方便实时查看运行状态,如测试结果、运行线程数等;
b、非GUI模式:
命令行模式,对负载机的资源消耗更小,GUI模式会影响负载量的生成,比如非GUI模式100个线程可以产生100TPS的负载,而GUI模式只能产生80TPS的负载;
基于JMeter的分布式设计,JMeter可以分为单机模式运行和分布式模式运行
c、单机模式:
本地模式运行
d、分布式模式
一台JMeter控制机(Master)控制远程的多台负载机器(Slave)来运行
控制机:控制机也是一台负载机,只不过是多台负载机中被选中作为管理机的那台机器
负载机:向被测服务器发起请求的机器