Jmeter-测试计划,线程组,取样器,逻辑控制器,断言和监听器

本文主要是介绍Jmeter-测试计划,线程组,取样器,逻辑控制器,断言和监听器,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一 测试计划

是使用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)

 

转载于:https://www.cnblogs.com/wz123/p/10243239.html

这篇关于Jmeter-测试计划,线程组,取样器,逻辑控制器,断言和监听器的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/389157

相关文章

Java逻辑运算符之&&、|| 与&、 |的区别及应用

《Java逻辑运算符之&&、||与&、|的区别及应用》:本文主要介绍Java逻辑运算符之&&、||与&、|的区别及应用的相关资料,分别是&&、||与&、|,并探讨了它们在不同应用场景中... 目录前言一、基本概念与运算符介绍二、短路与与非短路与:&& 与 & 的区别1. &&:短路与(AND)2. &:非短

Java捕获ThreadPoolExecutor内部线程异常的四种方法

《Java捕获ThreadPoolExecutor内部线程异常的四种方法》这篇文章主要为大家详细介绍了Java捕获ThreadPoolExecutor内部线程异常的四种方法,文中的示例代码讲解详细,感... 目录方案 1方案 2方案 3方案 4结论方案 1使用 execute + try-catch 记录

Jmeter如何向数据库批量插入数据

《Jmeter如何向数据库批量插入数据》:本文主要介绍Jmeter如何向数据库批量插入数据方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Jmeter向数据库批量插入数据Jmeter向mysql数据库中插入数据的入门操作接下来做一下各个元件的配置总结Jmete

Spring Boot 中正确地在异步线程中使用 HttpServletRequest的方法

《SpringBoot中正确地在异步线程中使用HttpServletRequest的方法》文章讨论了在SpringBoot中如何在异步线程中正确使用HttpServletRequest的问题,... 目录前言一、问题的来源:为什么异步线程中无法访问 HttpServletRequest?1. 请求上下文与线

在 Spring Boot 中使用异步线程时的 HttpServletRequest 复用问题记录

《在SpringBoot中使用异步线程时的HttpServletRequest复用问题记录》文章讨论了在SpringBoot中使用异步线程时,由于HttpServletRequest复用导致... 目录一、问题描述:异步线程操作导致请求复用时 Cookie 解析失败1. 场景背景2. 问题根源二、问题详细分

Java多线程父线程向子线程传值问题及解决

《Java多线程父线程向子线程传值问题及解决》文章总结了5种解决父子之间数据传递困扰的解决方案,包括ThreadLocal+TaskDecorator、UserUtils、CustomTaskDeco... 目录1 背景2 ThreadLocal+TaskDecorator3 RequestContextH

java父子线程之间实现共享传递数据

《java父子线程之间实现共享传递数据》本文介绍了Java中父子线程间共享传递数据的几种方法,包括ThreadLocal变量、并发集合和内存队列或消息队列,并提醒注意并发安全问题... 目录通过 ThreadLocal 变量共享数据通过并发集合共享数据通过内存队列或消息队列共享数据注意并发安全问题总结在 J

异步线程traceId如何实现传递

《异步线程traceId如何实现传递》文章介绍了如何在异步请求中传递traceId,通过重写ThreadPoolTaskExecutor的方法和实现TaskDecorator接口来增强线程池,确保异步... 目录前言重写ThreadPoolTaskExecutor中方法线程池增强总结前言在日常问题排查中,

Springboot的ThreadPoolTaskScheduler线程池轻松搞定15分钟不操作自动取消订单

《Springboot的ThreadPoolTaskScheduler线程池轻松搞定15分钟不操作自动取消订单》:本文主要介绍Springboot的ThreadPoolTaskScheduler线... 目录ThreadPoolTaskScheduler线程池实现15分钟不操作自动取消订单概要1,创建订单后

C语言线程池的常见实现方式详解

《C语言线程池的常见实现方式详解》本文介绍了如何使用C语言实现一个基本的线程池,线程池的实现包括工作线程、任务队列、任务调度、线程池的初始化、任务添加、销毁等步骤,感兴趣的朋友跟随小编一起看看吧... 目录1. 线程池的基本结构2. 线程池的实现步骤3. 线程池的核心数据结构4. 线程池的详细实现4.1 初