2

我有这样的网络请求

    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)

现在的问题是我无法在循环中初始化 moreSamples 和 startIndex。我尝试了两种选择:

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

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

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

截屏:

在此处输入图像描述

4

3 回答 3

4

@bpsingh,

你能做以下事情吗:

  1. 在您的测试计划顶部添加 UserDefinedVariables 并使用两个定义的变量:moreSamples、startIndex(就像 @ant 已经建议的那样)

  2. 在 Download - PersistentSyncScope Sampler 下,您有两个正则表达式提取器,我假设您要在其中提取一些值并将其放在上面的这两个变量中。在 Download - PersistentSyncScope Sampler 下添加 BeanShellPostProcessor。

  3. 在 BeanShellPostProcessor 添加以下代码:

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

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

于 2012-07-09T20:25:20.460 回答
1

您是否必须从循环中初始化它们?添加这些怎么样User Defined Variables

在此处输入图像描述

或者你也可以从你的循环中做到这一点,它对你不起作用的原因是你忘记;在你的表达式后面加上分号:

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和用户定义的变量。你可以使用任何一个,我看到你有更多的用户定义变量,不需要那个。在测试开始时有一个。我仍然不清楚您的问题是什么以及您要达到的目标。

于 2012-07-09T08:17:56.087 回答
0

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

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

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

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

现在添加 while 循环并添加 Download - PersistentSyncScope Sampler 作为其子项。

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

于 2012-07-10T09:36:49.547 回答