快乐学习
前程无忧、中华英才非你莫属!

Jmeter入门到精通-5

一、逻辑控制器

1、 Jmeter官网对逻辑控制器的解释是:“Logic Controllers determine the order in which Samplers are processed.”。意思是说,逻辑控制器可以控制采样器(samplers)的执行顺序。由此可知,控制器需要和采样器一起使用,否则控制器就没有什么意义了。放在控制器下面的所有的采样器都会当做一个整体,执行时也会一起被执行。


2、JMeter中的Logic Controller分为两类:

a) 控制测试计划执行过程中节点的逻辑执行顺序,如:Loop Controller、If Controller等;

b) 对测试计划中的脚本进行分组、方便JMeter统计执行结果以及进行脚本的运行时控制等,如:Throughput Controller、Transaction Controller。


3、Jmeter提供如下这么多的控制器:


一、简单控制器(Simple Controller):

作用:这是Jmeter里最简单的一个控制器,它可以让我们组织我们的采样器和其它的逻辑控制器(分组功能),提供一个块的结构和控制,并不具有任何的逻辑控制或运行时的功能。 


二、循环控制器(Loop Controller):

作用:指定其子节点运行的次数,可以使用具体的数值(如下图,设置为5次),也可以使用变量

1、Forever选项:勾选上这一项表示一直循环下去

2、如果同时设置了线程组的循环次数和循环控制器的循环次数,那循环控制器的子节点运行的次数为两个数值相乘的结果。


三、仅一次控制器(Once Only Controller):

作用:在测试计划执行期间,该控制器下的子结点对每个线程只执行一次,登录场景经常会使用到这个控制器。

注意:将Once Only Controller作为Loop Controller的子节点,Once Only Controller在每次循环的第一次迭代时均会被执行。 


四、ForEach控制器(ForEach Controller):

   作用:ForEach控制器一般和用户自定义变量一起使用,其在用户自定义变量中读取一系列相关的变量。该控制器下的采样器或控制器都会被执行一次或多次,每次读取不同的变量值。如下图:

      参数:

        Input Variable Prefix:输入变量前缀

        Output variable name:输出变量名称

        Start index for loop(exclusive):循环开始的索引(这里如果不填写,默认从1开始,如果没有1开始的变量,执行时会报错)

        End index for loop(inclusive):循环结束的索引

           Add”_”before number:输入变量名称中是否使用“_”进行间隔。


用户自定义变量:

变量名前缀为ForEach Controller中Input variable prefix定义的name + 下划线(上图中我们勾选了下划线)+数字编号


执行结果:

总共执行了3次,每次执行时会把获取到的变量值赋值给输出变量outNmae,其它地方可以通过${outNmae}进行调用。



五、事务控制器(Transaction Controller):

作用: 事务控制器会生产一个额外的采样器,用来统计该控制器子结点的所有时间。

      

参数:

Generate parent sample:(选中这个参数结果展示如下图红框,否则显示为下图蓝框)

   Include duration of timer and pre-post processors in generated sample:选中这一项会统计定时器(timer)的时间,否则只统计采样器(sample)的时间


六、If 控制器(If Controller):

      作用:根据给定表达式的值决定是否执行该节点下的子节点,默认使用JavaScript的语法进行判断(如下图红框内的文字)。

          

   参数:

    Interpret Condition as Variable Expression?:选中这一项时表示:判断变量值是否等于字符串true(不区分大小写)

    Evaluate for all children:如果选中这一项,在每个子结点执行前都会计算表达式 

       示例一:使用变量的方式进行判断:

 

        

    

     示例二:选中Interpret Condition as Variable Expression?

      

        

       

    

   七、Switch控制器(Switch Controller):

     作用:Switch控制器通过给该控制器中的Value赋值,来指定运行哪个采样器。有两种赋值方式:

  • 第一种是数值,Switch控制器下的子节点从0开始计数,通过指定子节点所在的数值来确定执行哪个元素。

  • 第二种是直接指定子元素的名称,比如采样器的Name来进行匹配。当指定的名称不存在时,不执行任何元素。

          

        当Value为空时,默认执行第1个子节点元素。

    

示例:

1、Switch Controller选择的值为login page

 

2、执行结果

八、吞吐量控制器(Throughput Controller):

   作用:控制其下的子节点的执行次数与负载比例分配,也有两种方式:

  • Total Executions:设置运行次数

  • Percent Executions:设置运行比例(1~100之间)

     

    

示例:

1、设置线程组循环5次:

2、Throughput Controller1的子结点执行3次:

3、Throughput Controller2的子结点执行(40% * 线程组循环次数5)= 2次:

4、 执行结果:

九、随机控制器(Random Controller):

      作用:随机执行其下的所某个子结点


十、随机顺序控制器(Random Order Controller):

   作用:随机执行其下的所有子结点


十一.交换控制器 interleave controller

在每次迭代时,顺序选取该节点下的一个字节点执行

如果选中‘忽略子控制器块’选项,则该controller将其下的子controller当成单一元素处理,并仅允许每个字controller一次发出一个请求

勾选上,线程设置1,循环10,访问百度4,自学网3,好搜是3

十二、while controller

  

二、配置元件详解

    

   1、 FTP

   FTP服务主要提供上传和下载功能。有时间需要我们测试服务器上传和下载的性能。在这里我通过JMeter做一个FTP测试计划的例子。

   当然,JMeter官方网站的用户手册也有例子,但由于版本较早,我也算是对自己学习的一个总结,所以再整理一个。

  * 本人使用的是JMeter2.4版本。

  * 测试的服务器是IP:124.205.228.54  (由于找不到FTP站点,所以在“主机屋网站http://www.zhujiwu.com申请了一个免费的FTP空间”)

 

    1.1创建一个线程组

1.2线程组--->添加--->配置元件--->FTP请求缺省值。       

1.3.线程组--->添加--->Sampler--->FTP请求

说明:

IP    为你FTP服务的IP

Remote file 为你FTP服务器上的一个文件。

local file  为本地你存放到本机上的路径。

选择   get(RETR)  为下载方式。

填写你的FTP服务器的用户名密码。

1.4.按照第二步的方式再添加一个“FTP请求”。

说明:

IP    为你FTP服务的IP

Remote file 为你要上传到FTP服务器上的文件路径及文件名

local file  为本地你要上传的文件的路径。

选择   put(RETR)  为上传方式。

填写你的FTP服务器的用户名密码。

1.5.添加一个监控器:线程组--->添加--->监控器--->Spline Visualizer

一个FTP计划创建成功 🙂



2、HTTP授权管理器


1.说个场景吧,开发对app新版进行接口改造,不再提供验证码的返回,那么问题来了,Jmeter就不能为生产环境的app接口做自动化了,但其为了方便客服人员做了一个查手机验证码的web,地址是:http://x.x.x.x:7000,如何将验证码直接提取到app的“验证验证码”的接口调用成了本文的关键

2.话不多说上图,通过抓包分析,我们看到请求地址和参数如下:

请求地址:/phone_logs

请求参数:phone=13438989002


2.1.用Jmeter实现,加入http授权管理器,填入登录地址和账号密码


2.2.正则提取验证码:您本次获得的验证码是:(.+?),请勿泄露给其他人

2.3.验证提取是否正确



3、HTTP Request Defaults


JMeter不是浏览器,因此其行为并不和浏览器完全一致。这些JMeter提供的HTTP属性管理器用于尽可能模拟浏览器的行为,在HTTP协议层上定制发送给被测应用的HTTP请求。

该属性管理器用于设置其作用范围内的所有HTTP的默认值,可被设置的内容包括HTTP请求的host、端口、协议等。

一个Test Plan中可以有多个HTTP Request Defaults,处于多个HTTP Request Defaults作用域内的Sampler使用HTTP Request Defaults中设置值的叠加值。

事例:

HTTP Request Defaults1:Server Name or IP: www.baidu.com,一个参数:aaa=111

HTTP Request Defaults2:Server Name or IP: www.qq.com,两个参数:bbb=22,aaa=333

事例代码:

Name:HTTP默认请求值,名称随意;

Comments:注释;

basic:基本信息,默认http请求的值,如果多数使用的server或ip、port、Protocol甚至path、parameters,都可以设置,

下面新增的http请求,只需要填写请求的关键数据即可,如path、parameters;

总结:

1、一个测试计划中可以有多个Defaults组件,多个Defaults组件的默认值会叠加,如上图,虽然两个Defaults 组件都定义了参数aaa,但发出的请求还是会叠加起来。

2、两个default中都定义的"Server Name or IP",显示在发送请求时只能使用一个,这里使用的是第一个default定义的值www.baidu.com


4、HTTP Cache Manager

该属性管理器用于模拟浏览器的Cache行为。为Test Plan增加该属性管理器后,Test Plan运行过程中会使用Last-Modified、ETag和Expired等决定是否从Cache中获取相应的元素。


注意:如果Test Plan中的某个Sampler请求的元素是被Cache的元素,则Test Plan在运行过程中会直接从Cache中读取该元素,这样Sampler得到的返回值就会是空。在这种情况下,如果为该Sampler设置了Assertion检查响应体中的制定内容是否存在,该Assertion就会失败。


name:缓存管理器,名称默认,随意;

Comments:描述

Clear cache each iteration:每次请求清除缓存

Use Cache Control/Expires header when processing GET requests:如果选择了“ 使用Cache-Control / Expires头 ”选项,则会根据当前时间检查Cache-Control / Expires值。如果请求是GET请求,并且时间戳在将来,则采样器将立即返回,而不从远程服务器请求URL。这是为了模拟浏览器行为

Max Number of elements in cache:Cache Manager将使用LRU算法在虚拟用户线程的高速缓存中存储多达5000个项目。使用属性“ maxSize ”修改此值。请注意,增加此值越多,HTTP缓存管理器将消耗内存,因此请务必相应地调整-Xmx jvm选项。

HTTP缓存管理器用于向其范围内的HTTP请求添加缓存功能以模拟浏览器缓存功能。每个虚拟用户线程都有自己的缓存。

默认情况下,Cache Manager将使用LRU算法在虚拟用户线程的高速缓存中存储多达5000个项目。使用属性“ maxSize ”修改此值。

请注意,增加此值越多,HTTP缓存管理器将消耗内存,因此请务必相应地调整-Xmx jvm选项。


5、HTTP Cookie Manager

该属性管理器用于管理Test Plan运行时的所有Cookie。HTTP Cookie Manager可以自动储存服务器发送给客户端的所有Cookie,并在发送请求时附加上合适的Cookie.

同时,用户也可以在HTTP Cookie Manager中手工添加一些Cookie,这些被手工添加的Cookie会在发送请求时被自动附加到请求。


注意:

  如果在一个测试计划内有多个Cookie Manager ,Jmeter目前无法指定哪个被使用。所以,一个测试计划内最好只有一个cookie manager

      并且,一个manager里的 cookie 并不能被其它manager所引用。所以在使用多个Cookie Managers 时要谨慎。  

 同理,上面这个规则同样适用于config element下面的其它manager:

Clear Cookies each Iteration:每次迭代请求,清空cookies,GUI中定义的任何cookie都不会被清除。

Implementation:默认HC4CookieHandlerCookie Policy:将用于管理Cookie的cookie策略

User-Defined Cookies:用户自定义

add,delete...增删用户自定义的cookies

如果选中"Clear cookies each iteration?"此项,意味着线程在每次迭代时清除自己会话中的所有Cookie.


Cookie管理器元素有两个功能:

首先,它像Web浏览器一样存储和发送cookie。如果您有HTTP请求并且响应包含cookie,则Cookie管理器将自动存储该cookie,并将其用于将来对该特定网站的所有请求。

每个JMeter线程都有自己的“cookie存储区”。

其次,您可以手动将cookie添加到Cookie管理器。但是,如果您这样做,该cookie将被所有JMeter线程共享。


6、HTTP Header Manager

该属性管理器用于定制Sampler发出的HTTP请求的请求头的内容。不同的浏览器发出的HTTP请求具有不同的Agent,访问某些有防盗链的页面时需要正确的Refer...这些情况下都需要通过HTTP Header Manager来保证发送的HTTP请求是正确的。如下图:

Name: 管理每个http请求头,

Comments:注释

Headers Stored in the Header Manager:

Accept
text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
Accept-Encoding
gzip, deflate, br
Accept-Language
zh-CN,zh;q=0.8
Connection
keep-alive
User-Agent
Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.104 Safari/537.36
Content-Type:
请求的与实体对应的MIME信息,使用Content-type来指定不同格式的请求信息;
application/x-www-form-urlencoded :form表单数据被编码为key/value格式发送到服务器(表单默认的提交数据的格式)
mutiipart/form-data :需要在表单中进行文件上传时,就需要使用该格式
application/json :JSON数据格式

7、 JDBC Connection Configuration配置元件

Name:元件命名,请随意;
Comments:注释,请随意;
Variable Name:数据库连接池的名称,因为一个测试计划可以有多个JDBC Connection Configuration,每个可以取不同的名称,
值得注意的是,在jdbc request中可以通过这个名称选择合适的连接池进行使用。
Connection Pool Connetion:连接池参数配置,基本保持默认,根据需要进行修改;
Max Number of Connections: 最大连接数;如果做性能时,建议填0,如果默认为10,最大只能连接10个线程;
Max Wait(ms):最大等待时间,单位毫秒;
Time Between Eviction Runs(ms):有空闲的线程数,释放不使用的线程;
Auto Commit:自动提交,默认为true,如修改数据库时,自动commit;
Transaction isolation:事务隔离(默认);
Connection Validation by pool:验证连接池;
Test While idle:
Soft Min Evictable Idle Time(ms):
Validation Query:
Database Connection Configuration:数据库连接配置:
Database URL:数据库连接url;jdbc:mysql://localhost:3306/dbname,ipaddr:3306
JDBC Driver class:数据库驱动;com.mysql.jdbc.Driver
Username:用户
Password:密码
附上一些常用的,没用到的数据库连接配置(详情见官网:http://jmeter.apache.org/usermanual/component_reference.html#JDBC_Connection_Configuration):
MySQL
Driver class
com.mysql.jdbc.Driver
Database URL
jdbc:mysql://host[:port]/dbname
PostgreSQL
Driver class
org.postgresql.Driver
Database URL
jdbc:postgresql:{dbname}
Oracle
Driver class
oracle.jdbc.OracleDriver
Database URL
jdbc:oracle:thin:@//host:port/service OR jdbc:oracle:thin:@(description=(address=(host={mc-name})(protocol=tcp)(port={port-no}))(connect_data=(sid={sid})))
Ingress (2006)
Driver class
ingres.jdbc.IngresDriver
Database URL
jdbc:ingres://host:port/db[;attr=value]
Microsoft SQL Server (MS JDBC driver)
Driver class
com.microsoft.sqlserver.jdbc.SQLServerDriver
Database URL
jdbc:sqlserver://host:port;DatabaseName=dbname
Apache Derby
Driver class
org.apache.derby.jdbc.ClientDriver
Database URL
jdbc:derby://server[:port]/databaseName[;URLAttributes=value[;…]]

8、密钥库配置

密钥存储配置元素允许您配置密钥存储将如何加载以及它将使用哪些密钥。此组件通常用于您不希望在响应时间中考虑密钥存储区初始化的HTTPS方案。

要使用这个元素,你需要首先设置一个Java Key Store和你想测试的客户端证书,这样做:

  1. 使用Java keytool实用程序或通过PKI 创建证书

  2. 如果由PKI创建,请将您的密钥导入Java密钥库,方法是将它们转换为JKS可接受的格式

  3. 然后通过两个JVM属性引用密钥库文件(或者将它们添加到system.properties中):

    

9、Random Variable

随机变量配置元素用于生成随机数字字符串并将它们存储在变量中以供稍后使用。这比使用用户定义的变量__Random()函数更简单

输出变量使用随机数生成器构造,然后使用格式字符串格式化结果数字。该数字使用公式minimum + Random.nextInt(maximum-minimum + 1)计算 Random.nextInt()需要一个正整数。这意味着最大值 - 最小值- 即范围 - 必须小于2147483647,但只要范围正常最小值最大值可以是任何数值。


10、计数器

         允许用户创建一个在线程组之内都可以被引用的计数器。

    

        计数器允许用户配置一个起点,一个最大值,增量数,循环到最大值,然后重新开始,继续这样,直到测试结束。计数器使用long存储的值,所取的范围是2^63——2^63-1.

    1、启动jmeter,添加线程组,右键添加配置元件——计数器

      

           计数器界面如下:

            

启动(start):给定计数器的起始值、初始值,第一次迭代时,会把该值赋给计数器 

PS:英文版是Start,Jmeter的中文语言将Start翻译成了“启动”,有些歧义

递增(Increment):每次迭代后,给计数器增加的值

最大值(Maximum):计数器的最大值,如果超过最大值,重新设置为初始值(Start),默认的最大值为Long.MAX_VALUE,2^63-1(如果持续压测,建议最好不要设置最大值)

Number format:可选格式,比如000,格式化为001,002;默认格式为Long.toString(),但是默认格式下,还是可以当作数字使用

引用名称(Reference Name):用于控制在其它元素中引用该值,形式:$(reference_name}

与每用户独立的跟踪计数器(Track Counter Independently for each User):全局的计数器,如果不勾选,即全局的,比如用户#1 获取值为1,用户#2获取值还是为1;

如果勾选,即独立的,则每个用户有自己的值:比如用户#1 获取值为1,用户#2获取值为2。

每次迭代复原计数器(Reset counter on each Thread Group Iteration):可选,仅勾选与每用户独立的跟踪计数器时可用;

如果勾选,则每次线程组迭代,都会重置计数器的值,当线程组是在一个循环控制器内时比较有用。

2、具体过程

①计数器设置

        

②取样器设置

③结果树请求内容

从上图可以看出,计数器成功的生成了我们所需的值。

PS:以上就是计数器的使用方法;为了方便演示,请求地址和路径是随便选用的,忽略红色报错即可。。。

来源:https://www.cnblogs.com/fnng/archive/2011/07/01/2095654.html
     
来源:http://www.cnblogs.com/puresoul/   作者:Glen.He

来源:http://www.s-uu.com/index.php/2016/07/06/authorization-manager/

来源:https://www.cnblogs.com/yangxia-test/p/4123155.html

来源:https://blog.csdn.net/u011466469/article/details/78327248?ref=myrecommend


来源:http://jmeter.apache.org/usermanual/component_reference.html#Keystore_Configuration

来源:https://www.cnblogs.com/imyalost/p/6550660.html

打赏
赞(0) 打赏
未经允许不得转载:同乐学堂 » Jmeter入门到精通-5

特别的技术,给特别的你!

联系QQ:1071235258QQ群:710045715

觉得文章有用就打赏一下文章作者

非常感谢你的打赏,我们将继续给力更多优质内容,让我们一起创建更加美好的网络世界!

支付宝扫一扫打赏

微信扫一扫打赏

error: Sorry,暂时内容不可复制!