随笔- 208 文章- 0 评论- 13
简单的控制器
简单的逻辑控制器可以让你组织你的采样器和其他 逻辑控制器。 不像其他逻辑控制器,该控制器不提供除此之外的功能 存储设备。
控制面板简单的控制器的截图
参数
在这个例子中,我们创建了一个测试计划,发送两个蚂蚁和两个HTTP请求 Log4J HTTP请求。 我们分组蚂蚁和Log4J请求安置在里面 简单的逻辑控制器。 记住,简单的逻辑控制器如何JMeter没有影响 流程控制器(s)添加到它。 所以,在这个例子中,JMeter发送的请求 以下订单:Ant主页,Ant新闻页面,Log4J主页,Log4J历史页面。
注意,文件的记者 被配置为将结果存储在一个文件名为“ simple-test.dat “在当前目录。
图6简单控制器的例子
^
循环控制器
如果你添加生成或逻辑控制器回路控制器,JMeter的意志 循环遍历这些设置一定数量的时候,除了循环值 指定的线程组。 例如,如果你添加一个HTTP请求 与循环计数两个回路控制器,配置线程组循环 数到三,JMeter将发送 2 * 3 = 6 HTTP请求。
截图的回路控制器的控制面板
参数
特殊情况: 循环控制器中嵌入 线程组 元素表现略有不同。 除非将永远,停止测试后 给定数量的迭代已经完成。
当使用一个函数在这个领域时,要注意它可能多次被评估。 示例使用 __Random 将为每个孩子不同的价值评估取样器的回路控制器和结果成不必要的行为。
是的,除非“永久”检查
循环的例子
下载 这个示例(请参见图4)。 在本例中,我们创建了一个测试计划,发送一个特殊的HTTP请求 只有一次和5次发送另一个HTTP请求。
图4 -环控制器的例子
我们配置一个线程的线程组和一个循环数的价值 一个。 而不是让线程组控制循环,我们使用一个循环 控制器。 你可以看到,我们添加了一个HTTP请求线程组 另一个HTTP请求一个循环控制器。 我们配置了循环控制器 循环计数5的价值。
JMeter将按照以下顺序发送请求:主页、新闻页面, 新闻页面、新闻页面、新闻页面,和新闻页面。
注意,文件的记者 被配置为将结果存储在一个文件名为“ loop-test.dat “在当前目录。
^
曾经只有控制器
曾经只有逻辑控制器告诉JMeter处理控制器(s)里面只有一次每个线程,并经过任何请求 在进一步的迭代测试计划。
曾经只有控制器将执行总是在第一次迭代的循环父控制器。 因此,如果一旦只有控制器放置在一个循环控制器指定循环5次,那么一次只在第一个迭代通过控制器将只执行循环控制器 (即每5次)。
注意这意味着一次只控制器仍然会像此前预期,如果把在一个线程组(每个测试每个线程只运行一次), 但是现在用户更灵活地使用一只控制器。
对于测试,需要一个登录,请考虑将登录请求的控制器,因为每个线程只需要 建立一个会话登录一次。
截图曾经只有控制器的控制面板
在本例中,我们创建了一个测试计划,有两个线程发送HTTP请求。 每个线程发送一个请求到主页,紧随其后的是三个请求到错误页面。 虽然我们配置了线程组三次迭代,每个JMeter线程 发送一个请求到主页,因为这请求住在一个曾经只有控制器。
图5。 曾经只有控制器的例子
每个JMeter线程将按照以下顺序发送请求:主页,错误页面, 错误页面,页面错误。
注意,文件记者被配置为将结果存储在一个文件名为“ loop-test.dat “在当前目录。
曾经只有控制器下的行为以外的任何东西 线程组或一个循环控制器不是当前定义。 奇怪的事情会发生。
交错的控制器
如果你添加生成或逻辑控制器一个交错控制器,JMeter将每个之间的交替 为每个循环迭代其他控制器。
截图的交错控制器的控制面板
如果勾选此项,交错控制器将sub-controllers像单一请求元素和一次只允许一个请求/控制器。
没有
简单的交错示例
下载 这个示例(请参见图1)。在这个例子中, 我们配置线程组有两个线程,一个循环计数的五个,总共十个 每个线程的请求。 见下表顺序JMeter发送HTTP请求。
图1 -交错控制器示例1
循环迭代 |
每个JMeter线程发送HTTP请求 |
1 |
新闻页面 |
1 |
日志页面 |
2 |
常见问题页面 |
2 |
日志页面 |
3 |
阿甘的页面 |
3 |
日志页面 |
4 |
因为没有更多请求的控制器, |
4 |
日志页面 |
5 |
常见问题页面 |
5 |
日志页面 |
有用的交错的例子
下载 另一个例子(参见图2),在这 例子中,我们配置了线程组 单个线程和8的循环计数。 注意,测试计划有一个外交错控制器 两个交错控制器内。
图2 -交错控制器例2
外交错控制器之间的交替 两个内在的品质。 然后,每个内部交错控制器之间交替的每个HTTP请求。 每一个JMeter 线程将按照以下顺序发送请求:主页,交错,错误页面,交错,CVS页面,交错,FAQ页,交错。
注意,文件记者被配置为将结果存储在一个文件名为“ interleave-test2.dat “在当前目录。
图3 -交错控制器示例3
如果两个交错控制器主要交错控制器下而不是简单的控制器,然后顺序是:主页,CVS页面,交错,错误页面,FAQ页面,交错。
然而,如果“ 忽略副控制块 “检查主要交错控制器,然后顺序是:主页,交错,错误页面,交错,CVS页面,交错,FAQ页,交错。
^
随机的控制器
随机逻辑控制器行为类似于交错控制器,除了 而不是为了通过其sub-controllers和取样器,它选择 随机在每个通过。
多个控制器之间的相互作用可以产生复杂的行为。 随机控制器的尤其如此。 实验之前,你认为 任何给定的交互会给什么结果
截图的随机控制器的控制面板
参数
属性
描述
要求
的名字
描述性名称显示了这种控制器的树。
没有
忽略副控制块
如果勾选此项,交错控制器将sub-controllers像单一请求元素和一次只允许一个请求/控制器。
没有
^
随机顺序控制器
随机顺序控制器就像一个简单的控制器,它将执行每个孩子 元素最多一次,但节点的执行顺序是随机的。
截图的随机顺序控制器的控制面板
参数
属性
描述
要求
的名字
描述性名称显示了这种控制器的树。
没有
^
流量控制器
这个控制器是严重的命名,因为它不能控制的吞吐量。 请参考 常数吞吐量计时器 为一个元素,可以用来调整吞吐量。
流量控制器允许用户控制执行的频率。 总共有两种模式-百分比执行和执行。
百分比执行
使控制器执行一定比例的迭代测试计划。
总执行
使控制器停止执行一定数量的处决后发生。
像一只控制器,这个 当父母循环控制器启动时设置重置。
截图的吞吐量控制器的控制面板
流量控制器可以产生非常复杂的行为与其他控制器相结合,特别是与交错或随机控制器作为父母(也非常有用)。
参数
属性
描述
要求
的名字
描述性名称显示了这种控制器的树。
没有
执行风格
控制器是否在执行百分比或全部执行模式下运行。
是的
吞吐量
一个数字。 百分比执行模式,从一个数字 0 - - - - - - 100年 显示的百分比乘以控制器将执行。 ” 50 ”是指控制器将执行在迭代通过测试计划的一半。 总执行模式,显示的总数乘以控制器将执行。
是的
每个用户
如果勾选此项,每个用户将导致控制器计算是否应该执行在每个用户(每个线程)的基础上。 如果不加以控制,那么计算将全球所有用户。 例如,如果使用总执行模式,取消“ 每个用户 ”,然后给定数量的吞吐量将死刑的总数。 如果“ 每个用户 “检查,然后执行的总数将用户的数量乘以给吞吐量。
没有
^
运行时控制器
运行时控制器控制它的孩子被允许运行多久。
截图的运行时控制器的控制面板
参数
属性
描述
要求
的名字
描述性名称显示了这种控制器的树,和使用事务。
是的
运行时间(秒)
在几秒钟内所需的运行时
是的
^
if控制器
如果控制器允许用户控制是否它下面的测试元素(孩子)运行。
默认情况下,这个条件是评估初始入口只有一次,但你可以选择把它用来评估每一个可运行的元素包含在控制器。
脚本可以处理作为一个变量表达式,而不需要Javascript。 它总是可以使用Javascript函数和变量的条件下,只要他们评估” 真正的”或“ 假 ”; 现在可以不使用Javascript的开销。 例如,以前可以使用条件: $ { __jexl($ { VAR } = = 23)} 这将被评估 真正的 /假 ,结果将被传递给Javascript 它将返回 真正的 / 假 。 如果变量表达式选项被选中时,那么表达式进行求值 并与“ 真正的 ”,而无需使用Javascript。 另外,变量表达式可以返回任何值,而 Javascript条件必须返回” 真正的 “/” 假 ”或者记录一个错误。
没有变量条件时可用脚本解释为Javascript。 如果你需要访问这些变量,然后选择“ 条件解释为变量表达式? “和使用 一个__javaScript() 函数调用。 然后,您可以使用对象” var ”、“ 日志 ”、“ ctx 在脚本中”等。
测试如果未定义的变量(或null)做以下假设变量命名 myvar# 表达式将:
"${myVar}" == "${myVar}"
或者使用:
"${myVar}" != "${myVar}"
为了测试定义一个变量,而不是null。
如果控制器的控制面板的屏幕截图
例子(Javascript)
- $ {数} < 10
- " $ { VAR }”= =“abcd”
- $ { JMeterThread.last_sample_ok } (检查最后的样品是否成功)
如果有一个错误解释的代码,假定为条件 假 消息,登录 jmeter.log 。
例子(变量表达式)
- $ { __jexl($ {数} < 10)}
- $ {结果}
^
而控制器
而控制器运行它的孩子,直到条件” 假 ”。
可能的条件值:
- 空白——最后一个示例循环失败时退出循环
- 去年 ——最后一个示例循环失败时退出循环。 如果之前的最后一个示例只是循环失败,不进入循环。
- 否则——退出时(或不输入)循环条件等于字符串“ 假 ”
条件可以是任何变量或函数,最终等于字符串” 假 ”。 这允许使用JavaScript,BeanShell、属性或变量。
注意,条件是评估两次,一次采样前的孩子,一次在儿童抽样,所以把 在条件(如非幂等功能 __counter )可以引入问题。
例如:
- $ { VAR } ——在那里 VAR 是由其他测试元素设置为假
- $ { __javaScript($ { C } = = 10)}
- $ { __javaScript(" $ { VAR2 } " = = " abcd ")}
- $ { _P(财产)} ——属性设置为“ 假 “别的地方
截图时控制器的控制面板
开关控制器
开关控制器就像 交错的控制器 在它运行的一个下属元素在每一次迭代,而是比 按顺序运行,控制器运行开关定义的元素的值。
开关值也可以是一个名称。
如果开关值的范围,它将运行第0个元素, 因此作为默认的数值例子。 它也运行如果第0个元素值是空字符串。
如果该值为非数字(非空),然后开关控制器查找 具有相同名称的元素(很重要)。 如果没有一个名字匹配,那么该元素命名为“ 默认的”(不重要)被选中。 如果没有违约,然后没有元素被选中时,控制器将不运行任何东西。
控制面板的开关控制器的截图
ForEach控制器
一个ForEach循环控制器通过一组相关变量的值。 当你将取样器(或控制器)一个ForEach控制器,每个样本(或控制器) 执行一次或多次,在每次循环变量的新值。 输入应包括的几个变量,每个扩展下划线和一个数字。 每一个这样的变量必须有一个值。 例如当输入变量的名字 inputVar 应该定义以下变量:
- inputVar_1 =温迪
- 查尔斯inputVar_2 =
- inputVar_3 =彼得
- inputVar_4 =约翰
注:“ _ “现在分隔符是可选的。
当返回的变量是作为“ returnVar ”,收集取样器和控制器根据ForEach控制器将被执行 4 连续两次, 返回变量有各自的价值观之上,然后可以用于采样。
它尤其适合与正则表达式后处理器运行。 这可以“创造”必要的输入变量的结果数据之前的请求。 通过省略“ _ “分隔符,ForEach控制器可用于循环组使用 输入变量 refName_g ,也可以遍历所有的团体比赛 通过使用一个输入变量的形式 refName_ $ { C } _g ,在那里 C 是一个计数器变量。
ForEach控制器如果不运行任何样品 inputVar_1 是 零 。 这将是如果没有返回的正则表达式匹配。
截图的ForEach控制器的控制面板
在本例中,我们创建了一个测试计划,发送一个特殊的HTTP请求 只有一次,将另一个HTTP请求发送到每一个环节,在页面上可以找到。
图7 - ForEach控制器的例子
我们配置一个线程的线程组和一个循环数的价值 一个。 你可以看到,我们添加了一个HTTP请求线程组 另一个HTTP请求ForEach控制器。
第一次HTTP请求后,添加一个正则表达式提取器,提取所有的html链接 返回的页面,并使他们的 inputVar 变量
在ForEach循环中,HTTP取样器添加哪些请求所有的链接都从第一个返回的HTML页面。
ForEach例子
这是 另一个例子 你可以下载。 这有两个正则表达式和ForEach控制器。 第一个匹配,但第二个不匹配, 所以没有样品是由第二个ForEach控制器
图8 - ForEach控制器例2
线程组有一个单线程和一个循环计数两种。
示例1使用JavaTest取样器返回的字符串” a b c d ”。
正则表达式提取器使用表达式 ( w) s 匹配一个字母后跟一个空间, 并返回这封信(不是空间)。 任何与字符串前缀匹配”inputVar ”。
ForEach控制器提取所有变量前缀” inputVar_ ”,并执行它 样本,通过变量中的值” returnVar ”。 在这种情况下它将设置变量值” 一个 ”“ b ”和“ c ”。
的 1 取样器是另一个Java取样器使用返回变量” returnVar “样品标签的一部分 随着取样器的数据。
示例2 , 正则表达式2 和 2 几乎是相同的,除了Regex已经改为“ ( w) sx ”, 这显然不匹配。 因此, 2 取样器将不会运行。
^
模块控制器
模块控制器提供了一种机制来代替测试计划片段到当前测试计划在运行时。
一个测试计划片段由一个控制器和所有的测试元素(取样器等)中包含它。 片段可以位于任何线程组,或 工作台 。 如果片段位于线程组,则可以禁用其控制器,防止正在运行的片段 除了模块控制器。 或者你可以将片段存储在一个虚拟线程组,和禁用整个线程组。
可以有多个片段,每一个都有不同的系列 取样器。 该模块控制器可以用于轻松切换这些只需选择多个测试用例 适当的控制器的下拉框。 这提供了方便快速、轻松地运行许多替代测试计划。
一个片段的名称是由控制器名称及其父母的名字。 例如:
Test Plan / Protocol: JDBC / Control / Interleave Controller (Module1)
任何 碎片模块所使用的控制器必须有一个唯一的名称 , 正如它的名字被用来找到目标控制器测试计划时重新加载。 出于这个原因,最好确保控制器从默认的名字是改变 -如上面的例子所示 否则重复可能意外时创建新元素添加到测试计划中。
截图模块控制器的控制面板
模块控制器与远程测试不应使用或非gui测试与工作台部件因为工作台测试元素并没有测试计划的一部分 jmx 文件。 任何这样的测试就会失败。
包括控制器
包括控制器被设计成使用一个外部jmx文件。 使用它,创建一个测试片段 下面的测试计划和添加任何所需的取样器,控制器等。 然后保存测试计划。 文件现在可以包含其他测试计划的一部分。
为了方便起见, 线程组 也可以添加外部JMX文件中用于调试目的。 一个 模块控制器 可以用来参考测试片段。 的 线程组 期间将被忽略 包括过程。
如果测试使用Cookie经理或用户定义的变量,这些应放置在顶层 测试计划,包括文件,否则不能保证工作。
此元素不支持变量/函数在文件名字段中。
但是,如果属性 includecontroller.prefix 定义, 内容使用前缀路径名。
当使用包括控制器和包括相同的JMX文件,确保你的名字包括控制器不同,以避免面对已知问题 错误 50898年 。
如果文件不能被发现的位置 前缀 + 文件名 ,那么控制器 尝试打开 文件名 相对于JMX启动目录。
截图,包括控制器的控制面板
事务控制器
事务控制器产生一个额外的 的样品的总时间采取措施执行嵌套的测试元素。
注意:当”的复选框 包括时间的计时器和张后处理器生成的样本 “检查, 控制器内的时间包括所有处理范围,而不仅仅是样品。
有两种操作模式:
- 添加额外的样品后,嵌套的样品
- 添加额外的样品作为父母的嵌套的样品
生成的示例包括所有次嵌套取样器默认扣除(自2.11年)定时器和处理时间的前/后处理器 除非复选框” 包括时间的计时器和张后处理器生成的样本 ”检查。 根据时钟分辨率,它可能略微超过个体采样+计时器的总和。 时钟可能蜱虫后控制器记录开始时间之前第一个示例开始。 最后同样。
生成的示例仅仅是如果所有使成功视为成功。
在家长模式中,单个样品仍然可以看到在树视图中侦听器, 但不再作为单独的条目出现在其他听众。 同时,使没有出现在CSV日志文件,但他们可以保存到XML文件。
在家长模式中,断言(等等)可以被添加到事务控制器。 但是默认情况下它们将被应用到单个样本和样本总体事务。 限制范围的断言,使用一个简单的控制器控制样本,并添加断言 简单的控制器。 父模式控制器正常目前不支持嵌套事务控制器的类型。
截图的事务控制器的控制面板
记录控制器
录音控制器是一个地方持有人指示代理服务器 记录样品。 在测试运行期间,它没有效果,类似于简单的控制器。 但在 记录使用HTTP(S)测试脚本录音机 默认情况下,所有记录样品 被保存在录音控制器。
截图记录控制器的控制面板
临界段控制器
临界段控制器确保其子元素(取样器/控制器等)将被执行 只有一个线程作为一个名叫锁将在执行之前的控制器。
截图的临界段控制器的控制面板
下图显示了一个示例使用临界区控制器,控制器确保下图2中至关重要的部分 :
- DS2 - $ { __threadNum } 一次只有一个线程执行吗
- DS4 - $ { __threadNum } 一次只有一个线程执行吗
测试计划使用临界区控制器