Jmeter(2)、组件&作用域
Jmeter的脚本是由各种类型的组件构成。
(1)·线程组(用户):在Jmeter中,虚拟用户是采用的线程模式,脚本和虚拟用户是通过线程组来实现连接的。即一个线程组中的线程只会执行自己线程组下的脚本。
·线程组组件有三种可选:线程组、setUp线程组、tearDown 线程组。这三种线程组组件,功能本质上是一样,都是用来设置线程的启动、循环等。不论顺序如何,setUp线程组是先执行的,执行完毕之后再执行 线程组,最后执行tearDown 线程组。
·线程组的设置:线程组的设置就是组计划。
·线程数:即虚拟用户数。
·Ramp-Up 时间:该处设置的是启动所有线程所需的总时间。
在Jmeter中,虚拟用户(线程)采用的是每隔N秒启动1个线程的方式。N=启动总时间/线程数
·循环次数:即每一个线程循环执行线程组中的脚本的次数。
通过线程组我们能够控制的是线程的启动方式,并不能设置对服务器实际造成的压力。即每隔N秒启动一个用户不等价于每隔N秒向服务器发送一个请求,有可能上一个线程还未结束。
·调度器:线程停止的条件是:时间到达或者循环次数到达。
(2)·测试片段:是用来模块化测试脚本的。该组件下可以添加的组件类型和线程组是完全一样,区别在于,测试片段自身是不会执行的,必须在线程组中对其进行调用才会执行。
对于测试片段的调用,分为两种方式:
1.脚本内调用:在线程组内通过逻辑控制器--模块控制器来实现调用。
2.脚本外调用:在线程组内通过逻辑控制器--Include控制器来实现调用,Include控制器使用该测试片段的脚本。
(3)·逻辑控制器:是用来控制脚本(请求)的执行逻辑的,只对其子请求(该作用域下的请求)有效,即逻辑控制内部的请求有效。
模块:选择且只执行线程组下的某一个控制器
仅一次:只执行一次,不管线程组设置的循环次数是多少
简单:只是用来区分一下作用域
循环:作用域内的请求循环,类似于for循环
随机:作用域内的请求随机执行一个
随机顺序:作用域内的请求随机顺序执行,会全部执行
交替:作用域内的请求按顺序交替执行,且只执行一次,作用域外的同级请求不受影响
If:填入的表达式结果必须是布尔类型,需要使用jexl3或者groovy函数,如${__jexl3(1!=2,)},不能直接写成1!=2,这样是无效的
While:类似于while循环,依然可以使用jexl3或者groovy函数,为false则退出循环
(4)·Sampler:取样器,即请求组件。对于Jmeter来说,能否测试就取决于Sampler组件。
(5)·配置元件:是用来做一些组件的配置。
(6)·定时器:和时间控制有关的组件
(7)·前置处理器:是运行在请求之前的组件,用于前置处理。
(8)·后置处理器:是运行在请求之后的组件,针对响应做处理。
(9)·断言:是针对请求的响应做检测的。
(10)·监听器:是用来记录日志、测试结果等信息的。
配置元件、定时器、前置处理器、后置处理器、断言和监听器都是依赖于 取样器组 件的,都是服务于 取样器 组件的。它们 取样器 之间的交互是和作用域有关的。
作用域是指组件只对其父组件、同级组件和同级组件的所有子组件有效。
·严格来说,配置元件是全局有效,只是某些配置元件和作用域有关。
·定时器、前置处理器是运行在其作用域内的每一个请求之前,运行次数等于请求数量。
·后置处理器、断言是运行在其作用域内的每一个请求之后,运行次数等于请求数量。