JMeter的主要元件有测试计划线程组取样器逻辑控制器配置元件前置处理器后置处理器监听器定时器断言

其中共有8类可被执行的元件,test plan(测试计划)和thread group(线程组)不属于可被执行的元件,而sampler(取样器)是不与其他元件发生交互的作用的元件。

下面我们就来逐一介绍一下这些元件。(这里只做介绍,后面会详细说明每一个元件)

1、测试计划(Test Plan)

用来描述一个性能/接口测试脚本和场景设计,包含与本次测试所有相关的功能。

也就是说,使用JMeter进行测试的所有内容,都是于基于一个测试计划中。

在换个说法,一个测试计划就对应一个JMeter测试脚本。

JMeter-GUI中,只能编辑一个测试计划,如果需要新创建一个测试计划,就要开启一个新的JMeter-GUI窗口界面。

2、线程组<Threads(Users)>

线程组元件是任何一个测试流程的起始点,在一个测试计划中的所有元件都必须在某个线程组下。

JMeter自带的线程组,如下图所示:

上图可以看到,JMeter有三个添加线程组的选项,名字不一样, 但是创建之后,其界面是完全一样的。

线程组概括说明

  1. 线程组是一个测试流程的起始点。
  2. 线程组中可以有多个线程。线程组也可以看作是一个虚拟用户组,线程组中的每一个线程都可以理解为相当于一个“虚拟用户”。
  3. 线程组中一个取样器代表一个请求,一个请求等同于一个线程。
  4. 每个线程都会独立的运行测试计划,互不干扰,多个线程用于模仿对服务器的并发访问。
  5. 线程组元件可以设置线程数、设置执行测试的次数等操作。

3、取样器(sampler)

取样器是用来模拟用户操作的,向服务器发送请求以及接收服务器的响应数据。

取样器是线程组内部的元件,也就是说取样器只能在线程组中添加。

取样器(Sampler)是性能测试中向服务器发送请求,记录响应信息,记录响应时间的最小单元。(取样器通常要进行这三个工作)

取样器是按照测试计划树的顺序从上到下执行的。且取样器配合控制器使用,可以修改取样器的执行顺序和次数。

JMeter自带的取样器,如下图所示:

4、逻辑控制器(Logic Controller)

我们有编程基础的人都知道,提到逻辑主要就是条件和循环。

JMeter官网对逻辑控制器的解释是:Logic Controllers determine the order in which Samplers are processed.

意思是说,逻辑控制器可以控制采样器(samplers)的执行顺序

由此可知,控制器需要和采样器一起使用,否则控制器就没有什么意义了。放在控制器下面的所有的采样器都会当做一个整体,执行时也会一起被执行。

JMeter提供了17种逻辑控制器,它们各个功能都不尽相同,大致可分为2种类型:

  • 一类是用于控制 test plan (测试计划)中 sampler (取样器)节点发送请求的逻辑顺序的控制器,常用的有If Controllerswitch ControllerRuntime ControllerLoop Controller(循环控制器)等。
  • 另一类是用来组织可控制的sampler 节点,也就是对测试计划中的取样器进行分组,方便JMeter统计执行结果,以及运行脚本时的控制操作等。 如Transaction Controller(事务控制器)、Throughput Controller(吞吐量控制器)等。

JMeter自带的逻辑控制器,如下图所示:

5、配置元件(Config Element)

JMeter的配置元件(config element)用于提供对静态数据的配置支持,可以为取样器设置默认值和变量。

配置元件有很多的功能,读取文件数据,设置公共请求参数,赋予变量值等,以便后续取样器使用。

(类似于项目中配置文件的作用,如数据、地址、数据库链接等进行配置)

例如:性能测试中为了模拟大量用户操作我们往往需要做参数化, JMeter的参数化可以通过配置元件来完成,利用CSV Data Set config(CSV数据文件设置)可以将本地数据文件形成数据池 (Data Pool),它可以帮助我们从文件中读取测试数据。

另外JMeter也提供了众多的函数来帮我们生成动态数据。(通过函数助手可以查看到,后续会讲到)

再例如,配置元件还可以用来记录服务器的返回数据,如HTTP Cookie Manager 可以用于对 HTTP Request Samplercookie 进行管理。

简而言之,配置元件是为取样器提供预备数据,然后由取样器发出请求。

JMeter自带的配置元件,如下图所示:

6、定时器(Timer)

用户实际操作时,并非是连续点击,而是存在很多停顿的情况,例如:用户需要时间阅读文字内容、填表、或者查找需要点击的链接等。为了模拟用户实际情况,在性能测试中我们需要考虑操作时间。若不认真考虑操作时间很可能会导致测试结果的失真。例如,估计的可支撑用户数可能会偏小。

在性能测试中,访问请求之间的停顿时间被称之为思考时间

那么如何模拟这种停顿呢?我们可以借助JMeter的定时器元件实现。

JMeter中的定时器一般被我们用来设置延迟与同步(操作之间的等待时间)。定时器的执行优先级高于Sampler(取样器),在同一作用域(例如控制器下)下有多个定时器存在时,每一个定时器都会执行,如果想让某一定时器仅对某一Sampler有效,则可以把定时器加在此Sampler节点下。

JMeter自带的定时器,如下图所示:

提示:定时器常用于控制客户端QPS的手段。

7、前置处理器(Per Processors)

前置处理器是在取样器发出请求之前执行一些操作。即:如果将前置处理器附加到取样器元件,则它将在该取样器元件运行之前执行。

前置处理器主要是用来处理,请求在实际发送之前的一些准备工作,比如取样器参数设置、环境变量设置、脚本预处理等操作。

例如:当URL中有sessionID一类的session信息时,可以通过该处理器填充发出请求实际的sessionID。

JMeter自带的前置处理器,如下图所示:

8、后置处理器(Post Processors)

用于对Sampler发出请求后得到的服务器响应进行处理。一般用来提取响应中的特定数据(类似LoadRunner中的关联)。

例如:我们在做接口测试的时候,难免会遇到一个接口的请求参数是另一个接口的响应结果,这个时候就需要用到后置处理器来处理我们的请求参数。如系统登录成功后我们要获取sessionid,在后面业务操作中服务器会验证这个sessionID,获取sessionID这个过程,就是用后置处理器中的正则表达式提取器来完成。

后置处理器常用于:处理响应数据,提取某个值。

JMeter自带的后置处理器,如下图所示:

9、断言(Assertions)

断言是自动化测试中最重要且绕不开的一个概念,让自己的程序尽可能像人一样去做判断,这是自动化测试需要实现的重要功能。

JMeter中的断言用于检查测试中得到的响应数据等是否符合预期,Assertions一般用来设置检查点,用以保证性能测试过程中的数据交互与预期一致。(它的作用和LoadRunner中的检查点类似)

JMeter中断言的原理:在Request的返回层面,增加一层判断机制,因为Request成功了,并不代表结果一定正确。

一个Sampler可以添加多个断言,根据你的检查需求来添加相应的断言,多个断言属于并的操作。当Sampler下所有的断言都通过了,那么才算是请求成功。

JMeter自带的断言,如下图所示:

10、监听器(Listener)

JMeter中的监听器,是对测试结果进行处理和可视化展示的一系列组件,能够显示取样器请求和响应的细节以及请求结果,包括消息头,请求的数据,响应的数据。

常用的监听器有图形结果、查看结果树、聚合报告等。

注意

  1. 监听器放的位置不同,查看的结果也不同。

    在线程组下添加监听器,查看线程组下所有请求的结果;

    放在具体某个请求下,只查看此请求的结果;

    若放在某个控制器节点下,则查看此控制器下节点执行的结果;
  2. 该监听器推荐做调试用,在实际运行压测时,应该禁用。因为大量请求时,启用监听器时打印的日志比较多,会造成大IO消耗,影响压力机性能。
  3. 不同的监听器,通过不同的方式,展示服务器响应信息,但是它们原始结果数据都是一样的。
  4. JMeter监听器有两种方式存储监听记录:

    1)默认保存方式:CSV格式。占用磁盘比较少,推荐使用这种方式保存。

    2)xml保存方式:保存数据最全面,但是占用内存大。

JMeter自带的监听器,如下图所示:

参考:

『动善时』JMeter基础 — 8、JMeter主要元件介绍的更多相关文章

  1. 『动善时』JMeter基础 — 6、使用JMeter发送一个最基础的请求

    目录 步骤1:创建一个测试计划 步骤2:创建线程组 步骤3:创建取样器 步骤4:创建监听器 步骤5:完善信息 步骤6:保存测试计划 步骤7:查看结果 总结:JMeter测试计划要素 当我们第一次打开J ...

  2. 『动善时』JMeter基础 — 1、JMeter介绍

    1.什么是JMeter Apache JMeter是Apache组织开发的基于Java的压力测试工具,用于对软件做压力测试.它最初被设计用于Web应用测试,但后来扩展到其他测试领域. (Apache ...

  3. 『动善时』JMeter基础 — 2、JMeter的安装和启动

    1.安装Java环境 由于JMeter是纯Java的桌面应用程序,因此它的运行环境需要Java环境,即需要安装JDK或JRE.(也就是安装JDK环境) 步骤简要说明: 下载并安装JDK 配置环境变量 ...

  4. 『动善时』JMeter基础 — 7、jmeter.properties文件常用配置

    目录 1.默认语言设置 2.配置默认编码格式 3.GUI图标放大比例设置 4.功能区工具栏图标大小设置 5.视图区目录树图标大小设置 6.内容区编辑字体设置 7.添加JMeter元素快捷键设置 8.捕 ...

  5. 『动善时』JMeter基础 — 12、JMeter取样器详解:sampler

    目录 1.取样器介绍 2.JMeter自带的取样器 3."HTTP请求"为例介绍一下取样器 (1)HTTP Request: (2)Web服务器: (3)HTTP请求: (4)同请 ...

  6. 『动善时』JMeter基础 — 3、JMeter插件管理

    JMeter是一个Java开发的开源软件,开源的软件有一个好处,就是会有很多第三方开发出来的插件,使得JMeter在处理某一些功能的时候更加的方便.并且这些插件拿过来就可以使用,完全免费的. 我们安装 ...

  7. Jmeter基础之---jmeter基础概念

    Jmeter基础之---jmeter基础概念 JMeter 介绍: 一个非常优秀的开源的性能测试工具. 优点:你用着用着就会发现它的重多优点,当然不足点也会呈现出来. JMeter 介绍: 一个非常优 ...

  8. 『政善治』Postman工具 — 4、HTTP请求基础组成部分介绍

    目录 1.Method 2.URL 3.Headers 4.body 一般来说,所有的HTTP Request都有最基础的4个部分组成:URL. Method. Headers和body. 1.Met ...

  9. 『政善治』Postman工具 — 1、Postman介绍与安装

    目录 一.Postman介绍 二.Postman下载与安装 1.Postman下载 2.Postman安装 3.为什么要注册Postman账号 一.Postman介绍 Postman是一款非常流行的H ...

随机推荐

  1. Runnable和Thread

    1.Runnable是一个接口,当实现该接口时需要复用run方法,在run方法中实现自己的逻辑. 2.Thread是一个类,它其实实现了Runnable方法,也就是说当你通过new 一个Thread得 ...

  2. [转]使用Cadence ADE + Spectre做Montel Carlo仿真

    1. 工艺模型的选择.以TSMC 180nm工艺为例,1.8V Normal devices 有TT,SS,FF,SF,FS共5种工艺Corner及Montel Carlo(MC)共6种可选用工艺角. ...

  3. char*,const char*和string 三者转换

    1. const char* 和string 转换 (1) const char*转换为 string,直接赋值即可. EX: const char* tmp = "tsinghua&quo ...

  4. multipath多路径实验02-配置多路径软件

    multipath多路径实验02-配置多路径软件 在上一篇文章<multipath多路径实验01-构建iSCSI模拟环境>,我构建了iSCSI的模拟环境,在文章最后,已经成功配置并在主机上 ...

  5. c++ 深入理解虚函数

    为什么使用虚函数?什么是虚函数?虚函数是为了解决什么问题? 面向对象的三大特征: 封装 多态 继承 普通虚函数 虚析构函数 纯虚函数 抽象类 接口类 隐藏 vs 覆盖 隐藏与覆盖之间的关系 早绑定和晚 ...

  6. SSIS 调试和故障排除

    SSIS内置的调试工具是非常完备的,主要是设置断点和查看变量值,这是在Package的设计阶段可以使用的工具,在Package部署到服务器之后,用户还可以使用事件处理程序以实现Package出错的自我 ...

  7. MT【320】依次动起来

    已知$ BC=6,AC=2AB, $点$ D $满足$ \overrightarrow{AD}=\dfrac{2x}{x+y}\overrightarrow{AB}+\dfrac{y}{2(x+y)} ...

  8. Mac同时安装python2和python3

    Mac同时安装python2和python3 Mac自带python2,但因为开发时所用但pythonkennel是3也可能是2,并且就算是python2,版本号也许和内置但python也有所不同.所 ...

  9. 4.翻译系列:EF 6 Code-First默认约定(EF 6 Code-First系列)

    原文地址:http://www.entityframeworktutorial.net/code-first/code-first-conventions.aspx EF 6 Code-First系列 ...

  10. 网站项目所有js css无法引用问题解决方案

    网站页面中的所有js css引用失效,路径确保正确,但是浏览器就是报找不到引用.仔细查找发现问题所在: 报错信息很详细了,就是.NET Framework 版本不同导致.同时也提供了两个解决方案:将. ...