Jmeter体系结构
Jmeter概念:
元件:每一个功能,例如Http请求,响应断言等。
组件:每一类元件的组合,例如采样器,配置元件。
Jmeter体系可以分为3个维度:
- X1--X5:负载模拟的过程。
- Y1:负载模拟过程。Y2:负载模拟结果验证
- Z:负载结果收集。
JMeter基本原理是建立一个线程池, 多线程运行取样器产生大量负载,在运行过程中通过断言来验证结果的正确性,通过监听器来记录测试结果。 如果取样器中有参数化的需求,可以通过X2 中的配置元件或者前置处理器来完成。 如果有关联需求, 可以通过后置处理器来完成。 如果我们想要设置运行场景, 比如模拟 多少用户, 运行多长时间, 就设置线程组。如果我们想要模拟并发场景, 可以利用定时器来设置:如果我们想要控制业务的执行逻辑,比如登录只运行一次, 我们可以用控制器来完成。
各组件介绍
取样器:模拟用户操作,向服务器发送请求。
断言:用来验证结构是否正确。
监听器:模拟操作结果收集。
前置处理器:请求发送前,做一些环境或者参数准备的工作,可以使用前置处理器。
配置元件:请求配置元件。
后置处理器:用于处理请求处理的结果。
控制器:用于控制处理逻辑。
定时器:
线程组:模拟用户,一线程一用户。
Test Fragment·:辅助组件,几乎可以放置任何元件。它一般不会运行。作用:1、脚本开发过程中备份元件,2:其下的元件可以被模块控制器调用,用来模块化请求。
Jmeter测试计划要素
脚本中测试计划(TestPlan)仅能有一个。
测试计划必须要有一个线程组。
至少要有一个取样器。
至少要有一个监听器。
Jmeter脚本开发
Jmeter Http协议录制
- Http代理方式录制
- Badboy方式录制
在同一作用域名范围内(不考虑逻辑控制器),测试计划中的元件按照如下顺序执行。
(1)配置元件(config elements )
(2)前置处理程序(Per-processors)
(3)定时器(timers )
(4)取样器(Sampler)
(5)后置处理程序(Post-processors) (除非Sampler 得到的返回结果为空)
(6)断言(Assertions)(除非Sampler 得到的返回结果为空)
(7)监听器(Listeners)(除非Sampler 得到的返回结果为空)
Jmeter元件
组件 | 元件 | 功能 | 参数 |
Samper | FTP Request | ||
HTTP Request | |||
JDBC Request | |||
Java Request | |||
LDAP Request | |||
LDAP Extended Request | |||
Access Log Sampler | |||
BeanShell Sampler | |||
JSR223 Sampler | |||
TCP Sampler | |||
JMS Publisher | |||
JMS Subscriber | |||
JMS Point-to-Point | |||
JUnit Request | |||
Mail Reader Sampler | |||
Flow Control Action (was: Test Action ) | |||
SMTP Sampler | |||
OS Process Sampler | |||
MongoDB Script (DEPRECATED) | |||
Bolt Request | |||
Logic Controller | Simple Controller | 指定一个控制单元,不改变元件的执行顺序 | |
Loop Controller | 控制器在每个线程中运行次数。 | Loop Count:循环次数。-1等同forever | |
Once Only Controller | 仅一次控制器,此控制器在每个线程中只会运行一次,无论多少个循环 | ||
Interleave Controller | 下属元件交互执行,是全部执行次数交替,不是每次循环。 | ignore sub-controller blocks:无视子控制器,每个元件作为一个独立执行节点 Interleave across threads:交替控制器下的请求将应用至所有线程和循环中迭代 | |
Random Controller | 随机选择一个元件执行。 | ignore sub-controller blocks:无视子控制器,每个元件作为一个独立执行节点 | |
Random Order Controller | 随机选择一个元件执行。但是会选择未执行的节点。 | ||
Throughput Controller | 控制其下的子节点的执行次数,无吞吐量控制功能。 | Percent executions:百分比计算执行次数。以整个执行计划作为基数。不受Per User影响。 Total executions:执行多少次后终止。 Per User:是否每个用户都执行total 次。 | |
Runtime Controller | 控制子元件的执行时长(秒)。0则不执行。 | ||
If Controller | 满足表达式,则执行。 | Evaluate for all children:是否针对子节点。 | |
While Controller | 下属元件一直运行到表达式为false。下标可以通过变量__jm__<Name of your element>__idx获取。 | Condition:条件。 blank:有取样器失败则退出。 LAST:最后一个取样器失败,则退出。 variable/function | |
Switch Controller | 指定下属元件执行。匹配指定序号和名称(name),则执行。序号超出范围,则0号执行,名称不匹配,则default执行,无default,则控制器不执行。 | Switch Value:下属元件序号,从0开始。也可以是元件name。 | |
ForEach Controller | 每个取样器执行N次。输入变量为null,则不执行此次循环。下标可以通过变量__jm__<Name of your element>__idx获取 | Input variable prefix:输入变量前缀。 Start index for loop:开始下标,第一个元素下标为index + 1。 End index for loop:结束下标。(包含在内) Output variable:输出参数名称 数字前是否加前缀"_". | |
Module Controller | |||
Include Controller | 用来导入外部测试片段。测试计划不能有线程组,只能有一个简单控制器和其下元件。 | ||
Transaction Controller | 事务控制器,用于统计整个流程。 | ||
Recording Controller | 录制脚本放置此节点下。 | ||
Critical Section Controller | 关键部分控制器,用于核心部分的控制,确保其子节点下的取样器或控制器在一个线程中仅会执行一次 | ||
Listeners | Sample Result Save Configuration | ||
Graph Results | |||
Assertion Results | |||
View Results Tree | |||
Aggregate Report | |||
View Results in Table | |||
Simple Data Writer | |||
Aggregate Graph | |||
Response Time Graph | |||
Mailer Visualizer | |||
BeanShell Listener | |||
Summary Report | |||
Save Responses to a file | |||
JSR223 Listener | |||
Generate Summary Results | |||
Comparison Assertion Visualizer | |||
Backend Listener | |||
Configuration Elements | CSV Data Set Config | ||
FTP Request Defaults | |||
DNS Cache Manager | |||
HTTP Authorization Manager | |||
HTTP Cache Manager | |||
HTTP Cookie Manager | |||
HTTP Request Defaults | 多个HTTP请求的默认值 | ||
HTTP Header Manager | |||
Java Request Defaults | |||
JDBC Connection Configuration | |||
Keystore Configuration | |||
Login Config Element | |||
LDAP Request Defaults | |||
LDAP Extended Request Defaults | |||
TCP Sampler Config | |||
User Defined Variables | |||
Random Variable | 生成随机数字 | ||
Counter | 记录迭代次数 | ||
Simple Config Element | |||
MongoDB Source Config (DEPRECATED) | |||
Bolt Connection Configuration | |||
Assertions | Response Assertion | ||
Duration Assertion | |||
Size Assertion | |||
XML Assertion | |||
BeanShell Assertion | |||
MD5Hex Assertion | |||
HTML Assertion | |||
XPath Assertion | |||
XPath2 Assertion | |||
XML Schema Assertion | |||
JSR223 Assertion | |||
Compare Assertion | |||
SMIME Assertion | |||
JSON Assertion | |||
JSON JMESPath Assertion | |||
Timers | Constant Timer | 固定时间定时器 | |
Gaussian Random Timer | 高斯随机数,可用于模拟思考时间 | ||
Uniform Random Timer | 让线程暂停一个随机时间。 | ||
Constant Throughput Timer | 用于平稳吞吐量。 | ||
Precise Throughput Timer | |||
Synchronizing Timer | 同步定时。用于并发同时执行 | ||
BeanShell Timer | |||
JSR223 Timer | |||
Poisson Random Timer | |||
Pre Processors | HTML Link Parser | ||
HTTP URL Re-writing Modifier | |||
User Parameters | |||
BeanShell PreProcessor | |||
JSR223 PreProcessor | |||
JDBC PreProcessor | |||
RegEx User Parameters | |||
Sample Timeout | |||
Post-Processors | Regular Expression Extractor | ||
CSS Selector Extractor (was: CSS/JQuery Extractor ) | |||
XPath2 Extractor | |||
XPath Extractor | |||
JSON JMESPath Extractor | |||
Result Status Action Handler | |||
BeanShell PostProcessor | |||
JSR223 PostProcessor | |||
JDBC PostProcessor | |||
JSON Extractor | |||
Boundary Extractor | |||
Threads (Users) | Thread Group | ||
tearDown Thread Group | |||
setUp Thread Group | |||
Test Plan | |||
No-Test Elements | HTTP(S) Test Script Recorder (was: HTTP Proxy Server ) | ||
HTTP Mirror Server | |||
Property Display |