一 测试计划

是使用jmeter测试的起点,是其他测试元件的容器,一个完整的测试计划包括多个线程组,逻辑控制器,取样器,监听器,配置元件

用户定义的变量: 测试计划上可以添加用户定义的变量。一般添加一些系统常用的配置,比如直接${变量名}, eg: ${IP},${Port}。

如果测试过程中想切换环境,切换配置,一般不建议在测试计划上添加变量,因为不方便启用和禁用,一般是直接添加用户自定义变量组件。如:

 二 线程组:测试里每个任务都需要线程去处理,所有任务必须在线程组下面创建

1.线程数:设置发送请求的用户数,即并发数

2.Ramp-Up: 如果参数为2,则表示线程数在2秒内初始化完毕,每秒启动的线程数为:线程数/2

3.循环次数:请求的重复次数,如果参数设置为10,线程数为200,则总的请求数为200*10

4.栗子:200个用户在10秒之内访问百度网页,这样可以设置线程数为200,Ramp-Up为10,这样就表示200个用户在10秒内访问网页,也就是说1秒内有20个用户同时访问百度网页

三 取样器

可以认为所有的测试任务都由取样器承担,如:http请求,ftp请求,JDBC请求;取样器告诉jmeter发送一个请求到指定服务器,并等待服务器的请求。取样器会按照其顺序执行,还可以用逻辑控制器来改变取样器运行的重复次数。

备注:请求的协议,服务器名称或ip, 请求方式, 向服务器请求的路径,请求的参数

四 逻辑控制器

可以控制jmeter发送请求的测试逻辑,它与sampler结合使用可以模拟复杂的请求序列,其中的控制器是可以组合使用,里面包括:

1. 循环控制器:设置请求的循环次数或永远循环,可用于压力测试

2. 事务控制器:将多个请求放在同一事务中。选中Gegerate parent sampler, 则聚合报告中只显示事务控制器的数据,不会显示其中各个请求的数据,反之则全部显示

3. 简单控制器:测试用例顺序执行

独立运行每个线程组: 用于控制测试计划中的多个线程组的执行顺序。如上图,线程组1和线程组2的线程是并行执行的,执行过程线程的执行顺序是不可预料的。
如果勾选了独立运行每个线程组,可以保证线程组1的执行一定在线程组2之前,线程组1执行完毕,才会执行线程组2。

线程组中的取样器的执行顺序: 默认是从上到下执行。交替控制器、随机控制器、随机顺序控制器和循环控制器等可以改变取样器的执行顺序。

函数测试模式(Functional Testing) 如果选中了此选项,监听组件如“查看结果树”配置了保存到一个文件中,那么jmeter会将每次的请求结果保存到文件中。一般不建议勾选。

五 断言 (Assertion)

它的作用和loadrunner中的检查点类似,对取样器返回的结果给出判断,是否正确。 用户可以使用断言来检查从服务器获得的响应内容,用来判断请求相应的结果是否如用户所期望的。

使用断言的目的:在request的返回层面增加一层判断机制;因为request成功了,并不代表结果一定正确。

使用断言的方法:

在选择的Sampler下添加对应的断言;配置好响应的检查内容(根据断言情况而定,有的断言控制面板不需要添加任何内容,如XML Assertion)。

添加一个断言结果的监听器(从监听器中添加),通过“断言结果”可以看到是否通过断言;对于一次请求,如果通过的话,断言结果中只会打印一行请求的名称;

如果失败,则除了请求的名称外,还会有一行失败的原因(不同类型的断言,结果不同)。

PS:一个Sampler可以添加多个断言,根据你的检查需求来添加相应的断言,当Sampler下所有的断言都通过了,那么才算request成功。

1. 响应断言:

apply to:适用范围

Main sample and sub-samples: 作用于父节点取样器及对应子节点取样器

Main sample only:仅作用于父节点取样器

Sub-samples only: 仅作用于子节点取样器

JMeter Variable:  作用于jmeter变量(输入框内可输入jmeter的变量名称)

要测试的响应字段:要检查的项

响应文本:响应服务器返回的文本内容,http 协议排除header部分

响应代码:匹配响应代码,比如http请求中,“200”代表成功

响应信息:匹配响应信息,处理成功返回“成功”或者“OK”字样

Response Headers: 匹配响应头中的信息

URL样本

Ignore status:忽略返回的响应报文状态码

模式匹配规则:

包括:返回结果包括你指定的内容

匹配:(好像跟Equals查不多,弄不明白有什么区别)

Equals:返回结果与你指定结果一致

Substring:返回结果是指定结果的字串

否:不进行匹配

要测试的模式: 即填写你指定的结果(可填写多个),按钮【添加】、【删除】是进行指定内容的管理

2. 断言持续时间:

用于判断服务器的响应时间

作用对象:服务器

APPly to:  适用范围

Main sample and sub-samples: 作用于父节点取样器及对应子节点取样器

Main sample only:仅作用于父节点取样器

Sub-samples only: 仅作用于子节点取样器

Duration to assert:持续断言

Duration in milliseconds:响应时间设置(单位:毫秒),如果响应时间大于设置的响应时间,则断言失败,否则成功!

3. Beanshell断言

当某些断言不能满足使用时,比如多个断言或的情况,可以使用Beanshell Assertion来进行处理。Beanshell是一种松散类型的脚本语言,一直完全符合java语法的Java脚本语言。

Name: 断言的名字

Comments:注释(对这个断言进行一个解释,备注)

Reset bsh.interpreter before each call: 在每次调用Bean Shell之前重置bsh.interpreter类(bsh.interpreter是Bean Shell脚本语言的一种类,也可以理解为一种解析器)

Parameters(String Parameters and String []bsh.args):String参数(String []bsh.args是主类main函数的形式参数,是一个String 对象数组,可以用来获取命令行用户输入进去的参数)

Script file:脚本文件(可以填入脚本文件路径)

Script(see below for variables that are defined):参照下文定义的变量(使脚本文件参照定义的变量来运行)

栗子:“code:200”或者“code:800034”都认为断言成功时,可以使用如下方法来进行处理:

4. Json 断言

在Json Path中添加匹配规则,在Expect value中填写期望值

Assert JSON Path exists: $.

新增一个 JSON Assertion,在 $. 后面加入需要检查的json字段; 
比如截图中我察看的是“result”; 
Expected Value:是要检查的json结果;

下图是我的察看结果树的截图: 

我测试用例中正常的result是11;
如果JSON Assertion 的Expected Value设置result值为11;
则断言结果是请求的名称,察看结果树的结果是绿色的;
如果是JSON Assertion 的Expected Value设置result值为12;
则断言结果是这样的:

 5. xpath断言

XPath即为XML路径语言,它是一种用来确定XML(标准通用标记语言的子集)文档中某部分位置的语言。

作用对象:针对返回信息为XPAth的数据类型进行断言

XML Parsing Options:XML解析选项

Use Tidy(tolerant parser):使用Tidy(容错解析器),默认选择quiet(不显示)

Quiet:不显示

Report errors:错误报告

Show warnings:显示错误

Use Namespaces:使用名称空间

Validate XML:验证XML(文件包/数据)

Ignore Whitespace:忽略空格(这允许你指定语法分析器可以忽略哪个空格,而哪个空格是重要的)

Fetch external DTDs: 获取外部DTDs

XPath Assertion: 输入框中写入xpath断言,点击Validate验证其正确性

True if nothing matches:确认都不匹配

6. 比较断言(compare  assertion)

这是一种比较特殊的断言元件,针对断言进行字符串替换时使用;

作用对象:需要替换的字符串

Select Comparison Operators:选择比较运算符

Compare Content:可以选择比较的内容类型(true/false或者自定义,编辑)

Compare Time:比较时间(可以设定比较的时间,单位为秒,默认为-1)

Comparison Fitters:比较修改工具

regular expression substitutions:替换正则表达式

Regex String:要替换的字符串(可从断言结果中选择)

substitutions:替换的字符串(替换结果)

六 监听器(结果分析)

1. 察看结果树

添加察看结果树,放的位置不同,察看的结果也不同。在线程组下添加察看结果树,察看线程组下所有请求的结果;放在具体某个请求下,只查看此请求的结果;若放在某个控制器节点下,则查看此控制器下节点执行的结果。

参数说明:

(1)名称:控制器的描述性名称,显示在左边节点上,并用于命名事务

(2)注释:控制器注释信息,非必填项

(3)文件名:载入文件名

(4)Log/Display Only: 仅日志错误、Success ;勾选中显示对应的日志信息
(5) Configure:定义report中自己所关心的数据项。
(6) 取样器结果:
         Thread Name: 线组名称
         Sample Start: 启动开始时间
         Load time: 加载时长
         Latency: 等待时长
         Size in bytes: 发送的数据总大小
         Headers size in bytes: 发送头大小
         Body size in bytes: 发送数据的其余部分大小
         Sample Count: 发送统计
         Error Count: 错误统计
         Response code: 返回码
         Response message: 返回消息
         Response headers:返回头信息
(7)请求 - 数据获取方式、路径、地址等以及传递的参数、cookie
(8)响应数据 - 响应加载的页面html

2. 聚合报告 (Aggregate report)

记录这次却被行测试总请求数、错误率、用户响应时间(中间值、90%、最少、最大)、吞吐量等,用以帮助分析被测试系统的性能,如果大家都是做web应用的性能测试,例如只有一个登录的请求,那么在Aggregate Report中,会显示一行数据,共有10个字段,含义分别如下。

参数说明:

  • Label          取样器别名,如果勾选Include group name  ,则会添加线程组的名称作为前缀
  • # Samples  取样器运行次数
  • Average     请求(事务)的平均响应时间
  • Min            请求的最小响应时间
  • Max           请求的最大响应时间
  • Std. Dev    响应时间的标准方差
  • Error %     事务错误率
  • Throughput    吞吐量 也就是TPS
  • Received KB/sec  每秒收到的千字节
  • Sent KB/sec         每秒发送的千字节
  • Avg. Bytes       响应平均流量

3. 汇总报告(summary report)

Summary Report 为测试中的每个不同命名的请求创建一个表行。这与聚合报告类似,只是它使用更少的内存。

参数说明:

  • Label          取样器别名,如果勾选Include group name  ,则会添加线程组的名称作为前缀
  • # Samples  取样器运行次数
  • Average     请求(事务)的平均响应时间
  • Min            请求的最小响应时间
  • Max           请求的最大响应时间
  • Std. Dev    响应时间的标准方差
  • Error %     事务错误率
  • Throughput    吞吐量 也就是TPS
  • Received KB/sec  每秒收到的千字节
  • Sent KB/sec         每秒发送的千字节
  • Avg. Bytes       响应平均流量

4. 汇总图(Aggregate Graph)

Jmeter-测试计划,线程组,取样器,逻辑控制器,断言和监听器的更多相关文章

  1. Jmeter系列(45)- 详解 Jmeter 跨线程组取参数值的方法,免代码!

    如果你想从头学习Jmeter,可以看看这个系列的文章哦 https://www.cnblogs.com/poloyy/category/1746599.html 前言 用过 Jmeter 的同学应该都 ...

  2. jmeter跨线程组传值和jmeter跨线程组调用

    Jmeter的线程组之间是独立的,用Jmeter做接口测试或者是性能测试时,经常会涉及到多个线程组.那么如何将A线程组返回的变量信息提取后,传递给B,C线程组使用呢?这里以已登录接口返回的access ...

  3. jmeter之线程组的使用

    线程组 在使用jmeter性能测试时,我们都得先添加个线程组,右键testplan-->添加-->Threads-->线程组.在线程组下执行. 问题:为了能够让jmeter在做性能测 ...

  4. jmeter跨线程组传值

    在测试过程中,有时候需要jmeter跨线程组传值,jmeter本身又不具备此功能,那么,又该如何实现呢? 其实,我们可以通过BeanShell去实现. 实现过程如下: 1.线程组A中,使用正则表达式提 ...

  5. Jmeter跨线程组传递参数

    Jmeter的线程组之间是相互独立的,各个线程组互不影响,所以线程组A中输出的参数,是无法直接在线程组B中被调用的. 但有时候为了方便,可以把不同模块接口放在不同线程组,就涉及不同线程组传参问题,比如 ...

  6. JMeter 中跨线程组 变量值传递的方法

    关于jmeter中跨线程组 变量值传递的方法         找了好久,终于找到方法了,赶紧整理下来. 1.在线程组1 中使用__setProperty函数设置jmeter属性值(此值为全局变量值), ...

  7. Jmeter 跨线程组传递参数 之两种方法

    终于搞定了Jmeter跨线程组之间传递参数,这样就不用每次发送请求B之前,都需要同时发送一下登录接口(因为同一个线程组下的请求是同时发送的),只需要发送一次登录请求,请求B直接用登录请求的参数即可,直 ...

  8. Jmeter 跨线程组传递参数 之两种方法(转)

    终于搞定了Jmeter跨线程组之间传递参数,这样就不用每次发送请求B之前,都需要同时发送一下登录接口(因为同一个线程组下的请求是同时发送的),只需要发送一次登录请求,请求B直接用登录请求的参数即可,直 ...

  9. jmeter之线程组循环次数

    有时候压测需要配置并发的持续时间,这个可以在jmeter中线程组页面进行配置 1.jmeter的循环次数2种使用场景 2.持续时间功能介绍 3.持续时间的使用场景 1.jmeter的循环次数2种使用模 ...

  10. jmeter组件中 测试计划,线程组,sampler等等

    [测试计划] 这边用户定义的变量,定义整个测试中使用的重复值(全局变量),一般定义服务器的ip,端口号 [线程组] 关于,线程组,我简单聊聊,有不对的地方欢迎大家拨乱反正 线程数:你需要运行的线程 比 ...

随机推荐

  1. java提高(7)---TreeSet--排序

    TreeSet(一) 一.TreeSet定义:      与HashSet是基于HashMap实现一样,TreeSet同样是基于TreeMap实现的.            1)TreeSet类概述 ...

  2. mysql 开发进阶篇系列 45 物理备份与恢复(xtrabackup 安装,用户权限,配置)

    一. 安装说明 安装XtraBackup 2.4 版本有三种方式: (1) 存储库安装Percona XtraBackup(推荐) (2 )下载的rpm或apt包安装Percona XtraBacku ...

  3. sql server 性能调优之 资源等待 LCk

    一.  概述 这次介绍实例级别资源等待LCK类型锁的等待时间,关于LCK锁的介绍可参考 “sql server 锁与事务拨云见日”.下面还是使用sys.dm_os_wait_stats 来查看,并找出 ...

  4. 转 Mac 使用ab性能测试工具

    Mac 使用ab命令进行压测 1.在Mac中配置Apache ①启动Apache,打开终端 sudo apachectl -v 如下显示Apache的版本 sudo apachectl start 这 ...

  5. cp2102 驱动 win7x64 -2018

    试了好多种网上的驱动,都不行,要么是报错要么是安装没反应 之后意外遇见驱动官网?里面真全 url:https://www.silabs.com/products/development-tools/s ...

  6. 解决AssetBundle包加载预制体时,Shader显示异常的问题

    现象: 预制体上的粒子效果显示为紫色方块. 原因:shader在打成AB包后与指定平台产生相关性,Editor中无法正常读取. 解决办法: 遍历所有加载的对象,重新赋值Shader 代码: //修正s ...

  7. c# Console application Open/Get Url by Browser

    C# url 用 浏览器打开.C#获取浏览器的url static void Main(string[] args) { string file = @"C:\Users\Hero\Desk ...

  8. 五分钟轻松了解Hbase面向列的存储

    说明:从严格的列式存储的定义来看,Hbase并不属于列式存储,有人称它为面向列的存储,请各位看官注意这一点. 行式存储 传统的数据库是关系型的,且是按行来存储的.如下图: 其中只有张三把一行数据填满了 ...

  9. Linux使用mailx发送邮件--技术流ken

    前言   最近想要监控系统服务运行情况并实现自动发送邮件报警,zabbix虽然也可以实现这样的功能,但是这里使用一个非常简单的办法就可以实现.需要安装mailx工具,mailx是一个小型的邮件发送程序 ...

  10. [转]git commit之后,想撤销commit

    本文转自:http://www.cnblogs.com/lfxiao/p/9378763.html 写完代码后,我们一般这样 git add . //添加所有文件 git commit -m &quo ...