NỘI DUNG BÀI HỌC
✅ Nắm được các thành phần cơ bản RESTful API Object
✅ Biết cách tham số hóa RESTful API Object
✅ Tái sử dụng RESTful API Object trong Postman vào Katalon
✅ Biết cách sử dụng một số Build-in Keyword cho API trong Katalon
I. RESTFUL API OBJECT TRONG KATALON
1. Các bước tạo RESTful API Object trong Katalon
-
-
-
- Chuột phải [Object Repository] trên cây thư mục
- Chọn [New]
- Chọn [Web Service Request]
-
-

-
-
-
- Nhập tên cho request ở phần "Name"
- Chọn "Request Type" là RESTful.
- Click [OK]
-
-

2. Các thành phần cơ bản RESTful API Object

-
-
-
- Request Methods & URL:
- Hỗ trợ các phương thức: GET (mặc định), POST, PUT, DELETE, PATCH, HEAD, CONNECT, OPTIONS, TRACE.
- URL: Xác định endpoint của dịch vụ.
- Query Parameters:
- Là các tham số sau dấu ? trong URL.
- Katalon tự động phát hiện tham số từ URL hoặc bạn có thể thêm thủ công trong bảng. Các ký tự đặc biệt sẽ được mã hóa.
- Authorization: Hỗ trợ các loại: Bearer, Basic, OAuth 1.0, OAuth 2.0, NTLM để xác thực quyền truy cập.
- Request Header: Cấu hình thông tin header (ví dụ: Content-Type). Có thể chọn từ danh sách gợi ý.
- Request Body: Payload của Request.
- Validation & Verification:
- Validation: Kiểm tra request/response so với schema (JSON/XML).
- Verifications: Viết script để xác minh kết quả trả về.
- Variables: Định nghĩa các biến để sử dụng trong request.
- Response: Sau khi gửi request, kết quả sẽ hiển thị trong tab Response, bao gồm:
- Thông tin chung: Status (trạng thái), Elapsed time (thời gian thực thi), Size (kích thước).
- Response Body: Hỗ trợ xem định dạng JSON, XML, HTML, JS.
- Response Header: Xem thông tin header trả về (dạng Pretty hoặc Raw).
- Verification & Validation Log: Kết quả của các script kiểm thử đã viết trong tab Verifications và Validations.
- Request Methods & URL:
-
-
3. Tham số hóa RESTful API Object
-
-
-
- Tạo và khai báo các tính chất của biến trong tab Variables.
- Cú pháp: Sử dụng ${ten_bien} làm chỗ giữ (placeholder) để gọi biến vào các vị trí hỗ trợ.
-
-

-
-
-
- Khi chạy test, giá trị của biến sẽ được tự động điền vào các chỗ giữ này.
- Các vị trí hỗ trợ tham số hóa trong RESTful Request
- URL
- Query Parameters (Tham số truy vấn)
- HTTP Header
- HTTP Body
- Verification (Script kiểm chứng)
- Khi bạn thêm một đối tượng request vào Test Case, các biến đã định nghĩa trước đó sẽ được tự động thêm vào, bạn không cần định nghĩa lại.
-
-
4. Sử dụng RESTful API Object trong Postman vào Katalon
Xuất (Export) bộ sưu tập (Collection) của bạn từ Postman ra thành một tệp tin định dạng JSON. (Thực hiện các bước như hình vẽ dưới đây)
-
-
-
- Chuột phải vào [Object Repository]
- Chọn [Import]
- Chọn [From Postman]
-
-

-
-
-
- Chọn file file JSON đã xuất từ Postman trước đó
- Click [OK]
- Các Requests tương ứng sẽ được nhập vào Object Repository của Katalon Studio.
-
-
II. MỘT SỐ BUILT-IN KEYWORD CHO API TRONG KATALON
1. Nhóm hàm lấy dữ liệu (Getters) & Kiểm tra chuỗi
Các hàm này dùng để trích xuất dữ liệu từ phản hồi (response) để dùng cho các bước sau hoặc kiểm tra sự tồn tại của văn bản.
[WS] Contains String
import static com.kms.katalon.core.testobject.ObjectRepository.findTestObject
import com.kms.katalon.core.webservice.keyword.WSBuiltInKeywords as WS
import com.kms.katalon.core.testobject.RequestObject
import com.kms.katalon.core.testobject.ResponseObject
RequestObject requestRegister = findTestObject('register')
ResponseObject responseRegister = WS.sendRequest(requestRegister)
WS.containsString(responseRegister, 'successfully', false)
-
-
- Mô tả: Kiểm tra xem một chuỗi văn bản mong muốn có xuất hiện trong dữ liệu phản hồi hay không.
- Tham số:
- response: Đối tượng phản hồi (ResponseObject).
- string: Chuỗi văn bản bạn muốn tìm.
- useRegex (Boolean): true nếu dùng biểu thức chính quy (Regex), false nếu tìm chính xác.
- Trả về: true nếu tìm thấy, ngược lại là false
-
[WS] Get Elements Count
import static com.kms.katalon.core.testobject.ObjectRepository.findTestObject
import com.kms.katalon.core.webservice.keyword.WSBuiltInKeywords as WS
import com.kms.katalon.core.testobject.RequestObject
import com.kms.katalon.core.testobject.ResponseObject
RequestObject requestBook = findTestObject('book')
ResponseObject responseBook = WS.sendRequest(responseBook)
int elementCounts = WS.getElementsCount(responseBook, 'list[*]')
-
-
- Mô tả: Đếm số lượng phần tử khớp với bộ định vị (locator) trong phản hồi (thường là JSON hoặc XML).
- Tham số:
- response: Đối tượng phản hồi.
- locator: Chuỗi định vị phần tử (ví dụ JsonPath).
- Trả về: Số nguyên (Integer) - số lượng phần tử tìm thấy.
-
[WS] Get Element Property Value
import static com.kms.katalon.core.testobject.ObjectRepository.findTestObject
import com.kms.katalon.core.webservice.keyword.WSBuiltInKeywords as WS
import com.kms.katalon.core.testobject.RequestObject
import com.kms.katalon.core.testobject.ResponseObject
RequestObject requestBook = findTestObject('book')
ResponseObject responseBook = WS.sendRequest(responseBook)
String idValue = WS.getElementPropertyValue(responseBook, 'list[0].id')
-
-
- Mô tả: Lấy giá trị của một thuộc tính cụ thể từ một phần tử trong phản hồi.
- Tham số:
- response: Đối tượng phản hồi.
- locator: Chuỗi định vị để tìm đến thuộc tính đó.
- Trả về: Chuỗi (String) chứa giá trị của thuộc tính.
-
[WS] Get Element Text
import static com.kms.katalon.core.testobject.ObjectRepository.findTestObject
import com.kms.katalon.core.webservice.keyword.WSBuiltInKeywords as WS
import com.kms.katalon.core.testobject.RequestObject
import com.kms.katalon.core.testobject.ResponseObject
RequestObject requestBook = findTestObject('book')
ResponseObject responseBook = WS.sendRequest(responseBook)
String elementText = WS.getElementText(responseBook, 'list[0].id')
-
-
- Mô tả: Lấy nội dung văn bản (text) bên trong một phần tử được định vị.
- Tham số:
- response: Đối tượng phản hồi.
- locator: Chuỗi định vị phần tử.
- Trả về: Chuỗi văn bản (String).
-
2. Nhóm hàm Gửi yêu cầu & Trạng thái (Send & Status)
Các hàm cốt lõi để thực thi API và kiểm tra trạng thái HTTP.
[WS] Get Response Status Code
import static com.kms.katalon.core.testobject.ObjectRepository.findTestObject
import com.kms.katalon.core.webservice.keyword.WSBuiltInKeywords as WS
import com.kms.katalon.core.testobject.RequestObject
import com.kms.katalon.core.testobject.ResponseObject
RequestObject requestBook = findTestObject('book')
ResponseObject responseBook = WS.sendRequest(responseBook)
int responseCode = WS.getResponseStatusCode(responseBook)
-
-
- Mô tả: Lấy mã trạng thái HTTP của phản hồi (ví dụ: 200, 404, 500).
- Tham số: response (Đối tượng phản hồi).
- Trả về: Số nguyên (Integer) - mã trạng thái.
-
[WS] Send Request
import static com.kms.katalon.core.testobject.ObjectRepository.findTestObject
import com.kms.katalon.core.webservice.keyword.WSBuiltInKeywords as WS
import com.kms.katalon.core.testobject.RequestObject
import com.kms.katalon.core.testobject.ResponseObject
RequestObject requestBook = findTestObject('book')
ResponseObject responseBook = WS.sendRequest(responseBook)
-
-
- Mô tả: Gửi một yêu cầu HTTP (Request Object) đến máy chủ.
- Tham số: request (Đối tượng Request đã tạo trong Object Repository).
- Trả về: Đối tượng phản hồi (ResponseObject).
-
[WS] Send Request And Verify
import static com.kms.katalon.core.testobject.ObjectRepository.findTestObject
import com.kms.katalon.core.webservice.keyword.WSBuiltInKeywords as WS
import com.kms.katalon.core.testobject.RequestObject
import com.kms.katalon.core.testobject.ResponseObject
RequestObject requestBook = findTestObject('book')
ResponseObject responseBook = WS.sendRequestAndVerify(responseBook)
-
-
- Mô tả: Gửi yêu cầu HTTP VÀ tự động chạy các đoạn mã kiểm thử (script) được viết trong tab Verification của đối tượng Request đó.
- Tham số: request (Đối tượng Request).
- Trả về: Đối tượng phản hồi (ResponseObject).
- Lưu ý: Hàm này tiện lợi khi bạn đã viết sẵn các assertion (xác thực) bên trong đối tượng API.
-
3. Nhóm hàm Xác thực Lược đồ (Schema Validation)
[WS] Validate JSON string against a schema
import static com.kms.katalon.core.testobject.ObjectRepository.findTestObject
import com.kms.katalon.core.webservice.keyword.WSBuiltInKeywords as WS
import com.kms.katalon.core.testobject.RequestObject
import com.kms.katalon.core.testobject.ResponseObject
RequestObject requestBook = findTestObject('book')
ResponseObject responseBook = WS.sendRequestAndVerify(responseBook)
String jsonPass =
"""
{
"\$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"list": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"name": {
"type": "string"
},
"description": {
"type": "string"
},
"slug": {
"type": "string"
},
"categories": {
"type": "array",
"items": {
"type": "string"
}
},
"picture": {
"type": "array",
"items": {
"type": "string"
}
},
"auth": {
"nullable": true,
"anyOf": [
{
"type": "object",
"properties": {
"name": {
"type": "string"
},
"email": {
"type": "string"
},
"avatarUrl": {
"type": "string"
}
},
"required": [
"name",
"email",
"avatarUrl"
]
},
{
"type": "null"
}
]
},
"status": {
"default": "AVAILABLE",
"type": "string",
"enum": [
"AVAILABLE",
"UNAVAILABLE"
]
},
"createdAt": {
"format": "date-time",
"anyOf": [
{
"format": "date-time",
"type": "number"
},
{
"format": "date-time",
"type": "string"
},
{
"format": "date",
"type": "string"
},
{
"type": "number"
}
],
"type": "number"
},
"updatedAt": {
"format": "date-time",
"anyOf": [
{
"format": "date-time",
"type": "number"
},
{
"format": "date-time",
"type": "string"
},
{
"format": "date",
"type": "string"
},
{
"type": "number"
}
],
"type": "number"
},
"price": {
"type": "number"
},
"currentPrice": {
"type": "number"
},
"viewCount": {
"type": "number"
},
"promotions": {
"type": "array",
"items": {
"type": "object",
"properties": {
"name": {
"type": "string"
},
"description": {
"type": "string"
},
"type": {
"default": "PERCENTAGE",
"type": "string",
"enum": [
"PERCENTAGE",
"FIXED_AMOUNT",
"FREE_SHIPPING"
]
},
"startDate": {
"format": "date-time",
"anyOf": [
{
"format": "date-time",
"type": "number"
},
{
"format": "date-time",
"type": "string"
},
{
"format": "date",
"type": "string"
},
{
"type": "number"
}
],
"type": "number"
},
"endDate": {
"format": "date-time",
"anyOf": [
{
"format": "date-time",
"type": "number"
},
{
"format": "date-time",
"type": "string"
},
{
"format": "date",
"type": "string"
},
{
"type": "number"
}
],
"type": "number"
},
"code": {
"type": "string"
},
"value": {
"type": "number"
}
},
"required": [
"name",
"description",
"type",
"startDate",
"endDate",
"code",
"value"
]
}
}
},
"required": [
"id",
"name",
"description",
"slug",
"categories",
"picture",
"auth",
"status",
"createdAt",
"updatedAt",
"price",
"currentPrice",
"viewCount",
"promotions"
]
}
},
"pagination": {
"type": "object",
"properties": {
"total": {
"type": "number"
},
"totalPage": {
"type": "number"
},
"currentPage": {
"type": "number"
},
"lengthData": {
"type": "number"
}
},
"required": [
"total",
"totalPage",
"currentPage",
"lengthData"
]
}
},
"required": [
"list",
"pagination"
],
"additionalProperties": false
}
"""
boolean successful = WS.validateJsonAgainstSchema(responseBook.getResponseText(), jsonPass)
-
-
- Mô tả: Kiểm tra xem một chuỗi JSON (hoặc phản hồi JSON) có tuân thủ đúng cấu trúc của một JSON Schema hay không.
- Tham số:
- jsonString: Chuỗi JSON cần kiểm tra.
- jsonSchema: Chuỗi JSON Schema dùng để đối chiếu.
- Trả về: true nếu hợp lệ, false nếu không khớp.
-
4. Nhóm hàm Xác minh (Verification - Assertions)
Các hàm này dùng để "chốt" kết quả kiểm thử (Pass/Fail). Nếu điều kiện sai, Test Case sẽ báo lỗi (Failed).
[WS] Verify Element Property Value
import static com.kms.katalon.core.testobject.ObjectRepository.findTestObject
import com.kms.katalon.core.webservice.keyword.WSBuiltInKeywords as WS
import com.kms.katalon.core.testobject.RequestObject
import com.kms.katalon.core.testobject.ResponseObject
RequestObject requestRegister = findTestObject('register')
ResponseObject responseRegister = WS.sendRequest(requestRegister)
WS.verifyElementPropertyValue(responseRegister, '.msg', 'Register successfully.')
-
-
- Mô tả: Xác minh rằng giá trị thuộc tính của một phần tử bằng đúng với giá trị mong đợi.
- Tham số:
- response: Đối tượng phản hồi.
- locator: Định vị phần tử.
- value: Giá trị mong đợi.
-
[WS] Verify Elements Count
import static com.kms.katalon.core.testobject.ObjectRepository.findTestObject
import com.kms.katalon.core.webservice.keyword.WSBuiltInKeywords as WS
import com.kms.katalon.core.testobject.RequestObject
import com.kms.katalon.core.testobject.ResponseObject
RequestObject requestBook = findTestObject('book')
ResponseObject responseBook = WS.sendRequest(responseBook)
WS.verifyElementsCount(responseBook, 'list[*]', 9)
-
-
- Mô tả: Xác minh số lượng phần tử trả về có đúng bằng con số mong đợi hay không.
- Tham số:
- response: Đối tượng phản hồi.
- locator: Định vị phần tử.
- count: Số lượng mong đợi (Integer).
-
[WS] Verify Element Text
import static com.kms.katalon.core.testobject.ObjectRepository.findTestObject
import com.kms.katalon.core.webservice.keyword.WSBuiltInKeywords as WS
import com.kms.katalon.core.testobject.RequestObject
import com.kms.katalon.core.testobject.ResponseObject
RequestObject requestBook = findTestObject('book')
ResponseObject responseBook = WS.sendRequest(responseBook)
WS.verifyElementText(responseBook, 'list[0].id', "cmhw2h4ww01ui7uamleatpdpp")
-
-
- Mô tả: Xác minh nội dung văn bản của một phần tử có giống hệt chuỗi mong đợi hay không.
- Tham số:
- response: Đối tượng phản hồi.
- locator: Định vị phần tử.
- text: Văn bản mong đợi.
-
[WS] Verify Response Status Code
import static com.kms.katalon.core.testobject.ObjectRepository.findTestObject
import com.kms.katalon.core.webservice.keyword.WSBuiltInKeywords as WS
import com.kms.katalon.core.testobject.RequestObject
import com.kms.katalon.core.testobject.ResponseObject
RequestObject requestBook = findTestObject('book')
ResponseObject responseBook = WS.sendRequest(responseBook)
WS.verifyResponseStatusCode(responseBook, 200)
-
-
- Mô tả: Xác minh mã trạng thái HTTP trả về có trùng với mã mong đợi hay không (ví dụ: mong đợi 200 OK).
- Tham số:
- response: Đối tượng phản hồi.
- code: Mã trạng thái mong đợi (Integer).
-
