【问题标题】:Parsing XML response also containing JSON in Postman在 Postman 中解析还包含 JSON 的 XML 响应
【发布时间】:2021-08-04 15:48:12
【问题描述】:

我想验证特定的 JSON 内容是否与请求中定义的变量匹配,并且位于正确的位置,但没有成功。你认为我会如何解决这个问题?

以下收到的邮递员回复:

<TESTResponseMessage xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <ContextToken>
        <SourceId>TESTSOURCE</SourceId>
        <SourceCounter>TESTSourceCounter</SourceCounter>
        <Priority>1</Priority>
        <ContextId>cb9bec3e-80d6-40a5-b7db-ec43bb1416df</ContextId>
    </ContextToken>
    <MessageBody>
        <Message>Data received and Commissioning started</Message>
        <HttpStatusCode>200</HttpStatusCode>
        <TestRequest>{"ImportMpxn":"1414023910008","InstallCode":"91D4D6FAB81DF7DED66ACEC82729C537","ChfDeviceId":"88-73-84-51-00-00-89-DB","ExternalTrackingId":"TESTSourceCounter","DeviceId":"30-EB-5A-FF-FF-5C-8F-38"}</TestRequest>
        <TestResponse>{"Item1":{"Success":true,"OrchestrationId":"99d0fe71-1ff9-4207-9a32-d027a349f82c"},"Item2":200}</TestResponse>
    </MessageBody>
</TestResponseMessage>

我编写了以下断言测试但收到错误:

笔试

pm.test("MPXN sent = MPAN submitted", function () {
    var jsonData = pm.response.json();
    pm.expect(jsonData.TESTResponseMessage.TestRequest.ImportMpxn).to.eql(pm.variables.get("ImportMpan"));
});

收到错误响应

JSONError: Unexpected token '&lt;' at 1:1 &lt;TESTResponseMessage xmlns:xsd="http://www.w3.org/20 ^

【问题讨论】:

  • 您必须先解析 XML,找到 JSON 值节点,然后解析它们。

标签: javascript json api testing postman


【解决方案1】:

您需要首先利用xml2Json 库(Postman 内置)将您的响应从 XML 转换为 JSON,然后从中提取节点。所以要从你的例子中得到ImportMpxn,试试这个:

pm.test("MPXN sent = MPAN submitted", function () {
    var xmlAsJson = xml2Json(responseBody);
    var testRequest = xmlAsJson.TESTResponseMessage.MessageBody.TestRequest;
    pm.expect(testRequest.ImportMpxn).to.eql(pm.variables.get("ImportMpan"));
});

但是,请注意,您的打开和关闭 XML 标记使用不同的大小写 (TESTResponseMessage v TestResponseMessage) xml2Json 不喜欢,因为它在语法上不正确;如果您可以在源文件中修改它们以使值匹配,则上述 sn-p 将起作用。

【讨论】:

  • 非常感谢您提供上述解决方案。我现在正在运行以下测试,但收到另一个错误:Test pm.test("MPXN sent = MPANmitted", function () { var xmlAsJson = xml2Json(responseBody); var TestRequest = xmlAsJson .TestMessage.MessageBody.TestRequest; pm.expect(TestRequest.ImportMpxn).to.eql(pm.collectionVariables.get('ImportMpan')); }); 错误响应 AssertionError: 预期未定义深度等于'1414023910008'
  • P.S.我还修改了有效载荷以确保语法一致性。
猜你喜欢
  • 2016-05-28
  • 2018-12-04
  • 2016-05-01
  • 2021-07-02
  • 2017-08-06
  • 2017-11-07
  • 2013-05-08
  • 1970-01-01
  • 2018-10-04
相关资源
最近更新 更多