Contents

postman驗證JSON Schema方法

Contents

最近在實作 API,發現上次只有做 VSCODE 檢查
postman 假如可以用的話,也很方便

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
var schema = {
    "$schema": "http://json-schema.org/draft-06/schema#",
        ......()
    }
};

pm.test("Check JSON", function () {
    var jsonData = pm.response.json();
  var valid = tv4.validate(jsonData, schema, false, true);
  if (valid !== true) {
      console.log(tv4.error);
      tests['tv4.error:' + tv4.error] = true;
  }
  pm.expect(valid).to.be.true;
});

只要在pre-test放這段就可以檢查了

參考來源:

2018-11-07

最近應為錯誤發現不會提示顯示哪裡錯誤
所以爬到How do I test JSON schema in postman using tv4? - Stack Overflow
修改一下程式碼

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
pm.test("Check JSON", function() {
  var jsonData = pm.response.json();
  var valid = tv4.validateMultiple(jsonData, schema, false, true);
  if (valid.errors) {
    valid.errors.forEach(
      (value, index) => (tests[value.schemaPath + ":" + value.message] = true)
    );
  }
  pm.expect(valid.errors.length === 0).to.be.true;
});

最後,假如要用上次 VSCODE
setting.json好像沒辦法自動設定所有 json 檔案
只能單一設定

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
{
  "json.schemas": [
    {
      "fileMatch": ["xxx.api.json"],
      "url": "./xxx.schema.json"
    },
    {
      "fileMatch": ["oooo.json"],
      "url": "./oooo.schema.json"
    }
  ]
}

未來有找到好方法再補
有找到VSCode 配置文件的变量索引 - 知乎

1
2
3
4
5
6
7
8
9
{
  //不能使用
  "json.schemas": [
    {
      "fileMatch": ["${fileBasenameNoExtension}.json"],
      "url": "./${fileBasenameNoExtension}.schema.json"
    }
  ]
}

明天測試看能不能用

2018-11-09
確定不能使用

REST Client 好像沒有 JSON Schema 檢查工具

一些 github 上檢驗工具
ebdrup/json-schema-benchmark: Benchmarks for Node.js JSON-schema validators

2019-05-22
另類檢查寫法

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
var data = JSON.parse(responseBody);

pm.test("response must be valid and have a body", function() {
  // assert that the status code is 200
  pm.response.to.be.ok;
  // assert that the response has a valid JSON body
  pm.response.to.be.withBody;
  pm.response.to.be.json;
});

pm.test("respnse body has xxxx ?", function() {
  pm.expect(data.response.xxxx).is.not.empty;
  pm.response.to.not.have.jsonBody("error");
});

參考來源:
Test scripts | Postman Learning Center