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

前言:

今天这篇文章是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

  使用介绍

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值