Jmeter逻辑控制器

 

标签(空格分隔): Jmeter


Loop Controller 循环控制器

指定其子节点运行的次数,可以使用具体的数值,也可以使用变量 image_1csakaclrocj1akdduslrkmpl9.png-38.7kB

  • Foever选项:勾选表示一直循环,不勾选需要指定循环次数

If Controller if控制器

if控制用来控制器子节点是否运行。 默认情况下,条件仅在初始条目时计算一次,但您可以选择对控制器中包含的每个可运行元素进行评估。

如果使用javascript作为判断条件,将会降低性能

image_1csb0b9is182ddici62nibo5c9.png-41.6kB

  • Condition (default JavaScript): 默认情况下 输入的条件会被解释为返回trueflase的avaScript代码,但是这个条件可以被覆盖。
  • Interpret Condition as Variable Expression?:将条件语句解释为表达式
    • 勾选:讲条件语句解释为表的式,条件是语句使用__jex3转移,不是必须
    • 不勾选:将条件语句解释为javaScript(默认勾选)
  • Evaluate for all children :
    • 勾选:如果选中这一项,在每个子结点执行前都会计算表达式。
    • 不勾选:尽在初始的时候计算该表达式。

实例1:条件语句被解释为javaScript image_1csb4bj4locd1govr1717mt595m.png-30kBimage_1csb4cjfc12v41vu2ni61r3g163s13.png-5.3kB 实例2:条件语句为表达式 image_1csb4g20q1n6psfe12rj1gpg97t2d.png-3.6kB image_1csb4fnhte391vt5j6nmp5n8a20.png-35.5kBimage_1csb4gebjda0vrs1ffd1kql11pk2q.png-5.7kB

实例3:只在初始化判断if条件

image_1csb8fl43113ofjekh3d551kru49.png-68.7kB image_1csb8gmvg1v5u1qb31pjvipl3hg4m.png-21.2kB

实例4:每个子节点运行前都进行判断 image_1csb8ia3c123l1o4ova81glq1aj353.png-15.4kB

While Controller 无限循环控制器

无限循环执行子节点,直到判断条件为False image_1csb8u9uj13jc1rclgd21g7p4oc5g.png-15.9kB

  • Condition
  • blank(空):无限循环,直到子节点中的的样本出现失败
  • LAST:当循环执行前有样本执行失败不进入循环
  • Otherwise:当判断条件为False的时候停止循环

实例1 无限循环,样本出现失败终止执行 image_1csba5qsb2ca1uup1lia1ms2npua7.png-11.9kB image_1csba2bo11qgi1osu125n1q12cb7q.png-85.1kB

** 实例2 循环前样本执行失败** image_1csba83qk15bu1g8bp271v0b1c5tak.png-11.2kB 循环执行前样本没有失败,正确进入循环 image_1csba8fumgam1d1g1p86114k1bkqb1.png-30.2kB 循环执行前样本有失败,不进入循环 image_1csbaa57v1fvs1j6f1ju21k111su3be.png-30.7kB

ForEach Controller ForEach 控制器

循环控制器,循环控制器控制循环,和编码中的for循环类似

image_1csbbiki2vo6rm516cn1be81j4ucu.png-21.5kB

  • Input variable prefix(非必须) :输入变量前缀,循环控制器可以从中获取到变量对应的值,然后作为循环控制器的循环条件,还可以输出变量作物取样器参数
  • Start index for loop(非必须):循环变量的开始下标
  • End index for loop(非必须):循环变量的结束下标
  • Output variable(非必须):输出的变量,循环控制器生成的的变量名称
  • Use Separator(非必须):是否使用分隔符,变量前缀是否加“_“作为分隔符

实例1

  • 请求jmeter.apache.org/demos网页,通过正则提取器获得例子名称 image_1csd5f74f1570jkr15vs14im13m49.png-43.8kB
  • for循环中使用正则中提取的变量。进行变量输出 image_1csd5l2mi1nf2rerkp41tgukhh26.png-70.8kB
  • 执行结果 image_1csd5mnev1b1m1rgc1nl10pi3b62j.png-100.7kB

Once Only Controller 仅一次控制器

仅一次控制器,也就是改控制器下的子原件只运行一次,即使把仅一次控制器放在循环控制器下面,也只是运行一次。线程组循环仅一次控制器也是只执行一次。类似于locust on_start image_1csdhmls01loe1dd4pggr6pdqi60.png-8.5kB

** 实例1 循环控制器内执行仅一次控制器**

image_1csdhetsfhhl1tlm7viaesbai30.png-7kB image_1csdhfcrr19s1q4k1brl1q5fiv53p.png-143.8kB

实例2 循环线程内执行仅一次控制器 image_1csdhjkd61jb616j31prp1v74120j49.png-6.7kB image_1csdhjs2qp5786g58h1f2kc2h4m.png-16.3kB

Interleave Controller 交替控制器

交替执行子节点内的元件。 image_1csdid0nd6ni1vu54jtpgkmdd6q.png-12.3kB image_1csdhpfdjlac11l5lmb1si43s66d.png-12.4kB

  • ignore sub-controller blocks(非必须):忽略子控制器,即子控制器失效,由交替控制器接管。每次只执行子控制器内的一个请求。
  • Interleave across threads(非必须):跨线程进行替换,如果勾选,交替控制器会操作所有线程。

实例1 交替执行请求

  • 交替执行控制器下包含请求1,请求2,请求3 image_1csdiiit61m436di1sgc15l61a2o77.png-6.5kB image_1csdiitq117mp1asqiicaib28p7k.png-32.6kB

实例2 忽略交替控制器下的子控制器逻辑

  • 交替执行控制器下包含请求1,请求2,请求3,仅一次控制器
  • 仅一次控制器下包含请求4 image_1csdiseikj201a0g1aup18f8c7n81.png-8.6kB 不勾 ignore sub-controller blocks image_1csdj5tu95t1phb1tb71vmag5t8u.png-16.3kB 忽略子控制逻辑 勾选 ignore sub-controller blocks image_1csdj8bhf1oa015cl123bjsernpat.png-11.6kB 执行结果 image_1csdlthdm8031ii2gso1knk1detbq.png-25.8kB 这里有点看不懂了,只执行了7次,个人理解应该是1-2-3-4 1-2-3-4的执行 在仅一次控制器下面添加了请求5。不勾选ignore sub-controller blocks 执行结果 image_1csdm8qpau7n1t0h1r821r3ecn5c7.png-33.7kB 勾选ignore sub-controller blocks执行结果 image_1csdme2s5irq1m2c4up65v9vmj6.png-15.1kB 感觉这里有bug 添加一个循环控制器,添加子元件请求6 不勾选ignore sub-controller blocks 执行结果 image_1csdnnh3l13dvn4jpknu2prn5l3.png-32.8kB 勾选ignore sub-controller blocks 执行结果。循环控制器的执行结果和预期一致
  • image_1csdnpi4v1b0utlmevs1jng1ogdm0.png-32.8kB

实例3 跨线程进行替换的效果

  • 线程数量4
  • 循环次数1
  • 元件和以上实例一直 不勾选 Interleave across threads 执行效果 image_1csdpj7r41i3htl9qe21p3f17m99.png-55.8kB 勾选 Interleave across threads 执行效果 image_1csdpkvgb14n9eidgs1lrou12m.png-56.3kB

Random Controller 随机控制器

和交替控制器类似,但是随机控制是随机选取子节点的原件进行执行 image_1csdo079ajeckjaunin8l9a7nd.png-12.9kB

  • ignore sub-controller blocks(非必须):忽略子控制器,即子控制器失效,由交替控制器接管。每次只执行子控制器内的一个请求。

实例1 ignore sub-controller blocks的作用

  • 随机控制器下有请求1,2,3,循环控制器,循环执行3次
  • 循环控制器下包含请求4

不勾选 ignore sub-controller blocks 执行结果 image_1csdo825aeug1a4t1e2ot1j4l1qg.png-34.1kB 勾选 ignore sub-controller blocks 执行结果 image_1csdobvn91h3o1hkf1pvd1b3m17k1qt.png-31.8kB

Random Order Controller 随机顺序控制器

和随机控制器类似,但是会执行所有子节点,但是顺序随机

实例1

  • 一个线程,循环10次
  • 随机顺序控制器在下包含请求1,2,3

image_1csdqb8usl9hbnkglmuovstc13.png-34.5kB

Throughput Controller 吞吐量控制器

控制其下的子节点的执行次数与负载比例分配,包含一下两种分配方式

  • Percent executions : 设置运行比例
  • Total executions : 设置运行次数
  • Per user :勾选基于线程执行,勾选基于全局执行

实例1 设置执行次数

  • 两个吞吐量控制器,每个吞吐量控制器包含一个请求,执行次数为3,5 image_1csdr4lpovi6q701ebb2mk1kgq1g.png-8.6kB image_1csdr5trg90012haaj11odgqtl1t.png-5.9kB

  • 实例2 执行比例

  • 两个吞吐量控制器,每个吞吐量控制器包含一个请求,比例6:4

image_1csdrmovf6eq1j1e17ae8tg18763q.png-18.1kB

Runtime Controller 运行时控制器

用来控制子元件的执行时长。 ![image_1csdt18e98fe1nbq1lhe7p0mlc47.png-10kB]

  • Runtime (seconds) 期望运行的时长,0为不执行

Switch Controller 开关控制器

Switch控制器通过给该控制器中的Value赋值,来指定运行哪个采样器。

  • Switch Value 赋值方式
  • 序号赋值 Switch控制器下的子节点从0开始计数,通过指定子节点所在的位置来确定执行哪个元素
  • 指定子元素的名称,比如采样器的Name来进行匹配。当指定的名称不存在时,不执行任何元素。

image_1csdtpgaj1kdjqd813v0tdu1ud69a.png-8.7kB image_1csdtp7jk18eu15uebqa1fp888t.png-3.8kB

image_1csdtqen4dm0hge1v8jiess4lan.png-8.9kB image_1csdtr982igqr271751lhfafoc4.png-4.7kB

Module Controller 控制器

用于跳转到选定的控制器位置并执行对应的控制器,主要用来业务逻辑的跳转 image_1cslbuml61bnknig1n7f1a8i1jk49.png-49.7kB

  • Module to Run: 需要运行的模块,在下拉列表中选出需要运行的模块。 下拉列表列出了测试计划及工作台包含的控制器。

实例1 在 Module控制器中 Model To Run 选中 Random Order Controller(该控制器在测试计划汇总处于禁用状态)执行侧计划。

image_1cslc63bt14fq6njbkjf4k13371m.png-144.1kB

image_1cslcd8hu1ei4bhph71mfr1bj22j.png-6.6kB

任何一个模块所用的控制器名字必须唯一,因为其名字被用来找到目标控制器时重新加载;出于这个原因,最好保证控制器名字不同,否则执行测试时候可能发生意外

Include Controller 导入控制器

用来导入外部的的测试片段。导入的外部测试片段的是不包含线程组的,如果导入的是一个完整的测试计划该测试无法被执行。

image_1csldb8771hccpr2rjk145mlo54f.png-12.7kB

  • Filename 要导入的测试计划。

实例1

  • 新建一个测试片段 新建文件-右击测试计划-点击测试片段(Test Fragment),测试片段下添加循环控制器循环10次,循环控制器下添加http请求,请求百度,保存导入使用 image_1csle3gicb6doosiir1s2t46o4s.png-67.3kB image_1csle7tar7nb19qvcu0c7ptd85p.png-64.2kB
  • 将新建的测试片段导入到导入控制器中,执行 image_1cslebr0ua0bjl41bbr127a2666.png-15.4kB 执行结果 image_1cslekikdn8d1f3shaf15ecvp66j.png-134.4kB 导入一个包含线程组的元件看看效果,在测试片段的jmx中新建一个线程组 image_1cslf0gork629d619sck4216328d.png-69.4kB保存后返回到导入控制器的测试计划中执行,看看结果 image_1cslf3atnehe1raa121r1r517om8q.png-7.9kB 线程组没有被执行。通常情况下我们可以在测试片段中引入测试计划进行调试

Transaction Controller 事务控制器

事务控制器生成一个额外的样本,用于测量执行嵌套测试元素所花费的总时间,事务控制器可以把其节点下的取样器执行消耗时间累加在一起,便于我们统计。如果事务控制器下的有多个取样器,那么只有每一个取样器都运行成功了,整个事务控制器的事务才能算是成功。

image_1csli7co116fq17g21od5116b5dsj1.png-16.1kB

  • Generate Parent Sample 选择是否生成一个父取样结果。不勾选的情况下生成独立样本,勾选的化生成的样本作为其他样本父项。
  • Include duration of timer and pre-post processors in generated sample 是否包含定时器设定的延迟时间,选择后测试结果统计的响应时间将包含样本请求前后的的延迟时间。

实例1,Generate Parent Sample

  • 样本内容
    • 事务控制器下添加请求1 请求2
    • 线程循环次数10
    • 添加汇总报告

image_1cslk1pc21l6j1b9q11bo17t58gclo.png-5.2kB 不勾选 Generate Parent Sample 查看执行结果 image_1csljlrgaa451pj925hobi3b0je.png-43kB同时生成了 Transaction Controller(事务),请求1,请求2的结果

勾选 Generate Parent Sample 查看执行结果 image_1csljtarjedsin68lm1gmem3ujr.png-35kB只生成 Transaction Controller(事务)结果

实例2 Include duration of timer and pre-post processors in generated

  • 样本内容
    • 事务控制器下添加请求1 请求2,固定延时器,延时时间为2s.
    • 线程循环次数10
    • 添加汇总报告

image_1cslk4atb139i1klarii39hbr8m5.png-6.5kB

不勾选 Include duration of timer and pre-post processors in generated 查看执行结果 image_1cslk9tu1ehj131tth1la11jq8oi.png-42kB勾选 Include duration of timer and pre-post processors in generated 查看执行结果 image_1cslker2q16g816ka150p1qdf1citpf.png-26.6kB对比两个结果 发现勾选后事务的响应时间为`2s+请求1的相应时间+2s+请求2的相应时间。一般情况下我们不勾选

Simple Controller 简单控制器

简单控制器用来指定了一个执行单元(封装的作用?)他不改变元件的执行顺序,在他下面可以嵌套其他控制器。简单控制器只有两个可变属性名称注释。因为不存在什么逻辑的东西,就不举例了。

Critical Section Controller 临界区控制器

确保它的子元素(samplers /控制器等)在执行控制器的子程序之前只执行一个线程作为指定的锁。 image_1csnj6oqdnlv4978mj1bb1ldf9.png-11.3kB

-Lock Name 锁的名称,唯一值。

Recording Controller 录制控制器

使用代理服务器是使用 具体看如下链接 https://www.testwo.com/blog/7299

posted @ 2019-06-11 16:35  小鱼儿_summer  阅读(707)  评论(0编辑  收藏  举报