JMeter随机变量元素无法识别上一步

时间:2016-10-07 06:14:09

标签: variables jmeter

TL;博士 当我使用在正则表达式提取器中创建的变量时,我无法在随机变量中将其用作最大值

详细说明:

  • 我的测试结构:
    • enter image description here
  • 我在正则表达式提取器中包含了变量my_test
    • 请求:获取//echo.getpostman.com/get?test=123
    • 正则表达式:
    • enter image description here
  • 然后我希望它在正则表达式提取器中用作最大值
    • enter image description here
  • 最后我可以提出要求:
    • //echo.getpostman.com/get?test=${rand}

不幸的是,我收到来自随机变量的错误 2016/10/07 07:52:41 ERROR - jmeter.config.RandomVariableConfig: maximum(${my_test}) must be > minimum1)

为什么不评估my_test

我已经尝试了${__javaScript(parseInt('${my_test}'))}但看起来它在我的变量初始化之前被评估了 2016/10/07 08:06:01 ERROR - jmeter.config.RandomVariableConfig: maximum(NaN) must be > minimum1)
如果我在用户定义的变量中的测试计划中初始化此变量,将使用该设置中的值 - 不会被正则表达式更新。

我知道我可以做//echo.getpostman.com/get?test=${__Random(0,${my_test})}
我很好奇如何将我的变量作为正则表达式提取器最大值的值传递。

3 个答案:

答案 0 :(得分:3)

随机变量是配置元素,它将在首先执行任何其他组件之前执行。

  

4.9执行顺序

     
      
  1. 配置元素
  2.   
  3. 预处理器
  4.   
  5. 计时器
  6.   
  7. 取样
  8.   
  9. 后处理器(除非SampleResult为空)
  10.   
  11. 断言(除非SampleResult为空)
  12.   
  13. 监听器(除非SampleResult为空)
  14.   

如果测试计划中有两个或更多个Config元素,那么它们将按照它们在测试计划中出现的顺序执行。

在此处检查执行顺序和范围: 请参阅4.9 7 4.10 Execution Order and Scope Rules

因此,首先评估第一个随机变量,然后评估Sampler,然后评估正则表达式提取器。

当您使用用户定义变量(另一个配置元素)时,您可能将它放在随机变量之前,因此它已经为您定义了“my_test”的值来计算表达式。但它不会覆盖您在正则表达式提取器中捕获的值。

解决您的问题(一个可能的解决方案):

您可以使用不同的线程组。在第一个线程组中,您捕获值,在第二个线程组中,您使用值。

  1. 连续运行线程组。
  2. 使用BeanShell Assertion通过setProperty捕获值。 (在第一个线程组中)
  3. 使用__property()(在线程组中)使用值
  4. https://www.blazemeter.com/blog/knit-one-pearl-two-how-use-variables-different-thread-groups

答案 1 :(得分:0)

一种可能性是您可以使用Beanshell Postprocessor将RegEx值写入变量名称。 之后,您可以将其用作$ {variable_name}

注意:Beanshell函数vars.get可用于获取正则表达式值,而vars.put可用于将其放入变量中。

答案 2 :(得分:0)

似乎Random Variable元素不评估变量,可能值得在JMeter Issue Tracker中创建问题

作为一种解决方法,您可以直接用__Random()函数替换它,如:

  • find_sum(...) - 如果您需要立即使用该值,请直接在您的网址中

    resolve: {
        resolveMap: function (MapService, $stateParams) {
            return MapService.getData($stateParams.lat, $stateParams.lon).then(function (rsp){console.log(rsp); return rsp; }).catch(function (err){console.log(err);}) 
         }
    }
    
  • ${__Random(1,${my_test},)} - 如果您需要将值存储到//echo.getpostman.com/get?test=${__Random(1,${my_test},)} 变量中

请参阅: