如何在预请求脚本中验证 POST 请求正文所需的参数?

How to validate POST request body required params in Pre-request script?

我的请求正文中的 JSON 原始数据中几乎没有需要的参数,我想在 Postman 的预请求脚本中验证这些参数是否存在于正文中。

{
  "stores": [
    {
      "city": "Tokyo",
      "name": "Church Street"
      ....
      ....
    }
  ]
}

如何检查请求正文中是否传递了cityname

使用 pm.test,因为您可以在 运行 结果中看到请求正文、内容类型、响应内容。导出结果的详细信息太多。

测试请求正文:

pm.test(JSON.parse(pm.request.body));

测试使用请求正文编码的 URL:

pm.test(JSON.stringify(pm.request.body.urlencoded.toObject(true)));

测试请求正文中的原始文本:

 pm.test(JSON.parse(pm.request.body.raw));

示例:

var reqBody = request.data; //JSON.parse(request.data);
tests["Data"] = reqBody.stores[0].city !== null;

您可以将 pm.test 函数与 Pre-request Scripts 中的 pm.expect 断言一起使用。

由于 Postman 自带 Lodash,你可以在沙盒中使用 _.get() 函数从 stores 数组中获取数据。您需要使用 JSON.parse()_.get() 函数中正确分配来自请求正文的数据。

let requestBody = _.get(JSON.parse(pm.request.body.raw), 'stores[0]')

pm.test("Check Body", () => {
    pm.expect(requestBody).to.have.keys(['city', 'name'])
})

或者像这样没有 Lodash 的东西:

let requestBody = JSON.parse(pm.request.body.raw)

pm.test("Check Body", () => {
    pm.expect(requestBody.stores[0]).to.have.keys(['city', 'name'])
})

有关 pm.* API 的更多信息可在此处找到:

https://learning.postman.com/docs/postman/scripts/postman-sandbox-api-reference/