2012-07-09 41 views
2

循环变化的变量我有这样在的JMeter

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) 

现在问题的Web请求我不能初始化moreSamples和在了startIndex循环。 我尝试了两种选择:

  1. 让moreSamples并作为了startIndex用户定义的变量。现在我能够改变使用正则表达式提取它们的值,但无法使用的BeanShell PostProcessor中像这样的重新初始化它们在外环:

    vars.put("moreSamples","false") 
    vars.put("startIndex","0") 
    
  2. 让moreSamples和的startIndex为用户参数预处理while循环,但随后我无法使用正则表达式提取器分配它们的值。

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

截图:

enter image description here

+0

[我如何在这里提问?](http://stackoverflow.com/faq#howtoask) – 2012-07-12 14:58:19

回答

1

你必须从循环初始化它们?如何将这些添加到User Defined Variables

enter image description here

或者你可以从你的循环做得一样好,为什么它不为你工作的原因要么是你忘了分号;你的表达在事后(S) :

vars.put("moreSamples","false"); // ; <- was missing 
vars.put("startIndex","0"); // ; <- was missing 

我用BSF Sampler和它的工作对我来说(别忘了选择语言 - 如果你使用这个> BeanShell的)。这里是我的调试取样(相关部分):

START.HMS=101818 
START.MS=1341821898080 
START.YMD=20120709 
TESTSTART.MS=1341822195274 
moreSamples=false 
startIndex=0 

更新:

你不必同时使用BSF Sampler和用户定义的变量。你也可以使用,而且我看到你有更多的用户定义变量,不需要它。在你的测试开始时有一个。我仍不清楚你的问题是什么以及你想达到什么目的。

+0

但我不能使用正则表达式提取器分配它们的值。 – bpsingh 2012-07-09 08:20:54

+0

@bpsingh发布相关代码/屏幕截图,我或者其他人是如何知道这一事实的。不是魔术师Sir – ant 2012-07-09 08:26:45

+0

是的分号是一个问题,它仍然不起作用。我上传了我的循环的截图。我不知道在哪里添加beanshell代码,我已经在所有可以在截图中看到禁用的地方尝试过它。只有当它在两个循环之间添加一些其他采样器时(您可以看到禁用的PersistentSyncScope - Upload),并将beanshell代码作为后置/预处理器添加到此采样器中时才有效。 – bpsingh 2012-07-09 11:11:06

4

@bpsingh,

你可以做以下的事情:

  1. 你的测试计划的顶部添加UserDefinedVariables定义了两个变量: moreSamples,则startIndex(如@ant已经建议)

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

  3. 在BeanShellPostProcessor添加以下代码:

vars.put("moreSamples","${REGEX_EXTRACT1}"); 
vars.put("startIndex","${REGEX_EXTRACT2}"); 

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

+0

这不起作用,因为我已经在评论中告诉过 – bpsingh 2012-07-10 08:18:22

+0

@Bakir Jusufbegovic很不错方法+1 – ant 2012-07-10 08:30:37

0

其实这里的问题是我使用2循环,所有的答案都没有考虑到这一点。

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

我发现那么唯一的解决办法是运行下载 - PersistentSyncScope采样一次,并添加BSF预处理与以下脚本

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

现在添加while循环,并添加下载 - PersistentSyncScope取样器作为其子。

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