Kiểm Thử JSON Schema
Khi thực hiện kiểm thử phần Response Body, chúng ta cẩn thận kiểm tra giá trị của từng field để đảm bảo chúng khớp với dữ liệu được lưu trữ trong Database. Trong trường hợp server trả lỗi, chúng ta cũng xem xét và kiểm tra nội dung thông báo lỗi để đảm bảo hệ thống cung cấp thông điệp rõ ràng và dễ hiểu cho người dùng. Ngoài ra, một khía cạnh quan trọng khác cũng có đóng góp quan trọng trong việc đảm bảo tính đúng đắn và ổn định của API nhưng ít được chú ý, đó là kiểm tra JSON Schema. Vậy JSON Schema là gì và kiểm thử JSON Schema sẽ mang đến những lợi ích gì cho chúng ta? Hãy cùng Test Mentor khám phá chi tiết thông qua bài viết này nhé!
Xem bài trước: Cú pháp JSON.stringify(), .parse(): Chuyển Đổi Dữ Liệu
Nội Dung Bài Viết
Vấn đề khi kiểm thử Response Body
{
"status": "success",
"data": {
"id": 11,
"ProductId": 3,
"BasketId": 6,
"quantity": 2,
"updatedAt": "2023-12-15T03:08:57.576Z",
"createdAt": "2023-12-15T03:08:57.576Z"
}
}
Tài liệu JSON (JSON Document)
Khi thực hiện kiểm thử Response Body của một API, thông thường, chúng ta sẽ dựa vào tài liệu JSON như trên để viết các bài kiểm thử. Mục tiêu của những bài kiểm thử này là kiểm tra các khía cạnh sau đây nhằm đảm bảo API được thiết kế đúng và trả về dữ liệu chính xác.
- Giá trị trả về ở từng field: Đảm bảo rằng giá trị của mỗi field trong Response Body khớp với dữ liệu mong đợi.
- Cấu trúc của Response Body: Xác định xem Response Body là một Object hay một Array. Điều này giúp đảm bảo tính nhất quán về mặt cấu trúc.
- Số lượng field: Kiểm tra số lượng field trong Response Body có đúng như mong đợi đã mô tả trong tài liệu hay không. Điều này quan trọng để đảm bảo không trả về thiếu hoặc thừa dữ liệu.
- Kiểu dữ liệu (data type) của từng field: Xác định kiểu dữ liệu của từng field và đảm bảo rằng chúng đúng với mô tả trong tài liệu API.
Đối với khía cạnh kiểm tra “Giá trị được trả về ở từng field”, chúng ta sẽ so khớp giá trị được trả về ở từng field và giá trị mà chúng ta mong đợi. Ví dụ như so khớp giá trị của field “productId” thuộc API Get Product với giá trị của field tương ứng sau khi gọi thành công API Add Product.
Vậy còn các khía cạnh khác như kiểm tra “Cấu trúc của Response Body” hay xác định “Kiểu dữ liệu của từng field” thì chúng ta sẽ kiểm tra như thế nào?
Tham khảo thêm khóa học API Testing từ cơ bản đến nâng cao của Test Mentor:
Giới thiệu về JSON Schema
Định nghĩa
JSON Schema is a vocabulary that allows you to annotate and validate JSON documents.
JSON Schema là một bộ thuật ngữ được thiết kế để cho phép chúng ta mô tả hoặc ghi chú thông tin bổ sung vào tài liệu JSON, nhằm làm rõ các yếu tố khi xây dựng một đối tượng JSON.
Tài liệu JSON Schema (JSON Schema Document), là tài liệu được tạo riêng cho mỗi đối tượng JSON. Bằng cách sử dụng các thuật ngữ trong JSON Schema, tài liệu này sẽ mô tả các khía cạnh về cấu trúc, ràng buộc và kiểu dữ liệu cho đối tượng. Những thông tin bổ sung được mô tả trong tài liệu JSON Schema không chỉ hỗ trợ lập trình viên trong việc tạo ra các đối tượng JSON có tính nhất quán và dễ hiểu, mà còn là cơ sở cho Tester khi thực hiện kiểm tra tính đúng đắn của đối tượng JSON.
Các thành phần của một tài liệu JSON Schema
Tài liệu JSON Schema cơ bản nhất là một object JSON rỗng, nó không chứa bất kỳ mô tả gì. Khi tạo, chúng ta có thể lựa chọn và thêm các thuật ngữ phù hợp để mô tả đối tượng JSON ở các khía cạnh mà chúng ta muốn áp dụng ràng buộc.
Dưới đây là một số thuật ngữ thường được sử dụng trong tài liệu JSON Schema.
- “title” and “description” : mô tả tổng quan về mục đích của Schema. Hai từ khóa này không thêm bất kỳ ràng buộc nào cho dữ liệu được xác thực.
- “type” : xác định cấu trúc của đối tượng JSON. Trong trường hợp “type” là thuộc tính của đối tượng “properties“, thì nó được sử dụng để xác định kiểu dữ liệu của một field.
- “properties” : giá trị của nó bắt buộc là một Object và bên trong Object đó sẽ mô tả chi tiết về các khía cạnh của từng field đối tượng, ví dụ như kiểu dữ liệu của field đó.
- “required” : chứa tập hợp các field bắt buộc trả về.
Ban đầu, tài liệu JSON Schema là một object rỗng.
{}
Nếu chúng ta muốn ràng buộc Respone Body là một Object thì chúng ta sẽ thêm mô tả “type“: “object”.
{ "type": "object" }
<<Xem thêm các thuật ngữ khác tại JSON Schema>>
Một số tài liệu JSON Schema mẫu
1. Response Body là một Object
Giả sử đây là một tài liệu JSON cho phần Response Body của API Get Product Id thất bại (Product không tồn tại)
{
"message": "Not Found",
"errors": []
}
Tài liệu JSON
Nếu chúng ta áp dụng các ràng buộc sau đây cho JSON trên,
- Cấu trúc của đối tượng JSON là một Object.
- Các field bắt buộc bao gồm “message”, “errors”
- Kiểu dữ liệu (type) của từng field tương ứng như sau:
- “message” là một chuỗi (string).
- “errors” là một mảng (array).
thì tài liệu JSON Schema tương ứng sẽ có dạng:
{
"title": "JSON Schema for API Get ProductId fail",
"type": "object",
"required": ["message", "errors"],
"properties": {
"message": {
"type": "string"
},
"errors": {
"type": "array"
}
}
}
Tài liệu JSON Schema
2. Response Body là một Object có chứa Object con (Nested Object)
Giả sử đây là một tài liệu JSON cho phần Response Body của API Get ProductId thành công
{
"status": "success",
"data": {
"id": 11,
"ProductId": 3,
"BasketId": 6,
"quantity": 2,
"updatedAt": "2023-12-15T03:08:57.576Z",
"createdAt": "2023-12-15T03:08:57.576Z"
}
}
Tài liệu JSON
Vì đây là một JSON chứa các đối tượng lồng nhau, khi chúng ta sẽ áp dụng các ràng buộc sau đây,
a. Ràng buộc đối với Object cha (root object)
- Cấu trúc của đối tượng JSON là một Object.
- Các field bắt buộc gồm “status”, “data”.
- Kiểu dữ liệu (type) của từng field tương ứng như sau:
- “status” là một chuỗi (string).
- “data” là một object, chứa các thuộc tính.
b. Ràng buộc đối với Object con (“data” object)
- Cấu trúc áp dụng cho field “data” là một Object.
- Tất cả các field nằm trong đối tượng “data” đều field bắt buộc.
- Kiểu dữ liệu (type) của từng field tương ứng như sau:
- “id”, “ProductId”, “BasketId”, “quantity” là một số nguyên (integer).
- “updatedAt”, “createdAt” là một chuỗi (string).
thì tài liệu JSON Schema tương ứng sẽ có dạng:
{
"title": "JSON Schema for API Get ProductId successfull",
"type": "object",
"required": ["status","data"],
"properties": {
"status": {
"type": "string"
},
"data": {
"type": "object",
"required": ["id","ProductId","BasketId","quantity","updatedAt","createdAt"],
"properties": {
"id": {
"type": "integer"
},
"ProductId": {
"type": "integer"
},
"BasketId": {
"type": "integer"
},
"quantity": {
"type": "integer"
},
"updatedAt": {
"type": "string"
},
"createdAt": {
"type": "string"
}
}
}
}
}
Tài liệu JSON Schema
Thực hành kiểm thử JSON Schema với Sample Script!!!
Cài đặt môi trường kiểm thử local
Trước khi thực hành, hãy đảm bảo bạn đã cài đặt thành công môi trường kiểm thử local với ứng dụng Juice Shop. Tham khảo hướng dẫn cài đặt tại bài Blog “Hướng dẫn cài đặt môi trường kiểm thử local“.
Hướng dẫn các bước viết test script
Hãy thử viết test script kiểm tra JSON được nêu ở phần “Vấn đề khi kiểm thử Response Body” theo các bước mà Test Mentor gợi ý ở đây nhé!
- Bước 1: Thiết kế JSON Schema theo định dạng được mô tả ở mục “Một số tài liệu JSON Schema mẫu“.
- Bước 2: Ở Tab Pre-request Script, khai báo một Biến dùng để lưu trữ JSON Schema. Sử dụng cú pháp pm.collectionVariables.set() để đưa Biến này vào Collections.
- Bước 3: Ở Tab Tests, sử dụng cú pháp pm.collectionVariables.get() để truy xuất giá trị JSON Schema và sử dụng hàm pm.response.to.have.jsonSchema() để viết bài đánh giá.
Sample Script & Video
Sau khi hoàn thành việc viết Sample Script theo gợi ý trên, hãy tải Sample Script được đính kèm ở phía dưới và truy cập video “Kiểm Thử JSON Schema” được đăng tải trên kênh YouTube chính thức của Test Mentor để xem hướng dẫn chi tiết nhé!
Các cú pháp sử dụng trong test script
- Hàm JavaScript chuyển một đối tượng JavaScript sang một chuỗi JSON: JSON.stringify()
- Hàm JavaScript chuyển một chuỗi JSON sang đối tượng JavaScript: JSON.parse()
- Đưa Biến vào Collections: pm.collectionVariables.set()
- Truy xuất Biến từ Collections: pm.collectionVariables.get()
- Kiểm tra Response Body của API có tuân thủ theo JSON Schema hay không: pm.response.to.have.jsonSchema()
Kết luận
Vậy là chúng ta vừa bổ sung một khía cạnh quan trọng vào bộ sưu tập các công cụ kiểm thử API bằng POSTMAN. Việc hiểu rõ về JSON Schema và cách triển khai kiểm thử sẽ giúp Tester nâng cao chất lượng kiểm thử API một cách hiệu quả. Đặc biệt, kiểm thử JSON Schema cũng là một phương pháp hiệu quả để phát hiện lỗi trong quá trình bảo trì, nơi có thể xảy ra các thay đổi không mong muốn đối với các thuộc tính của API.
Hành trình kiểm thử tự động API bằng POSTMAN luôn ẩn chứa nhiều điều thú vị đang chờ đợi chúng ta ở phía trước. Hãy cùng đồng hành Test Mentor qua các bài viết hữu ích trong danh mục API Testing để trải nghiệm và tận hưởng hành trình này nhé!
Đặc biệt, nếu bạn nâng cao kiến thức về Kiểm thử API và mong muốn nhận được hướng dẫn trực tiếp, bạn có thể tham khảo Khóa học kiểm thử API tại Test Mentor.
Tài liệu tham khảo
Giới thiệu về JSON Schema: Why JSON Schema?
Xem bài tiếp theo: Phương thức .shift(): Trích Xuất Và Loại Bỏ Test Case Đã Thực Thi
Hoàng Hà
Leave a Comment