zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    AcWing 1027. 方格取数 dp
    AcWing 1014. 登山 dp
    acwing 482. 合唱队形 dp
    LeetCode 1463. 摘樱桃II dp
    LeetCode 100. 相同的树 树的遍历
    LeetCode 336. 回文对 哈希
    LeetCode 815. 公交路线 最短路 哈希
    算法问题实战策略 DARPA大挑战 二分
    算法问题实战策略 LUNCHBOX 贪心
    AcWing 1100. 抓住那头牛 BFS
  • 原文地址:https://www.cnblogs.com/summerxye/p/11004462.html
Copyright © 2011-2022 走看看