SoapUI REST + JSON模拟服务:如何在响应中从请求中返回数据?

时间:2018-10-24 09:16:23

标签: json groovy mocking soapui

我有一个SoapUI REST(即非SOAP)模拟服务,该服务返回POST请求的响应。 请求和响应都包含JSON内容。

目前,我可以让它返回静态响应,并且可以正常工作,但是我希望响应中的某些值可以从请求中动态获取。

因此,如果我有此要求:

 {
   "the_request":{
     "abc":"123",
 }

如何获得响应中的“ abc”?

调查使我相信我可以通过在响应中包含一个变量来做到这一点,例如:

响应:

 {
   "the_response":{
     "value_from_request":"${#MockResponse#Request#the_request#abc}",
     "other":"stuff",
 }

然后通过“脚本”选项卡实现脚本以在响应中填充变量。 然后如何用请求中的数据填充?

当前,SoapUI只是生成一个空值 "value_from_request":"",

在“脚本”选项卡中尝试使用了mockRequest.requestContent,但尚未找到如何从中获取“ 123”值的方法。

1 个答案:

答案 0 :(得分:0)

好吧,经过一些实验并将一些东西拼凑在一起,得出了结论。 提出答案,以帮助尝试类似方法的任何人。

因此,响应消息可以像下面这样简单地引用requestContext中的变量:

响应:

 {
   "the_response":{
     "value_from_request":"${the_value}",
     "other":"stuff",
 }

并且可以使用groovy脚本来解析JSON请求内容,并在requestContext中填充“ the_value”或您喜欢的任何内容:

// Parse the JSON request.
def requestBody = new groovy.json.JsonSlurper().parseText(mockRequest.getRequestContent())

// Set up "the_value" from the request message.
requestContext.the_value = requestBody.the_request.abc

// Bit of logging so can see this in the "script log" tab.
log.info "Value extracted from request: ${requestContext.the_value}"