前言:

今天这篇文章是jmeter性能测试的第二阶段的文章,后续还会更新更多牛逼哇赛的干货哈,喜欢的兄弟们点点关注铁铁

【文章的末尾给大家留下了大量的福利哈】

 十一、IF控制器(If Controller)     条件(默认JavaScript)(Condition(default javascript)):使用JavaScript的函数或变量进行评估判断条件为真或假

    条件解释为变量表达式(interpret condition as variable expression):如果勾选该项,那么变量表达式会进行求值,并与“ture”或“false”进行比较,而无需使用JavaScript

    对所有子条件执行(evaluate for all children):如果勾选该项,则该controller在没一个子节点执行时执行一次;

    默认情况下,该控制器可以对包含在其下面的所有可运行的元素进行执行,但只在入口执行一次

    十二、吞吐量控制器(Throughput Controller)     作用:控制其下的子节点的执行次数与负载比例分配,别被名字迷惑了,跟吞吐量没任何关系。jmeter自带的翻译这里是错误的,因为它并不能控制吞吐量(吞吐量的概念请访问百度);其实质作用是允许用户控制执行的频率;也有两种方式:

    百分比执行和总执行

    总执行(Total Executions):使控制器停止执行一定数量的测试计划

    百分比执行(Percent Executions):使控制器按一定比例执行迭代的测试计划

    流量(Throughput):对应上面的执行数量或者比例

    每个用户(Per User):每个用户

    如果勾选此项,将导致控制器计算是否应该执行在每个用户(每个线程)的基础上;如果不加以控制,那么将计算全球所有用户

    十三、Interleave Controller 交替控制器     使用方法:假使该控制器下有2个取样器A和B,交替执行A和B2个请求,即每次传递一个子请求到这个测试,按子元件的排列顺序

    十四、随机控制器(Random Controller)     作用:类似交替控制器,但该控制器随机选取某一个取样器请求并执行

    十五、随机顺序控制器(Random Order Controller)     作用:随机执行其下的所有子结点

    与Random Controller不同的是,这个控制器会先将需要随机的内容均执行一遍,但次序不定

    十六、录制控制器(Recording Controller)     作用:类似代理服务器的作用,在测试执行期间记录测试样本

    十七、模块控制器(Module Controller)     作用:测试控制器子节点下的某一个模块,而不是整个测试计划

·    模块控制器,用于跳转到选定的控制器位置并执行对应的控制器

·     应用场景: 业务逻辑的跳转

    配制说明

·    Module to Run: 选择需要跳转到的目标控制器

  5.5、定时器(Timer)

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

  在性能测试中,访问请求之间的停顿时间被称之为思考时间。 那么如何模拟这种停顿呢?我们可以借助JMeter的定时器元件实现。

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

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

  Constant Timer 固定定时器

  作用:通过ThreadDelay设定每个线程请求之前的等待时间(单位为毫秒)。注意:固定定时是有作用域的,放到线程组下其作用域是所有请求都会延迟固定器设置的时间,如果放到请求内,作用域是单个请求延迟时间(常用)。

Uniform Random Timer 均匀随机定时器

    作用:它产生的延迟时间是个随机值,而各随机值出现的概率均等。总的延迟时间等于一个随机延迟时间加上一个固定延迟时间,用户可以设置随机延迟时间和固定延迟时间。

    总延迟时间=指定范围内的随机时间+固定延迟时间。

Constant Throughput Timer 固定吞吐量定时器

Gaussian Random Timer 高斯随机定时器

JSR223 Timer JSR223定时器

Poisson Random Timer 泊松随机定时器

Synchronizing Timer 同步定时器

作用:用来设置集合点,其作用是:阻塞线程,直到指定的线程数量到达后,再一起释放,可以瞬间产生很大的压力

  (1)Number of Simulated Users to Group by:模拟用户的数量,即指定同时释放的线程数数量,若设置为0,等于设置为线程组中的线程数量;

  (2)Timeout in milliseconds:超时时间,即超时多少毫秒后同时释放指定的线程数;如果设置为0,该定时器将会等待线程数达到了设置的线程数才释放,若没有达到设置的线程数会一直死等。如果大于0,那么如果超过Timeout inmilliseconds中设置的最大等待时间后还没达到设置的线程数,Timer将不再等待,释放已到达的线程。默认为0

  同步定时器(Synchronizing Timer)的超时时间设置要求:超时时间 > 请求集合数量 * 1000 / (线程数 / 线程加载时间)

BeanShell Timer BeanShell脚本编写定时器

  参数说明:

  Reset Interpreter:每次迭代是否重置解析器,默认为false;在长时间运行的脚本中建议设置为true。

  Parameters:BeanShell脚本的入参。入参可以是单个变量;也可以是数组,若是字符串数组,两个元素之间用空格隔开;也可以是常量。

  File Name:BeanShell脚本可以从脚本文件中读取。

  Script:在Script区直接写BeanShell脚本。

  增加一个Java Request请求,并且增加时间验证是否按照自己设定的定时运行脚本:

  Java Request ${__time(yyyy-MM-dd HH:mm:ss:SSS,)}

  增加结果查看树:结果显示按之前设置的每个1秒钟运行

Precise Throughput Timer 精准吞吐量定时器

  5.6前置处理器

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

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

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

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

  5.6.1 HTML Link Parser(HTML链接解析器)

  HTML链接解析器,用于从前一个sampler返回的html页面中按照规则解析链接和表单,再根据此处理器所在的sampler中的规则进行匹配修改,而后该sampler会执行;

此处理器无配置,使用示例如下: 如下示例中执行说明为: 1. 发送sampler“搜索”并返回HTML页面; 2. sampler“点击链接”中下的HTML链接解析器会将步骤1中返回的HTML页面根据“点击链接”这个sampler设置的规则进行解析并将解析结果发送给sampler“点击链接”; 3. sampler“点击搜索”发送;

  HTTP URL Re-writing Modifier(HTTP URL重写修改器)   HTTP URL重写修改器,此处理器与HTTP Link Parser类似,但专用于使用url重写来存储sessionId而非cookie的http request,在线程组级别添加此修改器则应用于所有sample,若为单个sample添加则只适用该sample;

  参数配置:   Session Argument Name:会话参数名称,用于搜索sessionId,其他sample也可通过此参数来 调用其获取的sessionId;   Path Extension:路径扩展,如url添加了分号作为分割,则勾选此项;   Do not use equals in path extension:用于url不用等号来分割key和value的类型;   Do not use questionmark in path extension:用于不带?的类型;   Cache Session Id?:勾选此项则会存储在其挂载的sample上获取到的sessionId供后边的其他sample使用;   URL Encode:是否使用url编码;

  User Parameters(用户参数)

  用户参数,用于做几组参数给线程组的各个线程使用,如果线程数多于用户参数组数,则多出来的线程则从第一组用户参数开始依次调用参数组;

  参数配置:   Name:此前置处理器的名称;   Update Once Per Iteration:标识是否每轮迭代更新一次元素;

  JDBC PreProcessor(数据库预处理器)

  数据库预处理器,用于在sample开始前查询数据库并获取一些值;

  参数配置:   Variable Name of Pool declared in JDBC Connection Configuration:连接池名称,需与JDBC链接配置中的Variable Name相同(此预处理器需要一个JDBC Connection Configuration,此配置器在配置元件中);   Query Type:数据库查询类型,根据需要自行选择;   Query:数据库语句输入框,根据需要输入,注意结尾不要加”;”;   Parameter values:参数名称,如果Query的语句中有”?”则此处填值,可以使用调用参数方式;   Parameter types:参数类型,与Parameter values对应,设置参数类型,与sql字段类型相同;   Variable names:设定此项可以获取固定列的所有值;   Result variable name:随意设定一个名称,则此名称会被作为一个参数并对应Query出来的内容;可以使用参数调用的方法来获取此设置的名称对应的值;   Query timeout(s):超时时间;   Handle ResultSet:有四个选项,结果保存的方式;

  RegEx User Parameters(重要)

  正则表达式,使用正则表达式为从另一个HTTP请求中提取的HTTP参数指定动态值

  参数配置:   name:此前置处理器名称;   Regular Expression Reference Name:调用的正则表达式提取器中的引用名称;   Parameter names regexp group number:用于提取参数名称的正则表达式的组编号;   Parameter values regex group number:用于提取参数值的正则表达式的组编号;

  Sample Timeout

  超时器,用于设定sample的超时时间,如果完成时间过长,此预处理器会调度计时器任务以中断样本;

   参数配置:   name:超时器名称;   Sample timeout:超时时间;

  JSR223 PreProcessor

  JSR223预处理器,用于调用脚本;

  参数配置:   Name:名称,随意设定;   Language:使用的JSR223语言,可根据需要选择;   Parameters:传递给脚本的参数;   Script file:脚本文件;   Script compilation caching:存储编译的脚本,默认勾选;   Script:要运行的脚本;   脚本中可用参数说明:   vars:操作Jmeter变量     a) vars.get(“name”):从jmeter中获得变量值     b) vars.put(“key”,”value”):保存数据到jmeter变量中,如果变量不存在会自动创建   props: 操作Jmeter属性     a) props.get(“START.HMS”);  注:START.HMS为属性名     b) props.put(“PROP1”,”1234”); 保存数据到Jmeter属性中,如果属性不存在会自动创建   log: 记录日志   比如log.info(“日志信息”); 具体查看: https://www.slf4j.org/api/org/slf4j/Logger.html   ctx: 操作上下文,具体查看:   http://jmeter.apache.org/api/org/apache/jmeter/threads/JMeterContext.html   prev: 操作前一个请求。注意必须有前一个请求才可用,否则会报错,具体查看:   http://jmeter.apache.org/api/org/apache/jmeter/samplers/SampleResult.html   sampler: 操作当前请求。具体查看:   http://jmeter.apache.org/api/org/apache/jmeter/samplers/Sampler.html

  BeanShell PreProcessor

  BeanShell预处理器,语法使用与BeanShell Sampler是一样的。但可使用的内置变量稍有不同;

  参数配置:   Reset bsh interpreter beford each call:是否重新构造interpreter,即是否重新初始化   Paraneters:BeanShell 脚本中的变量初始化时可以在这里指定值,这里接受变量与字符串数组,如果是字符串数组两个元素之间用空格隔开   ScriptFile——File Name:指定运行的BeanShell脚本   Script:编写BeanShell脚本,通过BeanShell可以访问ctx、vars、props、prev、sample、log。其中通过ctx可以访问Jmeter运行时状态,比如线程数和线程状态;通过vars访问定义的变量;通过props访问运行时设置;通过prev访问前一个取样器结果;通过sample访问当前取样器;通过log写日志

  5.7配置元件(Config Element)

  jmeter的配置元件(config element)用于提供对静态数据的配置支持,可以为取样器设置默认值和变量。配置元件有很多的功能,读取文件数据,设置公共请求参数,赋予变量值等,以便后续取样器使用(类似于项目中配置文件的作用,如数据、地址、数据库链接等进行配置)

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

另外jmeter也提供了众多的函数来帮我们生产动态数据,(通过函数助手可以查看到)

  基础须知:Jmeter各个元件的执行顺序为:配置元件->前置处理器->定时器->取样器->后置处理器->断言器->监听器。配置元件在Jmeter执行过程中,在相同作用域下肯定会被最先执行,使用过程中要严格遵守作用域问题。

  5.7.1:信息头管理器     信息头管理器用来传输取样器信息头。使用规则:特别需要注意使用的作用域问题,分为3种。   1、如果整个测试计划下的所有取样器请求都一致,则在测试计划下添加,这样能做到整个测试计划下共享信息头。   2、如果在同一线程组下,所有取样器的请求头都用到了相同的某个值如:token等,那就在线程组下添加信息头管理器,这样同一线程组下的所有取样器都能传入相同的请求头了。   3、如果每个取样器的请求头不太一致,则在具体的取样器下添加。   通过下图进行下简单理解:

    注意点:     (1)如果存在多个信息头管理器,则引用的信息头会进行叠加。如下例子:     【测试计划下添加的信息头】填入信息:token:12345678     【线程组1下添加的信息头】填入信息:Content-Type:application/json

    则HTTP请求1-1会叠加这两个值,如图:

    执行结果:

  (2)如果存在多个信息头管理器,而且信息头管理器有变量名称重复了,只是作用域不一样,则会引用作用域小的变量,如下例子:   【测试计划下添加的信息头】填入信息:token:12345678   【线程组1下添加的信息头】填入一个与上相同的变量信息:token:abcdefg   则实际执行的时候,会引用作用域小的token,如图:

    执行结果:

  (3)如果存在多个信息头管理器,而且信息头管理器有变量名称重复了,作用域也一样,则会引用第一个信息头管理器的变量,如下例子:   【测试计划下添加的信息头1】填入信息:token:12345678   【测试计划下添加的信息头2】填入信息:token:abcdefgh   则实际执行的时候,得看哪个信息头管理器放在前面就引用哪个信息头的变量,该处是将【测试计划下添加的信息头1】放在前面,所以是引用到了token:12345678。如下图:

  执行结果:引用的是前面的信息头

   5.7.2、Cookie管理器   对于有些请求需要Cookie的时候,可以考虑加上这个配置元件,通常会在登录接口返回Cookie存储到客户端本地,使用该元件可以解决Cookie验证问题。   使用方式:直接添加即可,一般是添加到测试计划或者线程组下。

  5.7.3:请求默认值   如果多个请求存在相同的部分,那么就可以将这些相同的部分抽取到【请求默认值】,在填写具体请求的时候,就可以省略请求默认值得信息不填,同样需要非常注意作用域问题。   例子:新建一个【HTTP请求默认值】,填写发起百度请求的信息,那么在实际发起百度请求的时候,就可以忽略这部分信息了。

执行结果如下:

  5.7.4:用户定义的变量   主要用于进行参数化设计,但只适用于数据量比较少的参数化,大数量的参数化就不适用了,重要的事情每次都需要强调下:需要注意作用域的问题。   使用方法:添加元件后,填写变量信息即可,填写完后,就可以在作用域范围下的元件进行引用,如下图:

     执行结果:

  5.7.5CSV设置文件

  用于进行批量参数化,有两种方式,第一种是Jmeter自带的CSV配置文件,第二种是插件管理器安装的Random CSV Data Set Config。

  1、Jmeter自带的CSV配置文件:该元件只能按照提供的数据源文件按顺序取值。下面进行元件页面各项值的介绍。

  (1)文件名:选择提供数据的文件,要选择.csv格式的文件   (2)文件编码:选择对文件的编码格式,一般选utf-8   (3)变量名称:给获取到的数据源数据取变量,要取多个数据,就要用英文下分号";"间隔   (4)忽略首行:选择True就是忽略数据源的首行,选择False就是不忽略   (5)其他选项:一般默认即可。

下面实际使用: (1)准备CSV源文件:

  (2)填写CSV参数化元件信息:

  (3)引用参数化的值

  执行结果:

  注意事项:该CSV参数化元件只能按顺序取值,即:脚本一次执行下,只能在数据源文件从上往下取值,下面我给请求添加循环数看看现象。

  执行结果:

  有时候我们想要每次执行请求都能随机取数据源的某一条数据,那么这时候就需要用到第二种CSV参数化配置文件:Random CSV Data Set Config

  2、Random CSV Data Set Config:该元件Jmeter不会自带,需要我们手动安装。   (1)打开插件管理器

  (2)安装Random CSV Data Set

  使用介绍

听说关注我并三连的铁汁都已经升职加薪暴富了哦!!!!

企业落地级jmeter性能测试,结果分析以及报告(4-2)相关推荐

  1. 企业落地级jmeter性能测试,结果分析以及报告(4-3)

    前言: 嗨咯铁汁们,很久不见,我还是你们的老伙计测试君,性能测试的系列马上就要出完了,废话少说直接开始正题 [文章的末尾给大家准备了大量的福利] ​ Filename:选择数据源文件路径 File e ...

  2. Jmeter性能测试结果分析

    jmeter性能测试结果分析 用百度的网页测试200个用户在10秒之内同时访问百度的网页,每个用户只访问一次:www.baidu.com 步骤如下 添加线程组 首先点击测试计划,右键--添加--Thr ...

  3. jmeter 性能测试 结果分析

    使用jmeter做性能测试后,需要查看测试结果.以及对测试结果进行分析. 一.聚合报告 Samples – 本次场景中一共完成了多少个Transaction Average – 每个请求的平均响应时间 ...

  4. 性能测试瓶颈分析和报告

    系统瓶颈分析 一.系统瓶颈分析示例 例1: 交易的响应时间如果很长,远远超过系统性能需求,表示消耗CPU的数据库操作,例如排序.执行aggregate functions(例如sam.min.max. ...

  5. 并发测试mysql_Jmeter性能测试系列——结果分析与报告输出

    场景运行结束后,需针对测试结果进行性能分析.通常而言,Jmeter性能测试结果分析可从性能测试指标达成方面着手,然后再分析测试过程中出现的异常情况,逐一判断是否存在性能风险. 1.用户登陆并发测试结果 ...

  6. 市场调研报告-全球与中国社交媒体分析和报告工具(SMART)市场现状及未来发展趋势

    报告摘要 本文研究全球及中国市场社交媒体分析和报告工具(SMART)现状及未来发展趋势,侧重分析全球及中国市场的主要企业,同时对比北美.欧洲.日本.中国.东南亚.印度等地区的现状及未来发展趋势. 20 ...

  7. JMeter性能测试:JMeter多用户并发模拟及压测结果分析

    目录 JMeter设置 JMeter线程组 JMeter压测实例 View Results Tree Aggregate Report 命令行方式执行压测 jtl文件解析 JMeter多用户并发模拟 ...

  8. Jmeter性能测试-GC相关

    2019独角兽企业重金招聘Python工程师标准>>> https://www.cnblogs.com/danqiu/p/6009016.html Jmeter性能测试-GC相关 1 ...

  9. jmeter性能测试入门简介

    Apache JMeter是一款纯java编写负载功能测试和性能测试开源工具软件.相比Loadrunner而言,JMeter小巧轻便且免费,逐渐成为了主流的性能测试工具,是每个测试人员都必须要掌握的工 ...

最新文章

  1. NetBeans 时事通讯(刊号 # 22 - Aug 18, 2008)
  2. 第一次上课:特征值特征向量的几何直观
  3. 数据中台实战(八):如何打造可以支撑N条产品线的标签平台
  4. Delphi XE2 之 FireMonkey 入门(13) - 动画(下)
  5. mysql 连接 中文_大佬们E语言连接MYSQL输出中文乱码怎么破
  6. Java中的观察者设计模式
  7. qt使用自带的日志输出实例输出日志时,在日志中显示行数
  8. 微信私域运营实战指南
  9. javacc解析json报错
  10. 【十一】Jmeter 函数助手实战:__time 时间戳函数
  11. centOS7安装nodejs(8.4.0)(详细步骤)
  12. USB移动硬盘使用中的怪现象
  13. [转载] Python语言程序设计基础(第二版)嵩天等课后习题答案
  14. solr相关配置(搜索novel案例)
  15. [HP NX6320] 安装 windows2003 操作系统 全过程
  16. 动态独享代理ip的简介。
  17. 内存带宽性能测试工具
  18. 1816. 截断句子【我亦无他唯手熟尔】
  19. POJ 1625 Censored!
  20. linux禁用ssh弱加密算法,ssh弱加密算法漏洞修复

热门文章

  1. 一个老板一年赚两千万左右
  2. Smith预估控制器
  3. 输入压缩空间量是分区量吗_硬盘只有C盘如何增加分区
  4. 【解决】office 2010 无法加载 endnote
  5. Mac卸载彻底搜狗输入法的两种方法
  6. 如何让终身学习变得简单,做好这5点每天博学一点点
  7. sublime text3安装emmet插件及PyV8:小白重试了n次后终于成功
  8. IDEA安装与配置教程
  9. Mac终端出现bogon的解决办法
  10. blender 编辑模式切换