【问题标题】:Soapui manipulation of json responseSoapui 操纵 json 响应
【发布时间】:2016-01-06 20:46:14
【问题描述】:

我正在使用 SoapUI 来测试 RESTful Web 服务。 我有一个测试步骤,它返回一个 json 响应,如..

{
  "createdUser": "CRINFO",
  "createdDate": 1254413167000,
  "updatedUser": "62041",
  "updatedDate": 1452105085000,
  "sourceSystem": "CIS",
  "versionNumber": 47,
  "crimeNo": "000037P/09",
  "furtherInvestigation": false

}

我希望在下一个测试步骤请求的正文中使用此响应,但我想先操作一些属性。 例如将进一步调查属性设置为 TRUE。

{
      "createdUser": "CRINFO",
      "createdDate": 1254413167000,
      "updatedUser": "62041",
      "updatedDate": 1452105085000,
      "sourceSystem": "CIS",
      "versionNumber": 47,
      "crimeNo": "000037P/09",
      "furtherInvestigation": true
}

我创建了一个属性转移步骤,并设法让整个响应转移到请求正文中的下一个测试步骤,但不知道如何更改属性。
在财产转移步骤中,我有以下选择.. 来源:previousTestStep 属性:响应路径语言:JsonPath 目标:NextTestStep 属性:请求路径语言:JsonPath

最好的方法是什么?我研究了这个问题并发现了 groovy 脚本,它们可能会做我想做的事,但我认为必须有一种更简单的方法。 非常感谢您的任何帮助..

【问题讨论】:

  • 看来 json 响应不是一个有效的响应。此外,您打算更改的值已经是错误的。无论如何,即使没有属性转移也可以完成,但最佳方式将取决于需要多少数据更改。您能否提供更多详细信息?
  • 嗨。我的意思是将进一步调查属性更改为 true,并且还删除了许多 json 以便于查看,但主体应该是相同的。我最多需要修改 3 或 4 个属性..
  • 您能否编辑问题并将 json 格式设置为至少有一个有效的示例以及需要更改的示例?
  • 看起来您仍然需要之前响应中的大部分数据,并且一些数据将被更改。它是否基于任何条件?

标签: json soapui


【解决方案1】:

您可以通过以下步骤轻松实现。

1) 为源测试步骤添加脚本断言

2) 在脚本断言中添加以下行

def response = messageExchange.responseContent
response = response.replace("'furtherInvestigation': false","'furtherInvestigation': true")
messageExchange.modelItem.testStep.testCase.setPropertyValue("jsonResponse",response)

3) 对于目标测试步骤,将 ${#TestCase#jsonResponse} 保留为请求正文而不是实际的请求正文

【讨论】:

    【解决方案2】:

    如果你喜欢在 Groovy 中做,你可以使用这些步骤

    1. 使用JsonSlurper解析Json
    2. 操作 Json

    3.再次构建Json

      def builder = new JsonBuilder(your_changed_json)
      def json = builder.toPrettyString()
      json = groovy.json.StringEscapeUtils.unescapeJava(json)
    
    1. 将上述 json 设置为您的请求

      step.testRequest.setRequestContent(json)
      

    【讨论】:

    • 谢谢你。我结合了你的答案和 Ramu 的答案。我在生成响应的测试步骤中插入了一个脚本断言,并使用 groovy 更改了属性值并将其设置为一个参数,然后您可以在下一个测试步骤中将其用作请求正文。
    • import groovy.json.JsonSlurper import groovy.json.JsonBuilder def response = messageExchange.responseContent def jsonSlurper = new JsonSlurper().parseText(response) jsonSlurper.furtherInvestigation = true jsonSlurper.oic = '97001' def jsonBuilder = new JsonBuilder(jsonSlurper) log.info(jsonBuilder) messageExchange.modelItem.testStep.testCase.setPropertyValue("jsonResponse",jsonBuilder.toString())
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-16
    • 1970-01-01
    相关资源
    最近更新 更多