JMeter

时间:2017-06-28 10:49:54

标签: json jmeter vaadin

目前我正在尝试从Vaadin json响应中提取字段ID以检测所有组合框(RTFComboBox)并进一步处理它们。示例响应(减少):

for(;;);[{
    "syncId": 113,
    "clientId": 113,
    "changes": [],
    "state": {
        "1273": {
            "caption": "",
            "styles": ["tokenfield", "tokentextfield"]
        },
        "1274": {
            "styles": ["RTFTokenField"]
        },
        "1275": {
            "width": "185.0px",
            "immediate": true,
            "styles": ["RTFTokenField", "RTFComboBox", "tiny"],
            "registeredEventListeners": ["focus"]
        }
    }
}]

我需要的是获取ID号(这里是1275),我可以处理“for(;;)”垃圾,但我无法提取正确的id值。我试图使用Regex Extractor,但这个解决方案不是很灵活(或者我只是不能写出正确的表达式)。

当样式子数组包含'RTFComboBox'时,如何获取父ID的任何想法?也许这里需要一些比JMeter的JSON Extractor更复杂的解决方案,例如groovy中的一些脚本?

2 个答案:

答案 0 :(得分:0)

我建议,在beanshell处理器中编写一个groovy脚本,解析JSON然后获取状态对象的所有键。这是代码片段,请确保在JMETER_HOME / lib文件夹中添加java-json.jar

    try {

        String jsonString = prev.getResponseDataAsString();
        JSONArray jsonArray =  new JSONArray(jsonString);
        JSONObject object = jsonArray.getJSONObject(0);
        JSONObject states = object.getJSONObject("state");
        String keys[] = states.getNames(states);

        for(int i=0; i< keys.length; i++) {
            log.info(keys[i]);
        }

    } catch (JSONException e) {
        e.printStackTrace();
    }

答案 1 :(得分:0)

我终于使用JsonSlurper制作了它,这是我的JSR223 PostProcessor脚本:

import groovy.json.JsonSlurper
def jsonSlurper = new JsonSlurper()
def response = jsonSlurper.parseText(prev.getResponseDataAsString().drop(8))
//drop to remove for(;;); junk preventing proper parse
def map = [:]
response.state[0].each {k, v -> if(v.styles != null && v.styles.contains("RTFComboBox")) {map.put(k, v)}}
//map contains key (field id-most important to me) and key (rest of values in node)

如果你需要一些特定的值,只需在map.put line set v.field中,即:

  

map.put(k,v.immediate)