代码之家  ›  专栏  ›  技术社区  ›  Julie Sheffield

Jmeter,而控制器似乎不将变量作为数字进行评估

  •  3
  • Julie Sheffield  · 技术社区  · 10 年前

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

    也许问题是XPath的输出是一个字符串,我尝试过在beanshell中执行各种操作,将其强制为一个数字,但我是一个beanshellnoob,所以我也没有成功。有人能指导我如何让jmeter将变量识别为数字吗?(最好是小数,但如果我必须四舍五入到整数,我可以接受。)

    谢谢

    2 回复  |  直到 10 年前
        1
  •  4
  •   Manish Sapariya    10 年前

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

    例如

    ${__javaScript(parseInt(${time_elapsed_string})<parseInt(${duration}))}

        2
  •  2
  •   Dmitri T    10 年前

    假设您有以下变量:

    • 当前大小
    • 最大大小
    • 持续

    哪里 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控制器的子级

    看见 How to use BeanShell 本指南提供了比恩谢尔烹饪书的更多细节和种类。

    一切都应该这样。

    希望这有帮助。