如何存储整个响应并使用Jmeter为下次休息呼叫更新它

时间:2018-06-14 18:27:32

标签: json jmeter jmeter-3.2

问题:如何提取整个restAPI响应并使用某些值对其进行修改,并使用更新后的响应进行后续休息调用。我正在使用Jmeter

问题场景:

我有一个POST电话:“/ check1 / id1 / post”
POST正文:

{ 
            "test":"rest",
            "check" :{ 
                       "id":1,
                       "name": "xyz"
                       "status":"updated"
                     }
         }

POST呼叫响应:

{ 
            "test":"rest",
            "check" :{ 
                       "id":2,
                       "name": "xyz"
                       "status":"updated"
                     }
         }

=============================================== ======================

问题:现在,我必须在下一个POST Call主体中使用整个上面的RESPONSE,如下所示,但是,我想将“id”值更新为2,然后需要POST休息调用。

REST CALL:------> “/ CHECK1 / ID2 /后”          POST BODY如下:------->

{{1}}

=============================================== ==============

有人可以请指导吗? ,我对如何解决这个问题一无所知?,我需要用Jmeter来解决这个问题。

2 个答案:

答案 0 :(得分:0)

您可以使用beanshellJSR223 PreProcessor

执行此操作

假设有效的JSON

{ 
            "test":"rest",
            "check" :{ 
                       "id":1,
                       "name": "xyz",
                       "status":"updated"
                     }
         }

以下是步骤

  1. 将JSR223预处理器添加到第二个帖子请求中。
  2. 将以下代码添加到预处理器

    导入groovy.json.JsonBuilder

    导入groovy.json.JsonSlurper

    def slurped = new JsonSlurper()。parse(prev.getResponseData())

    def builder = new JsonBuilder(slurped) builder.content.check.id ='2' vars.put( “POSTDATA”,builder.toPrettyString())

  3. 上面的代码将使用2更新ID值并将JSON存储在POSTDATA中,您可以使用${POSTDATA}发布JSON文件

    enter image description here

    在我的预处理器中,我使用prev.getResponseData()保存响应,这意味着此预处理器必须包含在第一个采样器旁边的采样器中。

    有关beanshell的更多信息请点击this link

答案 1 :(得分:0)

  1. 存储整个回复:

    • Regular Expression Extractor添加为您要捕获的请求的子项
    • 按如下方式配置:

      • 参考名称:任何有意义的内容,即response
      • 正则表达式:(?s)(^.*)
      • 模板:$1$
  2. 要将1替换为2,您可以选择${__strReplace(${response},1,2,)} <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Term Deposit Interest Calculator</title> <link rel="stylesheet" href="css/style.css" media="screen" type="text/css" /> <script> function validateform(){ var amount=document.myform.amount.value; var years=document.myform.years.value; var interst= document.myform.interst.value; if (amount==null || amount==""){ alert("Amount can't be blank"); return false; }else if (years==null || years==""){ alert("Years can't be blank"); return false; }else if (interest==null || interest==""){ alert("Interest can't be blank"); return false; } } </script> </head> <body> <div class="card"> <h3>Term Deposit Interest Calculator</h3><br> <form name = "myform" method="post"onsubmit="return validateform()"> <input type="text" name="amount" placeholder="Deposit Amount"><span id="num1"></span> <input type="text" name="years" placeholder="Number Of Years"><span id="num2"></span> <input type="text" name="interest" placeholder="Yearly Interst Rate"><span id="num3"></span> <input type="submit" name="submit" class="my submit" value="Total Amount"> </form> <div class="result"> </div> </div> </body> </html> <?php if (!isset($amount7032)) { $amount7032 = ''; } if (!isset($interest7032)) { $interest7032 = ''; } if (!isset($years7032)) { $years7032 = ''; } ?> 。请注意,您需要使用__strReplace() function安装Custom JMeter Functions捆绑包才能获得它。