用jmeter连接响应

时间:2017-02-01 21:15:54

标签: jmeter

我在谷歌尝试了很多,但没有找到任何解决方案。如果我错过了,那我很抱歉。

在Jmeter中,我在循环中运行相同的请求。对于' n'次数。对于每个请求,我需要提取json响应并将其传递给下一个请求。我能够提取最后一个请求的响应并将其保存到变量,然后传递给下一个请求。我使用了JSON Path Extractor。我还想出了使用BeanShell和JSR223前后处理器提取响应

这里的事情是我需要提取所有先前的响应数据并为下一个请求构建请求主体,而不仅仅是最后一个响应。请

我不想将提取的响应附加到文件,然后将数据传递给文件请求。

    Request1 (Requestbody:[]). Response1: Product A 
    Request2 (Requestbody: [Product A]). Response: Product B 
    Request3 (Requestbody: [Product A, Product B]. Response Product C 
    Request4 (Requestbody: [Product A, Product B, Product C]). Response: Product 
.. ... ..... 
Requestn (body: [Product A, Product B, Product C, Product D]....), response: no more products

请有任何想法

谢谢杰克

2 个答案:

答案 0 :(得分:0)

如果您需要根据以前的回复构建JSON Array,我建议您考虑使用JSR223 PostProcessor(假定为Groovy语言)和JSONBuilder类。

Groovy内置了JSON支持,因此您可以充分灵活地读取和编写任意JSON结构。

示例:

Groovy JSON Example

参考文献:

答案 1 :(得分:0)

嗯..什么要求。我想知道用例是什么。 :)我用LinkedList实现了这一点,并使用getObject和putObject在前后处理器之间来回传递对象。以下代码包含大量调试语句。请丢弃它们。你也可以优化它。

HTTP采样器      “BODY DATA”标签只有$ {request}

<强> - &GT; Beanshell预处理器

log.info("Entering preprocessor..");
LinkedList itemsArrayLocal = vars.getObject("itemsArrayLocal");

if ( itemsArrayLocal == null) {
    try {
        itemsArrayLocal = new LinkedList();
        //itemsArrayLocal.add("");      
        vars.putObject("itemsArrayLocal", itemsArrayLocal );
        vars.put("request", "(Requestbody:[" + ""  + "]");
    }
    catch (Exception e) {
        e.printStackTrace();
        log.info(e);        
    }
}
else {  
    String s = "";
        for ( int i=0; i < itemsArrayLocal.size(); i++) {           
            if ( i >= 1) {
                s = s + ",";
            }
            s = s + itemsArrayLocal.get(i).toString() ;
            log.info("i=" + String.valueOf(i) + s);
        }
        log.info("s=" + s); 
        vars.put("request", "(Requestbody:[" + s + "]");
}

<强> - &GT; Beanshell后处理器

log.info("Entering POST PROCESSOR..");
LinkedList itemsArrayLocal = (LinkedList) vars.getObject("itemsArrayLocal");
String o = prev.getResponseDataAsString().substring(2,10);
//log.info("o=" + o);
try {
    log.info("Added..");
    itemsArrayLocal.add(o);
    log.info("Size=" + String.valueOf(itemsArrayLocal.size()));
}
catch (Exception e) {
    e.printStackTrace();
    log.info(e);
}