一、前言
本章我们将进一步介绍JMeter丰富的元件,以帮助大家构建复杂场景的测试脚本。
JMeter的测试脚本在界面中以「树」的形式呈现,保存后的测试脚本jmx文件本身也是xml格式。JMeter脚本树以测试计划(Test Plan)为根节点,所有的测试组件都会被包含在测试计划中。测试计划中可以配置被整个测试计划中的组件调用的自定义变量、线程组运行模式、测试中使用的库文件等。
在测试计划中使用多种测试组件,就可以构建丰富的测试场景。JMeter中的测试组件大致有以下几类:测试计划、线程组、取样器、逻辑控制器、监听器、配置元件、断言、定时器、前置处理器、后置处理器。其中共有8类可被执行的元件,test plan(测试计划)和线程组(thread group)不属于可被执行的元件,而sampler(取样器)是不与其他元件发生交互作用的元件。
接下来我们将逐一介绍,并对主要的组件进行详细说明。
二、测试计划(Test Plan)
用来描述一个性能/接口测试脚本和场景设计,包含与本次测试所有相关的功能。
也就是说,使用JMeter进行测试的所有内容,都是基于一个测试测试计划进行的。
简而言之,一个测试计划就对应一个JMeter测试脚本。
在JMeter-GUI中,只能编辑一个测试计划,如果需要新创建一个测试计划,就要开启一个全新的JMeter-GUI窗口界面。
三、线程组<Thread(Users)>
线程组元件是所有测试计划的入口。所有的取样器和控制器必须放在线程组下。一个线程组可以看作一个虚拟用户池,其中的每个线程都可以理解为一个虚拟用户,多个虚拟用户同时去执行相同的一批次任务。每个线程之间都是隔离的,互不影响的。一个线程的执行过程中,操作的变量不会影响其他线程的变量值。
JMeter自带的线程组,如下图所示:
上图可以看到,JMeter有三个添加线程组的选项,名字都不一样,但是创建之后,其界面是完全一样的。
注:很多人可能会有疑问,我这里线程组多了好几个选项跟你操作界面不一样,因为我这里添加了通过JMeter插件管理器添加了一些插件进来,所以会比诸君多了不同的选项
添加完后,线程组的界面如下图:
在线程组界面中可以设置以下数据,进行线程组的控制:
名称&注释
从名字大家就能看的明白哈,没必要做详细阐述。
取样器错误后要执行的动作
这几个配置项控制了「当遇到错误的时候测试的执行策略」是否会继续执行。
- 继续:忽略错误,继续执行
- 启动下一进程循环: 忽略错误,线程当前循环终止,执行下一个循环。
- 停止线程:当前线程停止执行,不影响其他线程正常执行。
- 停止测试:整个测试会在所有当前正在执行的线程执行完毕后停止
- 立即停止测试:整个测试会立即停止执行,当前正在执行的取样器可能会被中断。
线程数
线程数也就是并发用户数,每个线程将会完全独立地运行测试计划,互不干扰。测试中使用多个线程用于模仿对服务器的并发访问。
ramp-up时间
ramp-up时间用于设置启动所有线程所需要的时间。例如:线程数设置为10,ramp-up时间设置为100秒,那么JMeter将使用100秒使10个线程启动并运行,每个线程将在前一个线程启动后的10秒启动。
如果ramp-up值设置得很小、线程数又设置得很大,刚开始执行测试时会对服务器产生很大的压力。
循环次数
设置结束前线程组中每个线程循环的次数。
延迟创建线程直到需要
默认情况下,测试开始的时候,所有线程就全部创建了。如果勾选了此选项,那么线程在需要用到的时候才创建。
线程组调度器
调度器配置可以更灵活地控制线程组执行的时间
(1)持续时间:控制测试执行的持续时间,以秒为单位。
(2)启动延迟:控制测试在多久后启动执行,以秒为单位。
四、取样器
取样器是用来模拟用户操作的,是向服务器发送请求、接收服务器响应数据的运行单元。取样器是包含在线程组内部的组件,因此它必须在线程组中添加。JMeter原生支持多种不同的取样器,如TCP取样器、HTTP请求、FTP请求、JDBC请求、Java请求等,每一种不同类型的取样器根据设置的参数向服务器发出不同类型的请求。
TCP取样器
TCP 取样