组件
JMeter的脚本是由JMeter的各种组件构成的,组件就是指JMeter封装好了具备有各种功能的可以快捷操作的元素。一般来说,同一种类型、作用的组件会归为一类。在JMeter中,组件总计有以下几类:
- 测试计划
- 线程(用户)
- 测试片段
- 逻辑控制器
- 配置元件
- 定时器
- 前置处理器
- 取样器
- 后置处理器
- 断言
- 监听器
- 非测试元件
PS:相同类型的组件在GUI界面具有相同的图标,相同类型的组件不能通过图标区分,要根据组件页面的组件类型名称进行区分。
测试计划
测试计划组件是Jmeter脚本中的根组件,属于必选组件,JMeter的脚本都是位于测试计划组件。因此要保存脚本则需要保存测试计划,而不能选中某一个组件点击保存(老版本存在,新版本已经将保存按钮修复为保存测试计划)。在测试计划组件中,我们一般用到的设置为:
1、可以在测试计划下定义变量,这里定义的变量将在整个测试计划下,即整个脚本中起效。通常来说,比如说服务器地址、一些因为环境变化可能需要变化的值(变化不频繁)。
2、独立运行每个线程组。在JMeter的测试计划下,可以添加多个线程组组件。对于同一种线程组,默认情况下不同线程组中的线程是独立、并行执行的。而如果需要脚本按照测试计划下的线程组的自然顺序串行执行,则需要勾选该选项。
3、该选项可以将JMeter脚本运行过程中需要用到的jar包(一般是beanshell、jsr等组件)引入。通过该方式引入jar包,不需要重启JMeter。不过不推荐使用该方式,建议还是将jar包引入到lib目录,然后重启JMeter。
线程(用户):线程组类组件,属于必选组件。所有的请求类组件必须位于线程组组件下才可以执行。
线程组组件有三种可选的线程组:
- setUp线程组
- 线程组
- tearDown线程组
PS:
- 以上三种线程组都可以用来设置线程计划,作用是一样的。
- 如果一个测试计划下存在多个不同类型的线程组,则运行机制如下:
-
-
- 同一种类型的线程组是同步运行,即并发运行的。
- 不同类型的线程组,遵循下列顺序:
-
所有的setUp线程组-->线程组-->tearDown线程组。
-
-
- 执行顺序和线程组组件在测试计划中的顺序无关。
-
线程组设置(计划)
在Jmeter中,场景计划就是测试计划,测试计划又是由测试计划组件中的所有线程组来实现的。
Jmeter的场景计划相当于是LR中的group模式。
- 线程数:就是虚拟用户数量,就是用来向服务器发起请求的用户数量。
PS:线程数不等于并发数,线程数>=并发数。
线程数不一定等于在线用户数,线程数>=在线用户数。
- Ramp-Up时间:该选项是用来设置Jmeter启动所有线程所需要的总时间。
PS:
·Jmeter启动线程采用的是平均每隔N秒启动一个线程的方式。
N秒=总时间/线程数
·启动线程的频率和向服务器发起请求的频率没有必然关系。
- 循环次数:就是指每一个线程循环执行脚本的次数。
- Same User on each Iteration:和keep-alive和cookie都有关系。
对于涉及到html资源加载的情况,建议勾选。
如果是纯http接口,不涉及到html资源加载的情况,建议不勾选。
PS:
如果服务器端做了keep-alive的支持,则建议勾选,否则不建议。
该选项和http请求中的keep-alive选项保持同步
- 调度器:
-
-
- 持续时间:是指整个测试所持续执行的时间,即从点击启动按钮开始,延迟“启动延迟”时间之后,执行脚本的总时间。
- 启动延迟:是指点击启动按钮之后,延迟N秒再开始执行脚本。
-
PS:
在jmeter中,线程停止的条件是:满足循环次数or持续时间到达。
逻辑控制器:
这类组件主要是对取样器组件起效,是用来控制取样器组件的执行逻辑的。
本质上是图形化、组件化、傻瓜式的代码逻辑控制组件。
PS:
逻辑控制器只对其子组件有效。
常用的逻辑控制器:
·仅一次控制器
·简单控制器
·循环控制器
·事务控制器
·foreach控制器
·if控制器
取样器:
Sampler,又叫请求,严格来说是不同协议的请求的模板。
取样器是必加组件,根据协议选择对应的取样器组件即可。
具体介绍参考http协议的文章。
配置元件:
是用来辅助测试实现的一些组件,属于可选组件。根据实际的情况选择使用即可。
定时器:
和时间有关的组件,思考时间、集合点组件都属于定时器类组件。
前置处理器:
运行在取样器之前的一类组件,一般用来完成一些前置性的工作,比如说数据处理等。
前置处理器执行是发生在发送请求之前。
·后置处理器:
运行在取样器之后的一类组件,一般是用来对响应结果做处理的。
后置处理器是发生在获取到响应之后。
·断言:
就是用来实现检查点功能的组件,用来检查脚本的业务执行是否成功。
·监听器:
就是日志组件,是用来收集和展示各种不同类型的日志数据。
PS:配置元件、定时器、前置处理器、后置处理器、断言、监听器这六大类组件都是用来服务于取样器组件。
这六类组件对于取样器组件的作用机制是和作用域机制有关。
·作用域:
作用域是指六大类组件对于取样器组件的起效机制。
作用域的定义:六大类组件会对其父级的组件(请求)、所有同级的组件、所有同级组件的子组件有效。
作用域起效的规则如下:
- 定时器、前置处理器是发生在其作用域范围内的所有的请求之前,和组件本身在测试计划中的先后顺序无关。执行次数等于其作用域范围内的请求组件的数量。
- 后置处理器、断言是发生在其作用域范围内的所有的请求之后,和组件本身在测试计划中的先后顺序无关。执行次数等于其作用域范围内的请求组件的数量。