遍历 jmeter Json 路径中的数组值并断言每个值

loop through array values in jmeter Json path and assert each value

我从 Json 路径表达式

过滤了 JSON 响应

[40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,45,45,45,45,45,42,45,42,45,42,41,40,35,37,35,45,42,41,40,35,37,35,45,42,41,40,35,37,35,45]

我需要写一些断言,基本上断言这些值在一个范围内,例如:30 到 60 之间。 我没有得到任何关于如何在 jmeter 中断言这一点的指示。

JMeter 不提供适当的测试元素,因此您将不得不编写一些脚本。

以下代码假定 JMeter 版本等于或高于 3.0。对于早期的 JMeter 版本,您必须输入 Json-smart libraries somewhere in JMeter Classpath

  1. 在JSON路径后处理器
  2. 之后添加Beanshell Assertion
  3. 将以下代码放入Beanshell断言"Script"区

    import net.minidev.json.JSONArray;
    import net.minidev.json.parser.JSONParser;
    import org.apache.commons.lang.math.IntRange;
    
    
    String source = vars.get("yourVar");
    
    IntRange range = new IntRange(30, 60);
    
    JSONParser parser = new JSONParser(JSONParser.MODE_JSON_SIMPLE);
    JSONArray array = (JSONArray) parser.parse(source);
    for (int i = 0; i < array.size(); i++) {
        int value = (int) array.get(i);
        if (!range.containsInteger(value)) {
            Failure = true;
            FailureMessage = "Detected value: " + value + " is not in the expected range";
    
        }
    
    }
    

    如果发现超出给定范围的值,Beanshell 断言将使父采样器失败

有关使用脚本增强 JMeter 测试的更多信息,请参阅 How to Use BeanShell: JMeter's Favorite Built-in Component 文章。