执行顺序
测试计划->线程组->配置元件->前置处理器->定时器->取样器->后置处理器->断言->监听
• (1)配置元件(如果存在)。
• (2)前置处理器(如果存在)。
• (3)定时器(如果存在)。
• (4)取样器(如果存在)。
•(5)后置处理器(如果存在且取样器的结果不为空)。
• (6)断言(如果存在且取样器的结果不为空 • (7)监听器(如果存在且取样器的结果不为空)。
作用域:
必须组件:测试计划、线程组、取样器
辅助组件:除了必须组件,辅助组件用于父组件、同级组件、以及同级组件下的所有子组件。
内容
1. 测试计划
- 一个测试计划即一个测试用例
- 起点,所有组件的容器
测试计划要素:
(1)脚本中测试计划只能有一个
(2)测试计划中至少要有一个线程组
(3)至少要有一个取样器
(4)至少要有一个监听器
2. 线程组
代表一定数量的用户
3. 取样器
向服务器发送请求的最小单元
包括:
3.1 HTTP请求
3.2 逻辑控制器
可以控制取样器的执行顺序
结合取样器实现一些复杂的逻辑
3.2.1 简单控制器(Simple Controller)
用来指定了一个执行单元,它不改变元件的执行顺序。(无任何实际作用,也不参与脚本运行)
名称 | 说明 |
---|---|
名称 | 可以随意设置,甚至可以为空 |
注释 | 可以随意设置,可以为空 |
3.2.2 For Each 控制器(ForEach Controller)
定义一个循环规则
名称 | 说明 |
---|---|
名称 | 控制器名称,可以随意设置,甚至可以为空 |
注释 | 可以随意设置,可以为空 |
输入变量前缀 | 可以在“用户自定义的变置”中定义一组变量,循环控制器可以从中获取到变量对应的值,然后作为循环控制器的循环条件,还可以输出变量作为取样器的参数。 |
开始循环字段/Start index for loop | 循环变量下标起点 |
结束循环字段/End index for loop | 循环变量下标终点 |
输出变量名称 | 循环控制器生成的变量名称 |
数字之前加上下划线“”?/Add ”” before number? | 变量前缀后是否加”_”作为分隔符 |
3.2.3 switch控制器(Switch Controller)
类似于高级语言中的Switch逻辑控制语句
名称 | 说明 |
---|---|
名称 | 可以随意设置,甚至可以为空 |
注释 | 可以随意设置,甚至可以为空 |
Switch Value | 匹配值,如上面所说可以为数字,也可以为字符。为字符时匹配取样器名称,如果匹配不上就会默认并找取样器名称为default的取样器,如果没有则不运行。 |
JMeter会给节点下的取样器顺序编号,第一个取样器编号为0,第二个取样器的编号就是1,所以这里指定0就会运行第一个请求)
3.2.4 如果(if)控制器(If Controller)
通过某个条件来控制此节点下的元件是否运行
名称 | 说明 |
---|---|
名称 | 可以随意设置,甚至可以为空 |
注释 | 可以随意设置,可以为空 |
Condition | 判断条件,勾选 Interpret Condition as Variable Expression?时Condition 使用变量表达式来设置条件 |
3.2.5 事务控制器(Transaction Controller)
名称 | 说明 |
---|---|
名称 | 可以随意设置,最好有业务意义 |
注释 | 可以随意设置,可以为空 |
Generate parent sample | 如果事务控制器下有多个取样器(请求),勾选它,那么在“察看结果树”中我们不仅可以看到事务控制器,还可以看到每个取样器;并且事务控制器定义的事务是否成功是取决于子事务是否都成功的,其中任何一个失败即代表整个事务失败。 |
include duration of timer and pre-postprocessors in generated sample | 是否包括定时器、预处理和后期处理延迟的时间 |
3.2.6 循环控制器(Loop Controller)
• 控制在其节点下的元件的执行次数。
•如果在线程组中也设置了执行次数,那么循环控制器下的元件的执行次数是:线程组执行次数*循环控制器执行次数。
名称 | 说明 |
---|---|
名称 | 控制器名称,可以随意设置,甚至可以为空 |
注释 | 可以随意设置,可以为空 |
循环次数(Loop Count) | 要么设置Forever,要么填写具体的执行次数,二选一 |
3.2.7 吞吐量控制器(Throughput Controller)
用来控制其下元件的执行次数
名称 | 说明 |
---|---|
名称 | 控制器名称,可以随意设置,甚至可以为空 |
注释 | 可以随意设置,可以为空 |
Percent Executions | 按执行次数的百分比来计算执行次数,此时Throughput取值是0〜 100。PerUser是否勾选对Percent Executions模式无影响 |
吞吐量 | 如:20,代表吞吐量20%,若线程数10,执行2个http请求 |
PerUser | 如果选择PerUser则按虚拟用户数来计算执行次数,如果没选中PerUser则是按所有虛拟用户来计算执行次数 |
3.2.8 随机控制器(Random Controller)
随机控制器(如图所示)节点下的元件随机运行,与交替控制器不一样的是节点下的元件运行顺序不定
名称 | 说明 |
---|---|
名称 | 控制器名称,可以随意设置,甚至可以为空 |
注释 | 可以随意设置,可以为空 |
忽略子控制器块(Ignore sub-controller blocks) | 忽略子控制器,即子控制器失效,由随机控制器接管,类似交替控制器 |
使用随机控制器后,随机执行一个http请求
如:
3.2.9 随机顺序控制器(Random Order Controller)
其节点下的元件随机执行,不过每个元件只执行一次
名称 | 说明 |
---|---|
名称 | 控制器名称,可以随意设置,甚至可以为空 |
注释 | 可以随意设置,可以为空 |
有几个请求执行几次,随机执行,每个都执行一遍
如:
3.3 前置处理器
处理请求前的一些准备工作
3.3.1 用户参数(User Parameters)
可以使用此元件进行参数设置,在取样器中进行参数化
3.3 后置处理器
对响应数据进行处理
3.3.1 正则表达式(Regular Expression Extractor)
名称 | 说明 |
---|---|
名称 | 可以随意设置,最好有业务意义 |
注释 | 可以随意设置,可以为空 |
Apply to | 应用范围 |
要检查的响应字段 | 针对响应数据的不同部分进行匹配 |
引用名称 | 匹配出来的信息通过此名称进行访问,类似${引用名称}进行访问 |
正则表达式 | 正则表达式提取器使用此串进行信息匹配 |
模板 | 正则表达式可以设置多个模板进行匹配,在此只可指定运用哪个模板。 如: 0 0 0指全文匹配; 1 1 1指第一个模板; 2 2 2指第二个模板 |
匹配数字 | 在匹配时往往会出现多个值匹配的情况。 匹配数为0:随机取匹配不同模板可能会匹配一组值;匹配数字:确定取这一组值中的哪一个;负数:取所有值,可以与 For each Controller一起使用来遍历 |
默认值 | 如果没有匹配到可以指定一个默认值 |
名称 | 说明 | |
---|---|---|
Apply to | Main sample and sub-samples | 匹配范围包括当前父取样器并覆盖至子取样器 |
Apply to | Main sample only | 匹配范围是当前父取样器 |
Apply to | Sub-samples only | 仅匹配子取样器 |
Apply to | JMeter Variable | 支持对 JMeter变量值进行匹配 |
要检查的响应字段 | 主体 | 响应数据的主体部分,排除Header部分;Htp协议返回请求的主体部分就是Body |
要检查的响应字段 | Body( unescaped) | 针对替换了转义码的Body部分 |
要检查的响应字段 | Body as a Documet | 返回内容作为一个文档进行匹配 |
要检查的响应字段 | 信息头 | 只匹配信息头部分的内容 |
要检查的响应字段 | URL | 只匹配URL链接 |
要检查的响应字段 | 响应代码 | 匹配响应代码,比如HTTP协议返回码200代表成功 |
要检查的响应字段 | 响应信息 | 匹配响应信息,比如处理成功返回“成功”字样,或者“OK”字样 |
后置处理器的应用:关联
使用正则表达式实现接口关联:
- 从鉴定码token接口获取动态码,编写到标签接口的URL栏
- 获取动态验证码,如:
① 脚本设置如下(必须包括采样器、):
② 设置后置处理器(正则表达式)设置:
若有一个正则,可以写成
若有多个正则,可以使用;分割开
③新接口设置关联
④启动查看接口参数的值是否为动态的:
3.3.2 调试后置处理程序(Debug PostProcessor)
多用在脚本调试,结合察看结果树我们可以看到Sampler 的相关变量、系统相关属性、JMeter相关变量与属性
名称 | 说明 |
---|---|
名称 | 随意填写,可以为空 |
注释 | 随意填写,可以为空 |
jmeter属性(JMeter properties) | 是否示 JMeter 属性 |
jmeter变量(JMeter variables) | 是否显示JMeter中定义的变量 |
取样器属性(Sampler properties) | 是否显示取样器属性 |
系统属性(System properties) | 是否显示系统属性 |
3.3.3 JSON提取器(JSON Extractor)
多用在返回格式为json的HTTP请求中,用来获取返回的json中的某个值。并保存成变量供后面的请求进行调用或断言等
名称 | 说明 |
---|---|
名称 | json后置表达式的名称,标识作用,建议使用有意义的名字 |
注释 | 随意填写,可以为空 |
Variable names | 保存的变量名,后面使用${Variable names}引用 |
JSON Path expressions | 上一步中调试通过的json path表达式 |
Match Numbers | 匹配数字(0代表随机,1代表第一个,-1代表所有) |
Compute concatenation var(suffix_ALL) | 是否统计所有,即将匹配到的所有值保存,名为“变量名_ALL”,使用场景需要获取的值有多个,后面需要对这一组数据进行操作 |
Default Values | 找不到时默认值,一般设置为NOT FOUND |
3.4 断言
用于判断请求是否成功
3.4.1 响应断言(Response Assertion)
验证响应信息是否正确
名称 | 说明 |
---|---|
名称 | 可以随意设置,最好有业务意义 |
注释 | 可以随意设置,可以为空 |
Apply to | 应用范围 |
要测试的响应字段 | 针对响应数据的不同部分进行匹配 |
模式匹配规则 | |
要测试的模式 | 填入你需要匹配的字符串或者正则表达式,注意要与模式匹配规则搭配好 |
3.4.2 大小断言(Size Assertion)
验证响应数据Size大小
名称 | 说明 |
---|---|
名称 | 给添加的元件取名,随意填写,可以为空 |
注释 | 随意填写,可以为空 |
Apply to | 断言应用范围 |
响应字段大小(Response Size Field to Test) | 哪部分响应域参与断言 |
Size to Assert | 断言时Size的阀值设置 |
3.4.3 断言持续时间(Duration Assertion)
验证取样器运行测试消耗掉的时间
名称 | 说明 |
---|---|
名称 | 给添加的元件取名,随意填写,可以为空 |
注释 | 随意填写,可以为空 |
Apply to | 断言应用范围 |
断言持续时间 | 单位毫秒 |
3.5 定时器
一般被用来设置延迟与同步,负责在请求之间的延迟建个、固定、高斯、随机的定时器
3.5.1 固定定时器(Constant Timer)
用于延迟时间,多用来模拟思考时间
3.5.2 高斯随机定时器(Gaussian Random Timer)
生成一个呈高斯分布的时间间隔
名称 | 说明 |
---|---|
偏差 | 设置的偏差值,是一个浮动范围,单位毫秒 |
固定延迟偏移 | 固定延迟时间 |
例如 ,偏差3s,固定延迟偏移5s,则运行时间为5s-8s
3.5.3 同步定时器(Synchronizing Timer)
使用同步定时器来实现并发需求
名称 | 说明 |
---|---|
名称 | 可以随意设置,最好有业务意义 |
注释 | 可以随意设置,可以为空 |
模拟用户组的数量(Number of Simulated Users to Group by) | 设置同步的线程数量 |
3.6 配置元件
用于配置相关信息
3.6.1 CSV数据文件设置(CSV Data Set Config)
迭代方式:依次使用csv文件里的名称 数量=线程数*循环数
名称 | 说明 |
---|---|
名称 | 可以随意设置,最好有业务意义 |
注释 | 可以随意设置,可以为空 |
文件名 | 引用文件地址,可以是相对路径也可以是绝对路径。相对路径的根节点是JMeter的启动目录(% JMETER HOME%bin) |
文件编码 | 读取参数文件用到的编码格式,建议大家用UTF-8的格式 |
变量名称 | 定义的参数名称,用逗号隔开,将会与参数文件中的参数对应 |
分隔符 | 用来分隔参数文件的分隔符,默认为逗号“,” |
是否允许带引号 | 选择是,那么可以允许拆分完成的参数里面有分隔符出现 |
遇到文件结束符再次循环 | 选择是,参数文件循环遍历;否,参数文件遍历完成后不循环(JMeter在测试执行过程中每次迭代会从参数文件中新取一行数据,从头遍历到尾) |
遇到文件结束符停止线程 | 与 Recycle on EOF中的 False选择复用;是,停止测试;否,不停止测试 |
线程共享模式 | 参数文件共享模式,有以下三种。所有现场(Allthreads) :参数文件对所有线程共享,这就包括同一测试计划中的不同线程组;当前线程组(Current thread group):只对当前线程组中的线程共享;当前线程(Current thread):仅当前线程获取。 |
操作步骤:
① 设置CSV文件(可以将excel文件修改后缀)
②CSV数据文件设置如下:
③设置线程组
⑤察看结果树,查看接口是否出错
如:使用如下数据
结果截图如下:
接口 | 结果截图 |
---|---|
第一轮请求 | ![]() |
第二轮请求 | ![]() |
第三轮请求 | ![]() |
第四轮请求 | ![]() |
第五轮请求 | ![]() |
3.6.2 HTTP请求默认值(HTTP Request Defaults)
一般,服务器名称或IP是不变的,端口也是不变的;由于每个请求都要写一遍(如果是手动开发脚本),这样工作量会比较大。
JMeter也考虑了这方面的工作量,提供了HTTP请求默认值这样一个元件,让我们能够把重复的内容分离出来,只需要定义一次就够了。
3.6.3 HTTP信息头管理器(HTTP Header Manager)
- HTTP信息头管理器可以设定JMeter发送的HTTP请求头所包含的信息
- HTTP信息头中包含有”User-Agent"、“Pragma"、”Referer"等属性。尽能放在线程组一级。除非因为某些原因,测试人员希望不同的HTTP请求使用不同的HTTP信息头
3.6.4 HTTP Cookie 管理器(HTTP Cookie Manager)
•Cookie 是储存在用户本地终端上的数据
•通常情况下,当用户结束浏览器会话时,系统将终止所有的Cookie。当Web服务器创建了Cookies后,只要在有效期内,用户访问同一个Web服务器时,浏览器首先要检查本地的Cookie,并将其原样发送给Web 服务器
•Cookies最典型的应用1:判断注册用户是否已经登录网站,用户可能会得到提示,是否在下一次进时保留用户信息以便简化登录操作,这些都是Cookies的功用
•Cookies最典型的应用2:商城的"购物车”之类处理。用户可能会在一段时间内同一家网站的不同页面中选择不同的商品,这些信息都会写入Cookies,以便在最后付款提取信息。
- 自动管理cookies,在jmeter配置文件中设置CookieManager.save.cookies=true
- 手动添加cookies ,可以利用firefox中导出Cookies之后在导入jmeter中
3.6.5 用户定义的变量(User Defined Variables)
应用:提取IP和port配置元件,登录IP和端口
操作步骤:
结果如下:
3.6.6 计数器(Counter)
在测试执行过程中会记录迭代次数
迭代方式(如有2个线程组):
迭代方式 | 备注 | 执行的请求顺序 |
---|---|---|
单用户单迭代 | 计数器->勾选与每用户独立的跟踪计数器 | 如:线程1,循环1,请求的username为test1 |
单用户单迭代 | 计数器->不勾选与每用户独立的跟踪计数器 | 如:线程1,循环1。请求的username为test1 |
单用户多迭代 | 计数器->勾选与每用户独立的跟踪计数器 | 如:线程1,循环2。请求的username为test1、test2 |
单用户多迭代 | 计数器->不勾选与每用户独立的跟踪计数器 | 如:线程1,循环2。请求的username为test1、test2 |
多用户单迭代 | 计数器->勾选与每用户独立的跟踪计数器 | 如:线程2,循环1。请求的username为test1、test1 |
多用户单迭代 | 计数器->不勾选与每用户独立的跟踪计数器 | 如:线程2,循环1。请求的username为test1、test2 |
多用户多迭代 | 计数器->勾选与每用户独立的跟踪计数器 | 如:线程2,循环2。请求的username为test1、test2、test1、test2 |
多用户多迭代 | 计数器->不勾选与每用户独立的跟踪计数器 | 如:线程2,循环2,请求的username为test1、test2、test3、test4 |
应用:设置计数器
使用步骤:
①添加:测试计划->添加->配置元件->计数器
②计数器设置
③其它接口调用该参数:
3.7 监听器
负责收集结果
监听器用来监听及显示JMeter取样器测试结果
察看结果树 | 说明 |
---|---|
察看结果树(View Results Tree) | 在结果树中査看到响应数据 |
聚合报告(Aggregate Report) | 以表格的形式显示取样器结果,与Aggregate Graph 类似,不过它没有图形显示功能;如果是GUI方式运行建议还是选用Aggregate Report。 |
汇总报告(Aggregate Graph) | 表格显示的结果与图形结果 |
Distribution Graph | 响应时间分区间显示,显示多少事务的响应时间在哪个范围内;消耗性能,大负载不建议使用,调试或者功能测试用 |
响应时间图(Response Time Graph) | 以图形的形式显示取样器结果(响应时间) |
简单数据写入器(Simple Data Writer) | 用来记录取样器执行结果,不会以图形的方式显示 |
Spline Visualizer | 以样条线的方式来显示取样器结果;消耗性能,大负载不建议使用 |
保存响应到文件(Save Response to a file) | 用来存储服务器响应数;消耗性能,大负载不建议使用,调试或者功能测试用 |
断言结果(Assertion Results) | 用来显示断言结果;调试用 |
生成概要结果(Generate Summary Results) | 非GUI方式运行时,让结果在 CMD (Windows 系统下)窗口显示 |
用表察看结果(View Results in Table) | 把取样器每次结果以表格的形式显示;消耗性能,大负载不建议使用,调试或者功能测试用 |
Monitor Results | 原先进为监控Tomcat5而开发的,前提是Tomcat的webapps\managw目录存在;不建议使用 |
邮件查看仪(Mailer Visualizer) | 发送邮件给相关人员 |