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

JMeter Beanshell Assertion: How do I save the value of Runtime.getRuntime().exec("ifconfig | grep \"${IpAddress}\" | wc -l")?

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

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

我在 return 中一无所获!关于如何保存(并稍后检索)此命令输出的值有什么想法吗?

  1. 你基本上通过 pipe:

    执行了 3 个命令
    • ifconfig
    • grep
    • wc

      它只能在 Linux SHELL 中工作,因此您需要将命令修改为:

      /bin/bash -c ifconfig | grep \"${IpAddress}\" | wc -l
      
  2. 您将 JMeter 变量引用为 ${IpAddress} 这不是很好的做法,因为它们可以解析为导致编译失败的内容。考虑对 JMeterVariables class 实例使用 vars shorthand 而不是像 vars.get("IpAddress")

  3. 您没有使用最好的测试元素,starting JMeter 3.1 it is recommended to use JSR223 Elements and Groovy language 用于任何形式的脚本。

假设以上所有我会推荐使用 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
}