【问题标题】:How to compare XML response with Json in Karate如何在空手道中将 XML 响应与 Json 进行比较
【发布时间】:2018-11-25 19:38:38
【问题描述】:

我需要将我的 JSON 响应与下游 XML 响应匹配并验证。以下是两者的示例响应。

请注意,Json 响应参数与 XML 响应不按顺序排列。

JSON 响应

"Main": {
    "Cd": "ABC",
    "descriptionTxt": "Sample Main",
    "type": "A",
    "codeType": "P",
    "dt": "2018-10-15T00:00:00-05:00",
    "validity": "3",
    "segment": "Personal"
    },
  "testList": [
    {
      "code": "123",
      "descriptionTxt": "My Description",
      "categoryCd": "DUDU"
    },
    {
      "code": "675",
      "descriptionTxt": "His Description"
    },
    {
      "code": "345",
      "descriptionTxt": "Your Description",
      "categoryCd": "BH"
    }
]

XML 响应

<S:Body>
<ns4:code>ABC </ns4:code>
    <ns5:description>Sample Main</ns5:description>
    <ns5:Date>2018-10-15</ns5:Date>
    <ns5:Type>A</ns5:Type>
    <ns5:codeType>P</ns5:codeType>
    <ns5:validity>3</ns5:validity >
    <ns5:Segment>PERSONAL  </ns5:Segment>
    <ns5:unwanted>Unwanted XML Parameter</ns5:unwanted>

    <ns4:Test>
      <ns5:code>123   </ns5:code>
      <ns5:description>My Description</ns5:description>
      <ns5:categoryCode>DUDU</ns5:categoryCode>
      <ns5:unwanted>Unwanted XML Parameter</ns5:unwanted>
    </ns4:Test>

    <ns4:Test>
      <ns5:code>345   </ns5:code>
      <ns5:description>Your Description</ns5:description>
      <ns5:categoryCode>BH</ns5:categoryCode>
    </ns4:Test>

    <ns4:Test>
      <ns5:code>675  </ns5:code>
      <ns5:description>His Description</ns5:description>
      <ns5:unwanted>Unwanted XML Parameter</ns5:unwanted>
    </ns4:Test>

【问题讨论】:

    标签: karate


    【解决方案1】:

    如果您花时间发布格式良好的 JSON 和 XML,那就太好了,但无论如何。我在这里专注于解决难题,即将重复的 XML 元素映射到 JSON,如果您将以下内容粘贴到 Scenario 中,您可以看到它的工作原理:

    * def json = 
    """
    {
       "Main": {
          "Cd":"ABC",
          "descriptionTxt":"Sample Main",
          "type":"A",
          "codeType":"P",
          "dt":"2018-10-15T00:00:00-05:00",
          "validity":"3",
          "segment":"Personal"
       },
       "testList":[
          {
             "code":"123",
             "descriptionTxt":"My Description",
             "categoryCd":"DUDU"
          },
          {
             "code":"675",
             "descriptionTxt":"His Description"
          },
          {
             "code":"345",
             "descriptionTxt":"Your Description",
             "categoryCd":"BH"
          }
       ]
    }
    """
    * def xml = 
    """
    <ns4:root xmlns:ns4="http://foo.com" xmlns:ns5="http://bar.com">
       <ns4:Test>
          <ns5:code>123</ns5:code>
          <ns5:description>My Description</ns5:description>
          <ns5:categoryCode>DUDU</ns5:categoryCode>
          <ns5:unwanted>Unwanted XML Parameter</ns5:unwanted>
       </ns4:Test>
       <ns4:Test>
          <ns5:code>345</ns5:code>
          <ns5:description>Your Description</ns5:description>
          <ns5:categoryCode>BH</ns5:categoryCode>
       </ns4:Test>
       <ns4:Test>
          <ns5:code>675</ns5:code>
          <ns5:description>His Description</ns5:description>
          <ns5:unwanted>Unwanted XML Parameter</ns5:unwanted>
       </ns4:Test>
    </ns4:root>
    """
    * def list = $xml/root/Test
    * def xpath = function(x, p){ try { return karate.xmlPath(x, p) } catch (e) { return '#notpresent' } }
    * def fun = function(x){ return { code: xpath(x, '/Test/code'), descriptionTxt: xpath(x, '/Test/description'), categoryCd: xpath(x, '/Test/categoryCode') } }
    * def temp = karate.map(list, fun)
    * print temp
    * print json.testList
    * match json.testList contains temp
    

    映射 JSON 的其余部分对您来说是一个练习。请参阅文档。另请参阅此答案以获取更多想法:Karate - Match two dynamic responses

    【讨论】:

    • 谢谢彼得;我在实施过程中还有一个问题。 '* def fun = function(x){ return{xml path traversing go here} }' 这部分代码抛出'at ✽.* def fun = function(x){return{xml path traversing go here} }(测试/Features/Validation.feature:24) 原因:javax.script.ScriptException: :1:38 预期的逗号,但发现 function(x){ return { xml path traversing go here } }' 错误。
    • @Nitheeshhunsur 请将此答案标记为已接受并打开一个新问题。否则它会变得混乱
    猜你喜欢
    • 2018-06-18
    • 2020-11-18
    • 1970-01-01
    • 1970-01-01
    • 2019-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多