首页 > 解决方案 > JMeter Beanshell 断言:如何保存 Runtime.getRuntime().exec("ifconfig | grep \"${IpAddress}\" | wc -l") 的值?

问题描述

我的 shell 命令ifconfig | grep \"${IpAddress}\" | wc -l返回01在终端内运行时返回。我需要使用 JMeter 做同样的事情并相应地断言(0失败,1通过)。但是当我这样做时:

Runtime.getRuntime().exec("ifconfig | grep \"${IpAddress}\" | wc -l");

我什么也得不到!关于如何保存(并稍后检索)此命令输出的值的任何想法?

标签: bashjmeterbeanshell

解决方案


  1. 您基本上是通过管道执行 3 个命令:

    • ifconfig
    • grep
    • wc

      它只能在Linux SHELL内工作,所以你需要修改你的命令看起来像:

      /bin/bash -c ifconfig | grep \"${IpAddress}\" | wc -l
      
  2. 您指的是 JMeter 变量,${IpAddress}这不是很好的做法,因为它们可以解决导致编译失败的问题。考虑使用JMeterVariables类实例vars的简写,而不是像vars.get("IpAddress")

  3. 您使用的不是最好的测试元素,从 JMeter 3.1 开始,建议对任何形式的脚本使用 JSR223 Elements 和 Groovy 语言。

假设以上所有,我建议使用JSR223 Assertion和如下代码:

String response = org.apache.commons.lang3.StringUtils.normalizeSpace(['/bin/bash', '-c', 'ifconfig | grep \"' + vars.get('IpAddress') + '\" | wc -l'].execute().text)
if (response.equals("1")) {
    //do what you need here
}

推荐阅读