Jmeter而控制器似乎并没有将变量评估为数字

时间:2014-03-24 22:20:10

标签: xpath jmeter beanshell

我正在编写一个jmeter脚本,它一直在加载数据,直到表达到指定的大小。我有一个while循环,其中我有一个HTTP Sampler来加载数据,然后是另一个带有XPath后处理器的HTTP Sampler来检查表大小(它们调用两个不同的API)。 XPath后处理器的引用变量是currentSize,我有一个用户定义的变量maxSize,但使用$ {currentSize}< $ {maxSize}作为while循环的条件创建一个无限循环。

想想也许问题是XPath的输出是一个字符串,我已经尝试在beanshell中做各种事情来强制它到一个数字,但我是豆壳菜鸟,所以我没有'这也是成功的。任何人都可以指导我如何让jmeter将变量识别为数字? (最好是小数,但如果我必须舍入到int,我可以忍受。)

谢谢!

2 个答案:

答案 0 :(得分:4)

我认为使用__javascript(parseInt())应该足以检查条件。

e.g。

$ {__ javaScript(parseInt($ {time_elapsed_string})< parseInt($ {duration}))}

答案 1 :(得分:2)

假设您有以下变量:

  • currentSize
  • MAXSIZE
  • 继续

其中continue通过User Defined Variables设置,其值为true

您可以使用以下Beanshell代码检查当前大小是否等于或大于最大大小:

import java.math.BigDecimal;

String currentSize = vars.get("currentSize");
String maxSize = vars.get("maxSize");

BigDecimal currentSizeNumber = new BigDecimal(currentSize);
BigDecimal maxSizeNumber = new BigDecimal(maxSize);

if (currentSizeNumber.compareTo(maxSizeNumber) > -1){
    vars.put("continue", "false");
}

确保符合以下条件:

  1. 您的While Controller有${continue}作为条件
  2. 带有上述代码的Beanshell采样器,前/后处理器或断言作为While Controller的子级添加
  3. 有关Beanshell食谱的更多详细信息和种类,请参阅How to use BeanShell指南。

    一切都应该以这种方式运作。

    希望这会有所帮助。