Xác thực cấu trúc JSON trong Postman bằng thư viện tv4

Khi làm việc với các API trả về dữ liệu JSON, việc kiểm tra tính hợp lệ của cấu trúc — bao gồm kiểu dữ liệu từng trường, mức độ lồng nhau, và sự hiện diện bắt buộc của các thuộc tính — là bước thiết yếu để đảm bảo chất lượng kiểm thử. Thay vì so sánh giá trị cụ thể (thường thay đổi theo thời gian hoặc ngữ cảnh), ta có thể áp dụng JSON Schema để xác thực mô hình dữ liệu một cách linh hoạt và bền vững.

Ví dụ, phản hồi từ yêu cầu GET https://httpbin.org/get?a=test có dạng:

{
  "args": { "a": "test" },
  "headers": {
    "Accept": "*/*",
    "Host": "httpbin.org",
    "User-Agent": "PostmanRuntime/7.32.3"
  },
  "origin": "203.122.45.77",
  "url": "https://httpbin.org/get?a=test"
}

Một lược đồ kiểm tra phù hợp sẽ yêu cầu:

  • Phản hồi là một đối tượng ("type": "object") với bốn thuộc tính bắt buộc: args, headers, origin, url.
  • args là đối tượng chứa duy nhất trường a có kiểu chuỗi.
  • headers là đối tượng với các thuộc tính cố định như Accept, Host, User-Agent, tất cả đều phải là chuỗi.
  • originurl đều là chuỗi.

Lược đồ JSON tương ứng được viết như sau:

{
  "type": "object",
  "properties": {
    "args": {
      "type": "object",
      "properties": { "a": { "type": "string" } }
    },
    "headers": {
      "type": "object",
      "properties": {
        "Accept": { "type": "string" },
        "Host": { "type": "string" },
        "User-Agent": { "type": "string" }
      }
    },
    "origin": { "type": "string" },
    "url": { "type": "string" }
  },
  "required": ["args", "headers", "origin", "url"]
}

Các mẫu phổ biến khác trong JSON Schema:

  • Mảng: dùng "items" thay vì "properties", ví dụ {"type": "array", "items": {"type": "number"}} — mảng số.
  • Chuỗi: {"type": "string"}, có thể mở rộng với "minLength", "pattern".
  • Số nguyên: {"type": "integer"}, hỗ trợ "minimum", "maximum".

Trong Postman, thư viện tv4 (Tiny Validator v4) được tích hợp sẵn để thực hiện kiểm tra này. Không cần cài đặt thêm — chỉ cần khai báo lược đồ và gọi hàm tv4.validate() trong tab Tests.

Đoạn mã kiểm thử sau minh họa cách triển khai:

const responseSchema = {
  "type": "object",
  "properties": {
    "args": { "type": "object", "properties": { "a": { "type": "string" } } },
    "headers": {
      "type": "object",
      "properties": {
        "Accept": { "type": "string" },
        "Host": { "type": "string" },
        "User-Agent": { "type": "string" }
      }
    },
    "origin": { "type": "string" },
    "url": { "type": "string" }
  },
  "required": ["args", "headers", "origin", "url"]
};

pm.test("Response matches expected schema", () => {
  const payload = pm.response.json();
  const isValid = tv4.validate(payload, responseSchema);
  
  pm.expect(isValid).to.be.true;
  if (!isValid) {
    console.error("Validation errors:", tv4.error);
  }
});

Kết quả kiểm tra sẽ hiển thị Pass nếu dữ liệu phản hồi tuân thủ đầy đủ lược đồ đã định nghĩa. Trường hợp thất bại, thông tin lỗi chi tiết có thể được truy xuất qua tv4.error để gỡ rối nhanh chóng.

Thẻ: postman json-schema tv4 api-testing rest-api

Đăng vào ngày 17 tháng 05 lúc 16:45