【问题标题】:Validate JSON Schema using Postman使用 Postman 验证 JSON 模式
【发布时间】:2022-01-02 07:05:44
【问题描述】:

我正在尝试验证我的响应 JSON Schema,但我总是遇到失败的测试用例,

返回的 JSON 响应是:

[
    {
        "registrationOriginDateTime": "2021-11-27T21:11:11.000Z",
        "eventId": "qc0081902",
        "badgeId": "12367",
        "customerGuid": "322245671253455",
        "products": [],
        "status": "registered",
        "demographics": []
    }
]

我正在使用以下方法来验证架构,

var jsonSchema = {
"type": "array",
"items":{
type: "object",
properties:
{

        "registrationOriginDateTime": {"type":"string"},
        "eventId": {"type":"string"},
        "badgeId": {"type":"string"},
        "customerGuid": {"type":"string"},
        "products": {"type":"string"},
        "status": {"type":"string"},
        "demographics": {"type":"string"}

}
}
}

pm.test('Response schema type nodes verification', function() {
  pm.expect(tv4.validate(pm.response.json(), jsonSchema)).to.be.true;
});

但它失败了。 有人可以帮我解决这个问题吗?

【问题讨论】:

  • 产品和人口统计字段不是数组吗?请同时提供错误输出。

标签: java json postman


【解决方案1】:

您的对象“产品”和“人口统计”的架构类型为:数组,其中的项目是字符串,见下文:

//set Response Body variable
var jsonData = pm.response.json();

//set Response Schema variable 
var schema = {
  "type": "array",
  "items": {
    "type": "object",
    "required": [],
    "properties": {
      "registrationOriginDateTime": {"type": "string"},
      "eventId": {"type": "string"},
      "badgeId": {"type": "string"},
      "customerGuid": {"type": "string"},
      "products": {"type": "array",
        "items": {"type": "string"}
      },
      "status": {"type": "string"},
      "demographics": {"type": "array",
        "items": {"type": "string"}
      }
    }
  }
};

//validate Response Schema against Response Body
pm.test('Response schema type nodes verification', function() {
  pm.expect(tv4.validate(jsonData, JSON.parse(schema), false, true), tv4.error).to.be.true;
});

为了使测试更简洁,我会将架构 a 作为值保存到带有键 responseSchema 的全局变量中,因此 var 架构声明如下所示:

var schema = pm.globals.get("responseSchema");

【讨论】:

  • 它工作了,但你的 JSON.parse(schema) 没有工作,所以我只是把 schema 放在那里,所以它工作了。
  • 我还需要知道将架构放入全局变量的目的是什么?
  • 你不必这样做,如果你的测试变得很长并且你知道架构不会改变,它只会让它更整洁。就是这样。我对我的测试进行了很长时间的测试,发现它更易于管理,而且我可以在多个 api 调用中使用它,我正在测试不同的结果。只是易于使用。
猜你喜欢
  • 2019-09-12
  • 2018-12-24
  • 2019-12-21
  • 2019-11-17
  • 1970-01-01
  • 2020-07-11
  • 2019-12-14
  • 1970-01-01
  • 2015-07-18
相关资源
最近更新 更多