- 测试计划(Test Plan)
理解:包含一个测试的所有内容,包含所有的控件,属性,变量。所以一个jmx文件中只能有一个测试计划。测试计划中可以定义变量,引入jar包,编辑测试模式等。
注意事项:
可将一些不常变化的数据存入测试计划的变量,方便在测试计划内调用(例如服务器ip,端口,数据库ip等)。
函数测试模式会记录来每个请求到服务器的取样结果,如果在监听器中定义了数据写入文件,会将这些输入写入到该文件中。同时,该模式会严重影响性能。
- 线程组【add->】
1、线程组( Threads (Users)):
理解:一个虚拟用户组,线程组内线程数量在运行过程中不会发生改变。
注意事项:线程间变量相互独立。一个测试计划内可以包含多个线程组。
可定义内容:
取样器错误后执行的操作:继续执行,启动下一个线程,停止线程,停止测试,立刻停止
线程属性:线程数量,线程启动间隔时间(0为立刻启动所有线程),单线程循环次数,线程执行顺序,是否使用调度器。
调度器配置:持续时间,启动延迟,启动时间,结束时间
1.1线程组(Thread Group):
理解:常规意义上的线程组,即虚拟用户组。
1.2 SetUp Thread Group:
理解:测试初始化操作,即线程组开始之前执行的内容
实际使用:可用于初始化测试环境,测试数据准备等
1.3 TearDown Thread Group:
理解:测试执行后操作,即线程组执行完成后执行的内容。
实际使用:可用于清理测试环境,清空测试数据等。
2、配置元件(Config Element)
理解:为测试提供数据支持的控件
常用控件:
2.1 CSV Data Set Config
理解:读取txt,csv格式的测试数据
使用说明:
- 新建一个txt文件
- 设置CVS 配置参数
CSV Data Set Config各个参数的简要说明:
FileName:csv文件或txt文件路径,可用相对路径
File Encoding: 文件编码格式设置
Varible Names: 定义文本文件中的参数名,可设置多个参数,参数之间逗号分隔.定义后可在脚本中引用,引用方式${name}
Delimiter(use "\t" for tab):指定参数分隔符号
Allow Quoated data: 是否允许引用数据
Recycle on EOF: 是否循环取值
Stop Thread on EOF: 当Recycle on EOF为false并且Stop Thread on EOF为true,则读完csv文件中的记录后,停止运行
Sharing Mode: 设置是否线程共享
使用场景:可用于多个jmx模块情况下读取服务器配置,或存储id,账号等测试数据
2.2 HTTP Header Manager (HTTP信息头管理器) :
理解:定义信息头,在其覆盖下的所有元件都会使用该信息头。例如定义在测试计划中的信息头,即该测试计划所有请求的信息头。
实例截图:
2.3 HTTP Cookie Manager(HTTP Cookie 管理器):
特性:
- 象浏览器一样的存储和发送Cookie。如果你请求一个站点,然后他的Response中包含Cookie,Cookie Manager就会自动地保存这些Cookie并在所有后来发送到该站点的请求中使用这些Cookie的值。(在View Results Tree的Request界面可以看到被发送的Cookie Data, 同时每个线程的Cookie Manager是相互独立的)
接受到的Cookie的值能被存储到JMeter 线程变量中(2.3.2版本后的JMeter不自动做这个事情)。要把Cookies保存到线程变量中,要定义属性"CookieManager.save.cookies=true"。
线程变量名为COOKIE_ + Cookie名。属性CookieManager.name.prefix= 可以用来修改默认的COOKIE_的值。
- 手动添加Cookie到Cookie Manager,需求注意的是这些Cookie的值被会所有线程共享
定义:属性"CookieManager.save.cookies=true"
在jmeter.properties文件中增加CookieManager.save.cookies=true,然后在Debug Sampler中就能看到COOKIE_xxx这样的变量,或者也可以使用正则表达式来提取Cookie的值
实例截图:
使用注意事项:
-
- 路径必须填写,否则会导致nocookie
- 路径和域组成完整的访问地址,谁访问谁就用对应的cookie
- Cookie不是跨域的
- 不同的逻辑控制器中要分别放cookie管理器,或放在该cookie逻辑控制器同级,否则会不生效
2.4 HTTP Cache Manager(HTTP Cache 管理器)
Clear cache each iteration?(每次迭代清空缓存):如果选择该项,则该属性管理器下的所有Sampler每次执行时都会清除缓存;
Use Cache-Control/Expires header when processing GET requests:在处理GET请求时使用缓存/过期信息头;
Max Number of elements in cache(缓存中的最大元素数):默认数值为5000,当然可以根据需要自行修改;
PS:如果Test Plan中某个Sampler请求的元素是被缓存的元素,则Test Plan在运行过程中会直接从Cache中读取元素,这样得到的返回值就会是空。
在这种情况下,如果为该Sampler设置了断言检查响应体中的指定内容是否存在,该断言就会失败!
为test plan增加该属性管理器后,test plan运行过程中会使用Last-Modified、ETag和Expired等决定是否从Cache中获取对应元素。
Cache:一般指的是浏览器的缓存
Last-Modified:文件在服务端最后被修改的时间
ETag:在HTTP协议规格说明中定义为:被请求变量的实体标记
Expired:给出的日期/时间之后;一般结合Last-Modified一起使用,用于控制请求文件的有效时间
PS:上面提到的几个字段,都是HTTP协议里面的报文首部的字段,感兴趣的请自行查阅相关内容,或可参考这篇博客:浏览器缓存详解
2.5 HTTP Request Defaults:请求默认值
HTTP请求默认值,这个属性管理器用于设置其作用范围内的所有HTTP Request默认值,包括:
服务器请求或IP:请求发送的目标服务器名称或地址;
端口:目标服务器的端口号,默认80;
协议:箱目标服务器发送请求所采用的协议,HTTP或HTTPS,默认HTTP;
Content encoding :内容的编码方式,默认值为iso8859;
路径:目标URL路径(不包括服务器地址和端口);
同请求一起发送参数 : 对于带参数的URL ,jmeter提供了一个简单的对参数化的方法:用户可以将URL中所有参数设置在本表中,表中的每一行是一个参数值对;
从HTML文件获取所有有内含的资源:该选项被选中时,jmeter在发出HTTP请求并获得响应的HTML文件内容后,还对该HTML进行Parse 并获取HTML中包含的
所有资源(图片、flash等),默认不选中;如果用户只希望获取页面中的特定资源,可以在下方的Embedded URLs must match 文本框中填入需要下载的特定资源表达式,
这样,只有能匹配指定正则表达式的URL指向资源会被下载。
注意事项:
①、一个测试计划中可以有多个Defaults组件,多个Defaults组件的默认值会叠加;
②、两个default中都定义的"Server Name or IP",显示在发送请求时只能使用一个;
参考博客:http://www.cnblogs.com/puresoul/p/4853276.html
http://blog.chinaunix.net/uid-29578485-id-5604160.html
2.6 HTTP Authorzation Manager(HTTP授权管理器):
该属性管理器用于设置自动对一些需要验证的页面进行验证和登录;
基础URL:需要使用认证页面的基础URL,如上图,当取样器访问它时,jmeter会使用定义的username和password进行认证和登录;
用户名:用于认证和登录的用户名;
密码:用于认证和登录的口令;
域:身份认证页面的域名;
Realm:Realm字串;
Mechanism:机制;jmeter的http授权管理器目前提供2种认证机制:BASIC_DIGEST和KERBEROS:
BASIC_DIGEST:HTTP协议并没有定义相关的安全认证方面的标准,而BASIC_DIGEST是一套基于http服务端的认证机制,保护相关资源避免被非法用户访问,
如果你要访问被保护的资源,则必需要提供合法的用户名和密码。它和HTTPS没有任何关系(前者为用户认证机制,后者为信息通道加密)。
KERBEROS:一个基于共享秘钥对称加密的安全网络认证系统,其避免了密码在网上传输,将密码作为对称加密的秘钥,通过能否解密来验证用户身份;
2.7 Counter
启动(Starting value)
给定计数器的起始值、初始值,第一次迭代时,会把该值赋给计数器
注:英文版下是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获取值为2,如果是独立的,即不勾选,每个用户有自己的值,比如用户#1 获取值为1,用户#2获取值还是为1
Reset counter on each Thread Group Iteration :
可选,仅勾选与每用户独立的跟踪计数器时可用,如果勾选了,每次线程组迭代,都会重置计数器的值。当线程组是在一个循环控制器内时比较有用
2.8 DNS Cache Manager(DNS缓存管理器)
2.9 FTP Request Defaults(FTP请求默认值)
该属性管理器用于设置其作用范围内的所有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
运行结果:
总结:
1、一个测试计划中可以有多个Defaults组件,多个Defaults组件的默认值会叠加,如上图,虽然两个Defaults 组件都定义了参数aaa,但发出的请求还是会叠加起来。
2、两个default中都定义的"Server Name or IP",显示在发送请求时只能使用一个,这里使用的是第一个default定义的值www.baidu.com
2.10 JDBC Connection Configuration
理解:数据库连接控件,不会进行的具体的数据库操作。
实例截图:
注意事项:
- 需要和JDBC Request配合使用
- 需要安装jdbc驱动,否则无法连接数据库
2.11 Java Request Defaults
该组件可以为我们的http请求设置默认的值。假如,我们创建一个测试计划有很多个请求且都是发送到相同的server,这时我们只需添加一个Http request defaults组件并设置“Server Name or IP”,然后添加多个http请求且不设置"server name or ip",这些http请求会默认使用Http request defaults组件设置的值。
参数列表:
Attribute |
Description |
Required |
Name |
组件名 |
No |
Server |
域名或IP |
No |
Port |
端口 |
No |
Connect Timeout |
连接超时时间(单位毫秒) |
No |
Response Timeout |
响应超时时间(单位毫秒) |
No |
Implementation |
实现方式,默认值为Jmeter属性:jemter.httpsampler |
No |
Protocol |
协议,HTTP or HTTPS |
No |
Method |
请求方法:HTTP GET or HTTP POST |
No |
Path |
请求资源路径 |
No |
Send Parameters With the Request |
参数列表 |
No |
Server (proxy) |
代理服务器的域名或IP |
No |
Port |
代理服务器的端口 |
No, unless proxy hostname is specified |
Username |
代理服务器的用户名 |
No |
Password |
代理服务器的密码 |
No |
Retrieve All Embedded Resources from HTML Files |
告诉Jmeter解析HTML文件并发送所有资源请求(包括图片,java小程序,JS,CSS等) |
No |
Use concurrent pool |
用一个连接池来获取嵌入的资源 |
No |
Size |
用于获取嵌入式资源的并发连接池大小 |
No |
Embedded URLs must match: |
URL匹配,过滤 |
No |
特别注意:
在Jmeter之Http Cookie Manager这里我们说过,一个测试计划最好只有一个Manager组件,因为Jmeter无法处理多个Manager的情况。但在一个测试计划中可以有多个Defaults组件,多个Defaults组件的默认值会叠加。
例子:
如下,定义了两个HTTP Request Defaults组件,一个Http sampler(one什么也不填写),一个View Resuls Tree:
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
运行结果:
总结:
1、一个测试计划中可以有多个Defaults组件,多个Defaults组件的默认值会叠加,如上图,虽然两个Defaults 组件都定义了参数aaa,但发出的请求还是会叠加起来。
2、两个default中都定义的"Server Name or IP",显示在发送请求时只能使用一个,这里使用的是第一个default定义的值www.baidu.com
官方文档:
http://jmeter.apache.org/usermanual/component_reference.html#HTTP_Request_Defaults
2.12 Keystore Configuration(**库配置)
2.13 LDAP Extended Request Defaults(扩展请求缺省值)
2.14 LDAP Request Defaults(请求缺省值)
2.15 Login Config Element(登录配置元素)
2.16 Random Variable(随机变量)
配置元件Random Variable可以配置生成随机数,自定义输出格式,最大最小值,以及是否为每个线程单独生成。
2.17 Simple Config Element(简单配置元素)
2.18 TCP Sampler Config(TCP采样器配置)
2.19 User Defined Variables(用户定义的变量)
理解:用户自定义的变量,可用于存储接口路径等信息
实例截图:
注意事项:
注意变量的作用域,不同线程间变量不共享
3、Listener (监听器):
3.1 View Results Tree(查看结果树)
3.2 Summary Report (概要报表)
需要在添加一个名为summary report的监听器,跑完之后查看
Label:取样器/监听器名称
Samples :事务数量
Average:平均一个完成一个事务消耗的时间(平均响应时间)、
Median:所有响应时间的中间值,也就是 50% 用户的响应时间,大概是这个意思
Min:最小响应时间
Max:最大响应时间
以上单位都是ms
Std.Dev:偏离量,越小表示越稳定
Error %:错误事务率
Throughtput:每秒事务数,即tps
KB/sec:网络吞吐量
3.3 Aggregate Report (聚合报告)
Aggregate Report 是 JMeter 常用的一个 Listener,中文被翻译为“聚合报告”。
如果大家都是做Web应用的性能测试,例如只有一个登录的请求,那么在Aggregate Report中,会显示一行数据,共有10个字段,含义分别如下。
Label:每个 JMeter 的 element(例如 HTTP Request)都有一个 Name 属性,这里显示的就是 Name 属性的值
#Samples:表示你这次测试中一共发出了多少个请求,如果模拟10个用户,每个用户迭代10次,那么这里显示100
Average:平均响应时间——默认情况下是单个 Request 的平均响应时间,当使用了 Transaction Controller 时,也可以以Transaction 为单位显示平均响应时间
Median:中位数,也就是 50% 用户的响应时间
90% Line:90% 用户的响应时间
Note:关于 50% 和 90% 并发用户数的含义,请参考下文
http://www.cnblogs.com/jackei/archive/2006/11/11/557972.html
Min:最小响应时间
Max:最大响应时间
Error%:本次测试中出现错误的请求的数量/请求的总数
Throughput:吞吐量——默认情况下表示每秒完成的请求数(Request per Second),当使用了 Transaction Controller 时,也可以表示类似 LoadRunner 的 Transaction per Second 数
KB/Sec:每秒从服务器端接收到的数据量,相当于LoadRunner中的Throughput/Sec
另外,如果大家在使用 JMeter 的过程中遇到问题,建议先参考下面这篇文章
http://www.cnblogs.com/jackei/archive/2006/11/06/551921.html
其他有关 JMeter 和 性能测试的文章请参见下面的链接
http://www.cnblogs.com/jackei/archive/2006/11/13/558720.html
3.4 Backend Listener (后端侦听器)
3.5 Aggregate Graph(聚合图)
使用场景:Aggregate Graph监听器可以看到表格显示的结果与图形结果,如下图,图形结果记录的是响应时间
参数说明:
文件名:结果文件存储到磁盘的路径与文件名
仅日志错误:是否仅记录错误事物
seccess:记录成功事物
Configure:弹出配置窗口进行配置
Label:请求别名
Samples:执行了多少次取样
Average:平均响应时间,单位毫秒
Median:响应时间中间件
90%line:90%事物响应时间
Min:最小响应时间
Max:最大响应时间
Error:出错率
Throught:吞吐量,可以理解成TPS
3.6 Assertion Results (断言结果)
3.7 Comparison Assertion Visualizer(比较断言可视化器)
3.8 Generate Summary Results(生成概要结果)
3.9 Graph Results(图形结果)
3.10 JSR223 Listener
3.11 Mailer Visualizer(邮件观察仪)
3.12 Response Time Graph (响应时间图)
3.13 Save Responses to a file(保存响应文件)
3.14 Simple Data Writer (简单数据写入器)
3.15 View Results in Table (用表格观察结果)
3.16 BeanShell Listener
4、Timer(定时器)
https://www.cnblogs.com/imyalost/p/6004678.html
理解:sampler(采样器)之前执行;如果只想应用于部分sampler,需要将定时器加入子节点;简单理解类似于loadrunner中的思考时间,控制sampler的间隔时间。
4.1 Constant Timer(固定定时器)
理解:请求间隔时间
Name:恒定时间元件名称(可以理解是等待(思考)时间),
Comments:注释,随意;
Thread Delay(in milliseconds):线程等待时间,单位毫秒;
这是最重要的定时器。
需要注意的是,固定定时器的延时不会计入单个sampler的响应时间,但会计入事务控制器的时间。
如下图,固定定时器的时长设为300毫秒。
定时器时长并不计入java请求的响应时间,但被计入“事务控制器”的总时间
如果你坚持看到这里,并且对loadrunner的think time和pacing这两个概念还有记忆的话,我们可以有答案了:
对于“java请求”这个sampler来说,定时器相当于loadrunner中的pacing;对于“事务控制器”来说,定时器相当于loadrunner中的think time。
我们通常说的响应时间,应该大部分情况下是针对某一个具体的sampler(http请求),而不是针对一组sampler组合的事务
4.2 Uniform Random Timer (均匀随机定时器)
同上,延时时间是在指定范围内,并且每个时间取值的概率相同
4.3 Precise Throughput Timer (精确吞吐量定时器)
4.4 Constant Throughput Timer (固定吞吐量定时器)
理解:设置目标吞吐量,限定QPS的控件
可以让JMeter以指定数字的吞吐量(即指定TPS,只是这里要求指定每分钟的执行数,而不是每秒)执行。吞吐量计算的范围可以为指定为当前线程、当前线程组、所有线程组,并且计算吞吐量的依据可以是最近一次线程的执行时延。
吞吐量的依据可以是最近一次线程的执行时延。
配置选项:
Target throughput(in samples per minute):目标吞吐量。注意这里是每分钟发送的请求数,因此,对应测试需求中所要求的20 QPS ,这里的值应该是1200 。
Calculate Throughput based on :有5个选项,分别是:
This thread only :控制每个线程的吞吐量,选择这种模式时,总的吞吐量为设置的 target Throughput 乘以矣线程的数量。
All active threads : 设置的target Throughput 将分配在每个活跃线程上,每个活跃线程在上一次运行结束后等待合理的时间后再次运行。活跃线程指同一时刻同时运行的线程。
All active threads in current thread group :设置的target Throughput将分配在当前线程组的每一个活跃线程上,当测试计划中只有一个线程组时,该选项和All active threads选项的效果完全相同。
All active threads (shared ):与All active threads 的选项基本相同,唯一的区别是,每个活跃线程都会在所有活跃线程上一次运行结束后等待合理的时间后再次运行。
All cative threads in current thread group (shared ):与All active threads in current thread group 基本相同,唯一的区别是,每个活跃线程都会在所有活跃线程的上一次运行结束后等待合理的时间后再次运行。
注意事项:
Constant Throughput Timer只有在线程组中的线程产生足够多的request 的情况下才有意义,因此,即使设置了Constant Throughput Timer的值,也可能由于线程组中的线程数量不够,或是定时器设置不合理等原因导致总体的QPS不能达到预期目标。
4.5 Gaussian Random Timer(高斯随机定时器)
理解:与固定定时器差不多,只不过时间范围可以设置一个指定范围随机。
4.6 JSR223 Timer
4.7 Poisson Random Timer (泊松随机定时器)
这个定时器在每个线程请求之前按随机的时间停顿,大部分的时间间隔出现在一个特定的值,总的延迟就是泊松分布值和偏移值之和。
这个定时器在每个线程请求之前按随机的时间停顿,大部分的时间间隔出现在一个特定的值,总的延迟就是泊松分布值和偏移值之和。
上面表示暂停时间会分布在100到400毫秒之间:
(1)Lambda(in milliseconds):兰布达值
(2)Constant Delay Offset(in milliseconds):暂停的毫秒数减去随机延迟的毫秒数
4.8 Synchronizing Timer
理解:LR中的集合点,也就是说,sampler到这里会暂停,达到指定线程数后并发
Name:Synchronizing Timer 同步定时器名称(集合点)
Comments:注释,可以让定时器变得有意思,一目了然;
Grouping
Number of Simulated Users to Group by: 同组用户数量,设置为0,等效于线程组中的线程数(Number of Threads(users));
Timeout in milliseconds:超时时间,单位毫秒,默认为0;如果设置为0,定时器等待同组的用户数,如果设置大于0,将以等待的最大线程数运行;如果超时,等待的用户数没有到达,定时器将停止等待;如果超时了,设置并发的用户数大于线程数,那么脚本无法停止;
tips:线程组用户数100,添加同步定时器
线程数 (100) |
定时器等待线程数 (视情况而定) |
超时设置(默认为0,单位毫秒) |
设置效果(脚本运行达到的效果) |
100 |
100 |
0 |
用户等待达到100个用户,同时并发请求 |
100 |
90 |
100 |
1、刚好超时100ms,且等到90个用户并发请求; 2、等到90个用户,未超时,继续等到结束,再并发,这时用户数将大于90; 3、等到小于90和用户,又超过了设置100ms,那么以等到的用户并发请求,可能小于90; |
100 |
110 |
0 |
用户无法达到110个用户,线程将一直等待,不会停止; |
100 |
100 |
100 |
1、刚好超时100ms,等到100个用户并发请求; 2、超时100ms后,定时器以等到的最大用户数并发请求; 3、如果超时100ms,用户数没有到达100,将以等到的用户数并发请求,这是用户数可能小于100; |
100 |
0 |
0 |
定时器设置的用户数等效于线程的用户数,超时默认设置为0,用户同时并发请求 |
4.9 BeanShell Timer
这个定时器,一般情况下用不到,但它可以说是最强大的,因为可以自己变成实现想要做的任何事情,例如:希望在每个线程执行完等待一下,或者希望在某个变量达到指定值的时候等待一下。
这里给大家介绍下BeanShell:
BeanShell是一种松散类型的脚本语言(这点和JS类似),一种完全符合java语法的java脚本语言,并且又拥有自己的一些语法和方法。
传送门(另外一位博客园作者的博客):http://www.cnblogs.com/jssy/archive/2006/10/23/537101.html
5、Per Processors(前置处理器)
理解:sampler请求前执行的操作,可以是获取测试数据,修改参数等
5.1 JSR223 PreProcessor
5.2 User Parameters (用户参数)
5.3 HTML Link Parser(HTML链接解析器)
5.4 HTTP URL Re-writing Modifier(HTTP URL重写修饰符)
5.5 JDBC PreProcessor(JDBC预处理器)
5.6 RegEx User Parameters(正则表达式用户参数)
5.7 Sample Timeout(样本超时)
理解:设置simple的最大响应时间,与直接在Sampler中设置的区别就是,作用域不同
5.8 BeanShell PreProcessor
理解:Bean Shell编程设置
6、Post Processors(后置处理器)
理解:请求执行后的处理,与前置处理器相反
6.1 CSS/JQuery Extractor
设置CSS/JQuery extactor时,需要仔细设置匹配数字项(Match NO.)
默认是0,
通过css/jquery的xpath方式获取页面的值时,有时候我们获取的值会是一组,这种情况下,配置Match No就需要比较仔细
设置为1,表示获取第1个匹配到的值
设置为-1,则获取到所有匹配到的值
6.2 JSON Extractor
https://blog.****.net/fu_tester/article/details/77838546
6.3 Boundary Extractor(边界提取器)
6.4 Regular Expression Extractor (正则表达式提取器)
理解:当一个Sampler的Reponse中包含我们需要的参数的时候,我们可以通过该控件将参数提取出来
实例截图:
参数含义
引用名称:将提取的参数转化为变量,该字段定义变量名称
正则表达式:匹配的正则,测试可用搜索引擎搜索在线正则验证测试结果
6.5 JSR223 PostProcessor
https://www.cnblogs.com/sunny-sl/p/8044237.html
6.6 Debug PostProcessor
https://www.cnblogs.com/fengpingfan/p/5894020.html
https://blog.****.net/hualusiyu/article/details/53503990
6.7 JDBC PostProcessor (JDBC 后置处理器)
6.8 Result Status Action Handler(结果状态动作处理器)
6.9 XPath Extractor
https://blog.****.net/xinwang/article/details/11594775?locationNum=12&fps=1
6.10 BeanShell PostProcessor
https://www.cnblogs.com/licl11092/p/6862010.html
7、Assertions (断言)
相关连接:https://www.cnblogs.com/imyalost/p/6024306.html
7.1 Response Assertion (响应断言)
理解:判断Reponse是否正确
注意事项:断言要放在请求内
适用于判断返回内容中的内容,控制面板截图如下:
位置1:名称、注释
位置2:要测试的相应字段,即要检查的项
位置3:模式匹配规则
Ø 包括:返回结果包括你指定的内容
Ø 匹配:(好像跟Equals查不多,弄不明白有什么区别)
Ø Equals:返回结果与你指定结果一致
Ø Substring:返回结果是指定结果的字串
否:不进行匹配
位置4:要测试的模式,即填写你指定的结果(可填写多个,如图中就是希望返回文本中包含有2个指定的字符串,只有当同时包含了这2个串,这个断言才算通过,否则,算失败。)按钮【添加】、【删除】是进行指定内容的管理
7.2 JSON Assertion
https://blog.****.net/buaawp/article/details/50923760
7.3 Size Assertion (大小断言)
Size Assertion用于判断返回内容的大小,Size Assertion控制面板截图如下:
位置1:名称、注释
位置2:指定大小(单位:字节)与比较类型,返回内容的大小、比较类型、指定字节大小的比较时的摆放顺序是:【返回内容的大小】【比较类型】【指定字节大小】,如果这个比较结果通过,则断言通过,如图中,如果返回内容的大小大于10个字节,则断言通过,否则失败。
7.4 JSR223 Assertio
JSR223即Java 规范请求,是指向JCP(Java Community Process)提出新增一个标准化技术规范的正式请求;
作用对象:针对sampler中的JSR223 sampler而使用的断言
Script language(e.g.beanshell,javascirpt,jexl):脚本语言(可以从下面的下拉框中选择对应的脚本语言JavaScript、beanshell等)
parameters to be passed to script(=> String Parameters and String []args):(传递给脚本的参数→可以理解为使用JSR223断言脚本时候一起引用的参数 )
Script file(overrides script):重写脚本(可以通过选择脚本文件的状态,是浏览调用已有的脚本还是在在下方的输入框内写入脚本;)
Script:下面的输入框表示可以输入变量类型,运用的脚本(取样结果、断言结果、取样日志文件等参数)
7.5 XPath Assertion
XPath即为XML路径语言,它是一种用来确定XML(标准通用标记语言的子集)文档中某部分位置的语言。XPath基于XML的树状结构,提供在数据结构树中找寻节点的能力。
作用对象:针对返回信息为XPAth的数据类型进行断言
Apply to:适用范围
Main sample and sub-samples:主要样本和次级样本
Main sample only:仅主要样本
Sub-samples only:仅次级样本
JMeter Variable:jmeter变量(输入框内可输入jmeter的变量名称)
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(一些XML元素具有属性,属性包含应用程序使用的信息,属性仅在程序对元素进行读、写操作时,提供元素的额外信息,这时候需要在DTDs中声明)
XPath Assertion:输入框中写入xpath断言,点击Validate验证其正确性
True if nothing matches:确认都不匹配
7.6 Compare Assertion(比较断言)
这是一种比较特殊的断言元件,针对断言进行字符串替换时使用;
作用对象:需要替换的字符串
Select Comparison Operators:选择比较运算符
Compare Content:可以选择比较的内容类型(true/false或者自定义,编辑)
Compare Time:比较时间(可以设定比较的时间,单位为秒,默认为-1)
Comparison Fitters:比较修改工具
regular expression substitutions:替换正则表达式
Regex String:要替换的字符串(可从断言结果中选择)
substitutions:替换的字符串(替换结果)
7.7 Duration Assertion (断言持续时间)
Duration Assertion用于判断服务器的响应时间,控制面板截图如下:
位置1:名称、注释
位置2:响应时间设置(单位:毫秒),如果响应时间大于设置的响应时间,则断言失败,否则成功!(等于的情况不好设置,暂不知道具体情况如何)
7.8 HTML Assertion(HTML断言)
html assertion的作用是检查返回的的内容,格式是否符合指定格式的相关标准。具体见下面说明。HTML Assertion的控制面板如下:
位置1:名称、注释
位置2:Tidy Settings,Doctype有auto、omit、strict、loose(这里各设置代表什么意思暂不太了解)
位置3:格式类型,即你按那种格式来检查返回内容,html or xhtml or xml?
位置4:能接受的最大值设置,Error threshold:最大可以接受的错误数;Warning threshold:最大可以接受的警告数。如果勾选“Error only”这忽略Warning,只对Error作统计检查。如果对返回内容的检查结果不超过指定结果,则断言通过,否则失败。
7.9 MD5Hex Assertion
MD5是一种消息摘要算法,用以提供消息的完整性保护(具体关于MD5的知识请自行查询);
作用对象:针对参数类型为MD5Hex加密的参数的断言
MD5Hex:将已被MD5加密的参数写入其中,添加取样器等其他元件
7.10 SMIME Assertion
SMIME是一种多用途网际邮件扩充协议,相比于之前的SMAP邮件传输协议,增加了安全性,对邮件主题进行保护;
作用对象:针对采用了该种邮件传输协议的信息
signature:签名(可选择对协议的签名验证状态)
Verify signature:验证签名
Message not signed:没有签名消息
Signer certificate:签名证书(因为SMIME协议增加了安全传输,需要证书验证)
No check:不检查
Check values:检查
Signer distinguished name:签名证书者名称(证书注册者的名称)
Sigmer email address:签名者的邮件地址(注册的邮件地址)
Issuer distinguished name:发行者名称(由谁发行的证书)
Serial Number:证书序号
Certificate file:选择证书文件
Execute assertion message at position:执行断言消息的位置(在返回消息的具体哪个位置执行断言)
7.11 XML Assertion (XML 断言)
XML(可扩展标记语言) 提供一种描述结构化数据的方法。与主要用于控制数据的显示和外观的 HTML 标记不同,XML 标记用于定义数据本身的结构和数据类型;
作用对象:判断返回结果是否和xml的格式即<></>成对出现
7.12 XML Schema Assertion(XML概要断言)
亦可以称为XML模型断言/XML数据类型断言;XML Schema 定义了两种主要的数据类型:①xml document schema 文档架构 ;② 文档架构xml-schema xml模式
作用对象:返回结果为XML概要断言的2中数据类型的消息
XML Schema:XML概要模型
File Name:文件名(写入需要断言的文件名称)
7.13 BeanShell Assertion(BeanShell断言)
BeanShell之前关于定时器的随笔中有介绍过,是一种松散类型的脚本语言(这点和JS类似),一种完全符合java语法的java脚本语言,并且又拥有自己的一些语法和方法;
作用对象:针对sampler中的Bean Shell sampler而使用的断言
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):参照下文定义的变量(使脚本文件参照定义的变量来运行)
8、Test Fragment
理解:与线程组同级别,但是默认不会执行。只有当他被模块控制器引用的时候才会被执行。
9、Non-Test Elements (非测试元件)
9.1 HTTP Mirror Server
相关链接:https://www.cnblogs.com/fengpingfan/p/5891495.html
https://www.cnblogs.com/puresoul/p/4907655.html
9.2 HTTP(S) Test Script Recorder (HTTP代理服务器)
相关链接:https://www.cnblogs.com/sophia194910/p/5261773.html
http://blog.sina.com.cn/s/blog_13cc013b50102v5nr.html
-
- Property Display(属性显示)
-
Thread Group (add->)
- Sampler
理解:请求,设置不同的request
1.1 HTTP Request(HTTP请求)
理解:就是一次HTTP请求
关于http请求的的属性参数说明:
1)名称:用于标识一个sample。建议使用一个有意义的名称
2)注释:对于测试没任何影响,仅用来记录用户可读的注释信息
3)服务器名称或IP:http请求发送的目标服务器名称或者IP地址,比如http://www.baidu.com
4)端口号:目标服务器的端口号,默认值为80,可不填
5)协议:向目标服务器发送http请求时的协议,http/https,大小写不敏感,默认http
6)方法:发送http请求的方法(链接:http://www.cnblogs.com/imyalost/p/5630940.html)
7)Content encoding:内容的编码方式(Content-Type=application/json;charset=utf-8)
8)路径:目标的URL路径(不包括服务器地址和端口)
9)自动重定向:如果选中该项,发出的http请求得到响应是301/302,jmeter会重定向到新的界面
10)Use keep Alive:jmeter 和目标服务器之间使用 Keep-Alive方式进行HTTP通信(默认选中)
11)Use multipart/from-data for HTTP POST :当发送HTTP POST 请求时,使用
12)Parameters、Body Data以及Files Upload的区别:
1. parameter是指函数定义中参数,而argument指的是函数调用时的实际参数
2. 简略描述为:parameter=形参(formal parameter), argument=实参(actual parameter)
3. 在不很严格的情况下,现在二者可以混用,一般用argument,而parameter则比较少用
While defining method, variables passed in the method are called parameters.
当定义方法时,传递到方法中的变量称为参数.
While using those methods, values passed to those variables are called arguments.
当调用方法时,传给变量的值称为引数.(有时argument被翻译为“引数“)
4、Body Data指的是实体数据,就是请求报文里面主体实体的内容,一般我们向服务器发送请求,携带的实体主体参数,可以写入这里
5、Files Upload指的是:从HTML文件获取所有有内含的资源:被选中时,发出HTTP请求并获得响应的HTML文件内容后还对该HTML
进行Parse 并获取HTML中包含的所有资源(图片、flash等):(默认不选中)
如果用户只希望获取特定资源,可以在下方的Embedded URLs must match 文本框中填入需要下载的特定资源表达式,只有能匹配指定正则表达式的URL指向资源会被下载
1.2 Test Action
理解:请求的执行动作,可放在Sampler后定义,即执行某一个请求后暂停等操作
1.3 Debug Sampler
https://www.cnblogs.com/puresoul/p/4817832.html
1.4 AJP/1.3 Sampler
1.5 Access Log Sampler
https://blog.****.net/xiaoqingyu999/article/details/52139322
1.6 BeanShell Sampler
http://blog.sina.com.cn/s/blog_13cc013b50102wn4j.html
1.7 FTP Request(FTP请求)
1.8 JDBC Request
https://blog.****.net/u012167045/article/details/72638507
1.9 JMS Point-to-Point (JMS 点对点)
https://www.yiibai.com/jmeter/jmeter_jms_pointtopoint_test_plan.html
1.10 JMS Publisher
1.11 JMS Subscriber
https://www.cnblogs.com/macs524/p/5652011.html
1.12 JSR223 Sampler
1.13 JUnit Reques
1.14 Java Request(Java请求)
https://blog.****.net/czp11210/article/details/26174969
1.15 LDAP Extended Request
1.16 LDAP Request
1.17 Mail Reader Sampler
https://blog.****.net/a574258039/article/details/19551241
1.18 OS Process Sampler(操作系统采样器)
1.19 SMTP Sampler
https://www.2cto.com/kf/201803/733047.html
1.20 TCP Sampler(TCP取样器)
https://blog.****.net/m0_37355951/article/details/74779977
-
- Logic Controller (逻辑控制器)
https://www.cnblogs.com/111testing/p/6413543.html
2.1 If Controller
作用:根据给定表达式的值决定是否执行该节点下的子节点,默认使用JavaScript的语法进行判断(如下图红框内的文字)。
参数:
Interpret Condition as Variable Expression?:选中这一项时表示:判断变量值是否等于字符串true(不区分大小写)
Evaluate for all children:如果选中这一项,在每个子结点执行前都会计算表达式
示例一:使用变量的方式进行判断:
示例二:选中Interpret Condition as Variable Expression?
2.2 Transaction Controller(事物控制器)
作用: 事务控制器会生产一个额外的采样器,用来统计该控制器子结点的所有时间。
参数:
Generate parent sample:(选中这个参数结果展示如下图红框,否则显示为下图蓝框)
Include duration of timer and pre-post processors in generated sample:选中这一项会统计定时器(timer)的时间,否则只统计采样器(sample)的时间
2.3 Loop Controller
作用:指定其子节点运行的次数,可以使用具体的数值(如下图,设置为5次),也可以使用变量
1、Forever选项:勾选上这一项表示一直循环下去
2、如果同时设置了线程组的循环次数和循环控制器的循环次数,那循环控制器的子节点运行的次数为两个数值相乘的结果。
2.4 While Controller
2.5 Critical Section Controller
2.6 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}进行调用。
2.7 Include Controller
包含控制器用于使用外部的Jmx文件。为了演示使用它,可以添加一个simple controller,然后在其中添加一个采样器(sample),比如一个http请求。然后把这个simple controller保存为一个jmx文件。这样在include controller中设置该jmx文件就可以在测试计划中使用了。值得注意的是,包含测试的测试计划中不能有线程组,仅仅只能有simple controller,然后其下可以添加任何采样器,控制器。
如果用户需要使用cookie manage或者 用户自定义变量,都应该在顶层的测试计划中设置,不应该包含在外部文件中,否则不会它们不会起作用。
This element does not support variables/functions in the filename field.
However, if the propertyincludecontroller.prefixis defined, the contents are used to prefix the pathname.
如果在prefix+filename的路径中找不到文件,控制器会尝试在JMX存放目录中根据文件名进行查找。
控制面板
参数
Attribute |
Description |
Required |
Filename |
包含的文件 |
Yes |
2.8 Interleave Controller
2.9 Once Only Controller
作用:在测试计划执行期间,该控制器下的子结点对每个线程只执行一次,登录场景经常会使用到这个控制器。
注意:将Once Only Controller作为Loop Controller的子节点,Once Only Controller在每次循环的第一次迭代时均会被执行。
2.10 Random Controller
作用:随机执行其下的所某个子结点
2.11 Random Order Controller
作用:随机执行其下的所有子结点
2.12 Recording Controller
2.13 Runtime Controller
2.14 Simple Controller
作用:这是Jmeter里最简单的一个控制器,它可以让我们组织我们的采样器和其它的逻辑控制器(分组功能),提供一个块的结构和控制,并不具有任何的逻辑控制或运行时的功能。
2.15 Throughput Controller
作用:控制其下的子节点的执行次数与负载比例分配,也有两种方式:
Total Executions:设置运行次数
Percent Executions:设置运行比例(1~100之间)
示例:
- 设置线程组循环5次:
- Throughput Controller1的子结点执行3次:
- Throughput Controller2的子结点执行(40% * 线程组循环次数5)= 2次:
执行结果:
2.16 Module Controller
2.17 Switch Controller
作用:Switch控制器通过给该控制器中的Value赋值,来指定运行哪个采样器。有两种赋值方式:
第一种是数值,Switch控制器下的子节点从0开始计数,通过指定子节点所在的数值来确定执行哪个元素。
第二种是直接指定子元素的名称,比如采样器的Name来进行匹配。当指定的名称不存在时,不执行任何元素。
当Value为空时,默认执行第1个子节点元素。
示例:
1、Switch Controller选择的值为login page
2、执行结果: