Loops 在Jmeter中更改循环中的变量

Loops 在Jmeter中更改循环中的变量,loops,initialization,jmeter,Loops,Initialization,Jmeter,我有这样的网络请求 Loop Controller(3) moreSamples=true startIndex=0 While Controller(${__javaScript(${moreSamples}==true)}) SOAP/XML-RPC Request(index=${startIndex}) Regular Expression Extractor(startIndex=newIndex,moreSamp

我有这样的网络请求

    Loop Controller(3)
      moreSamples=true
      startIndex=0
      While Controller(${__javaScript(${moreSamples}==true)})
       SOAP/XML-RPC Request(index=${startIndex})
       Regular Expression Extractor(startIndex=newIndex,moreSamples=samples)
现在的问题是我不能在循环中初始化更多的样本和startIndex。 我尝试了两种选择:

  • 将moreSamples和startIndex作为用户定义的变量。现在我可以使用正则表达式提取器更改它们的值,但无法使用BeanShell后处理器在外循环中重新初始化它们,如下所示:

    vars.put("moreSamples","false")
    vars.put("startIndex","0")
    

  • 在while循环的预处理器中将moreSamples和startIndex作为用户参数,但是我无法使用正则表达式提取器为它们赋值

  • 请提出错误或一些新的结构,可以适应

    截图:


    您必须从循环中初始化它们吗?如何将这些添加到用户定义的变量中

    或者你也可以从你的循环中完成,它对你不起作用的原因要么是你忘了放分号
    在表达式之后:

    更新:

    您不需要同时使用
    BSF Sampler
    和用户定义的变量。您可以使用其中任何一个,我看到您有更多的用户定义变量,不需要这样做。在测试开始时,使用其中一个。我仍然不清楚你的问题是什么,你在努力实现什么。

    @bpsingh

    你能做到以下几点:

  • 在测试计划顶部添加UserDefinedVariables,其中包含两个已定义的变量: 更多样本,startIndex(如@ant已建议)

  • 在Download-PersistentSyncScope采样器下,您有两个正则表达式提取器,我假设您想在其中提取一些值,并将其放在上述两个变量中。在下载-PersistentSyncScope采样器下添加BeanShellPostProcessor

  • 在Beanshell后处理器中添加以下代码:


  • 这两个(moreSamples,startIndex)是全局变量,它们的变化应该在循环外部可见。

    实际上,这里的问题是我使用了两个循环,所有答案都没有正确考虑到这一点

    由于前置/后置处理器仅应用于采样器,而不应用于循环,因此无法在循环之前重新初始化变量。所以,若我在预处理器中添加initialize语句,循环将无限运行,若在后处理器中,它将永远不会执行。唯一的初始化方法是在while循环之前添加BSF采样器,但这会破坏报告,因为侦听器也会记录此采样器

    因此,我找到的唯一解决方案是运行一次下载-PersistentSyncScope采样器,并使用以下脚本添加BSF预处理器

    vars.put("moreSamples","false");
    vars.put("startIndex","0");
    
    现在添加while循环,并添加Download-PersistentSyncScope采样器作为其子级


    这是迄今为止唯一的解决办法。感谢大家帮助我理解这个问题。

    但是我无法使用正则表达式提取器为它们赋值。@bpsingh发布相关代码/屏幕截图,我或任何人是如何知道这个事实的。不是魔术师SirYes分号是一个问题,它仍然不起作用。我上传了我的循环的截图。我不知道在哪里添加beanshell代码,我已经在所有你在截图中看到被禁用的地方尝试过了。只有在我在两个循环之间添加其他采样器(您可以看到已禁用的PersistentSyncScope-Upload)并将beanshell代码作为post/预处理器添加到此采样器时,它才会起作用。@b Singh我没有看到屏幕快照实际上我无法上传它,因为我是stackoverflow的新手,所以把它添加到你的答案中,它是在说谢谢你的编辑!只有经过同行评审后,此编辑才会对您可见。我想你可能得复习了it@Bakir朱苏菲贝戈维奇尼斯进近+1
    START.HMS=101818
    START.MS=1341821898080
    START.YMD=20120709
    TESTSTART.MS=1341822195274
    moreSamples=false
    startIndex=0
    
    vars.put("moreSamples","${REGEX_EXTRACT1}");
    vars.put("startIndex","${REGEX_EXTRACT2}");
    
    vars.put("moreSamples","false");
    vars.put("startIndex","0");