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

时间:2016-09-27 04:49:26

标签: jmeter jsonpath

我从Json Path exression

获得了这个过滤的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]

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

1 个答案:

答案 0 :(得分:2)

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

以下代码假定JMeter版本等于或高于3.0。对于早期的JMeter版本,您必须将Json-smart库放在JMeter Classpath

中的某个位置
  1. 在JSON Path PostProcessor之后添加Beanshell Assertion
  2. 将以下代码放入Beanshell断言“脚本”区域

    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断言将使父采样器失败

    Beanshell assertion in work

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