TÓM TẮT
Các dịch vụ mock của SoapUI mô phỏng các endpoint SOAP hoặc REST cục bộ, nhưng chúng yêu cầu một tiến trình Java đang chạy, cấu hình điều phối thủ công và không thể chia sẻ giữa các thành viên trong nhóm nếu không có máy dùng chung. Smart Mock của Apidog tạo các phản hồi mock từ lược đồ API của bạn, chạy trên đám mây và tự động chia sẻ với nhóm của bạn.
💡Apidog là một nền tảng phát triển API tất cả trong một miễn phí với Smart Mock tích hợp, tạo các endpoint mock tức thì từ các định nghĩa API của bạn mà không cần chạy một tiến trình Java cục bộ. Hãy dùng thử Apidog miễn phí, không yêu cầu thẻ tín dụng.
Giới thiệu
Dịch vụ mock giúp bạn kiểm thử client API mà không phụ thuộc vào dịch vụ backend thực, hoặc mô phỏng các trường hợp đặc biệt như lỗi, phản hồi chậm mà không tác động đến hệ thống thật.
SoapUI cung cấp dịch vụ mock từ rất sớm, chạy một HTTP server cục bộ phản hồi theo cấu hình. Tuy nhiên, tiến trình này chỉ hoạt động khi SoapUI mở, khó chia sẻ cho nhóm, và giao diện cấu hình phức tạp.
Bài viết này hướng dẫn chi tiết cách tạo mock với SoapUI, các vấn đề thực tế khi sử dụng, và so sánh cách tiếp cận với Apidog Smart Mock.
Cách hoạt động của dịch vụ mock SoapUI
SoapUI tạo dịch vụ mock từ các interface SOAP hoặc REST trong dự án của bạn:
- Lắng nghe trên cổng cục bộ bạn cấu hình (ví dụ:
http://localhost:8088/MockService) - Chặn các request đến
- Khớp request với "mock response" theo logic điều phối
- Trả về response đã cấu hình
Với dịch vụ SOAP, SoapUI tự động tạo response mock từ WSDL, rất hữu ích để mô phỏng dịch vụ trước khi backend hoàn thiện.
Thiết lập dịch vụ mock SoapUI (từng bước)
Đối với giao diện SOAP
- Trong dự án SoapUI, nhấp phải vào interface SOAP trong cây dự án.
- Chọn Generate MockService.
- Cấu hình:
- Tên dịch vụ (ví dụ:
OrderService Mock) - Số cổng (8088 mặc định, thay đổi nếu cần)
- Đường dẫn (ví dụ:
/orders)
- Tên dịch vụ (ví dụ:
- Nhấn OK. Một node MockService sẽ xuất hiện trong cây dự án.
- Mở rộng node MockService, sẽ có một MockOperation cho mỗi operation SOAP.
- Nhấp đúp vào MockOperation để chỉnh sửa response mock.
- Chỉnh sửa XML response để trả về dữ liệu mong muốn.
- Nhấn nút play xanh lá trong MockService Editor để khởi động server cục bộ.
Endpoint mock sẽ chạy tại http://localhost:8088/orders. Chuyển hướng client của bạn tới URL này để kiểm thử.
Đối với giao diện REST
- Nhấp phải vào interface hoặc resource REST trong cây dự án.
- Chọn Add to MockService hoặc Generate MockService.
- Cấu hình cổng và đường dẫn.
- Với mỗi resource/phương thức, cấu hình nội dung response mock và mã trạng thái.
- Khởi động dịch vụ mock.
Cấu hình điều phối (dispatch)
Theo mặc định, SoapUI trả về response đầu tiên tìm thấy. Để trả về response khác nhau tùy input, hãy cấu hình "dispatch script" (Groovy) hoặc chọn dispatch type SEQUENCE.
- Sequence dispatch: Trả về các response tuần tự qua từng lần gọi.
- Script dispatch: Script Groovy kiểm tra request và trả về tên response dựa trên logic.
Ví dụ script điều phối Groovy:
def request = mockRequest.getRequestContent()
if (request.contains("orderId>12345")) {
return "OrderFoundResponse"
} else {
return "OrderNotFoundResponse"
}
Tạo nhiều mock response (ví dụ: OrderFoundResponse, OrderNotFoundResponse), script sẽ chọn response phù hợp dựa trên request.
Các vấn đề phổ biến của dịch vụ mock SoapUI
Vấn đề 1: Mock ngừng hoạt động khi đóng SoapUI
Mock chạy trong JVM của SoapUI. Đóng SoapUI là mock dừng. Thành viên khác sẽ không truy cập được.
Giải pháp:
- Giữ SoapUI luôn mở trên một máy chuyên dụng hoặc VM
- Sử dụng mock server runner dòng lệnh:
mockservicerunner.sh -p 8088 -s "OrderService Mock" project.xml
- Đặt mock trên server chung
Tuy nhiên, mọi giải pháp đều yêu cầu cài đặt Java và SoapUI.
Vấn đề 2: Chia sẻ mock cho nhóm
Mock trên localhost:8088 chỉ truy cập được máy cài SoapUI. Để chia sẻ, cần setup mạng, firewall hoặc VPN, hoặc deploy trên server chung.
Vấn đề 3: Script điều phối lỗi với XML phức tạp
Script Groovy thường so khớp chuỗi XML thô. Với namespace biến đổi, so khớp thủ công sẽ lỗi. Phải sử dụng GroovyUtils để parse XML phức tạp, tăng độ khó và dễ sai sót.
Vấn đề 4: Không duy trì trạng thái giữa các lần gọi
SoapUI mock mặc định stateless. Nếu muốn mô phỏng luồng tạo-đọc (POST, rồi GET), phải viết script Groovy lưu biến trạng thái. Cách này dễ lỗi và khó bảo trì.
Vấn đề 5: Cấu hình SSL phức tạp
Mock HTTPS trong SoapUI cần cấu hình keystore, cài đặt SSL, và client phải tin cậy cert. Quá trình phức tạp hơn nhiều so với HTTP.
Apidog Smart Mock: So sánh
Với Apidog, mock dựa trên thiết kế API, không phụ thuộc vào tiến trình cục bộ.
Khi định nghĩa endpoint API (phương thức, đường dẫn, lược đồ), Apidog tự động tạo endpoint mock trên cloud, không cần cấu hình thủ công.
Ví dụ URL mock:
https://{your-project}.mock.apidog.io/orders/{id}
Đặc điểm:
- Luôn chạy 24/7, không cần bật/tắt tiến trình
- Nhóm dễ dàng chia sẻ thông qua URL
- Phản hồi dựa theo lược đồ bạn định nghĩa
Cách Apidog tạo phản hồi mock
Apidog dùng JSON Schema/OpenAPI để sinh dữ liệu mock thực tế. Ví dụ:
-
orderIdkiểustringđịnh dạng UUID → trả về UUID ngẫu nhiên -
amountkiểunumbergiới hạn 0-10000 → trả về số ngẫu nhiên trong khoảng
Bạn có thể custom quy tắc mock cho từng field (ví dụ: luôn trả về orderId = "test-123").
Endpoint SOAP trong Apidog Mock
Apidog Smart Mock chuyên cho REST/JSON. Nếu cần mock SOAP:
- Tạo request trong Apidog
- Cấu hình response tùy chỉnh với SOAP envelope
- Máy chủ mock Apidog sẽ trả về response này
Không tự động sinh mock từ WSDL như SoapUI, nhưng đủ cho nhu cầu mock SOAP đơn giản.
Mocking có trạng thái (Stateful mocking)
Apidog hỗ trợ script response mock bằng JavaScript, cho phép kiểm tra nội dung request và trả về response động, tương tự như dispatch script của SoapUI (nhưng dùng JS).
So sánh song song
| Tính năng | SoapUI Mock | Apidog Smart Mock |
|---|---|---|
| Yêu cầu Java | Có | Không |
| Luôn bật | Chỉ với trình chạy dòng lệnh | Có (đám mây) |
| Có thể truy cập bởi nhóm | Mạng thủ công | Có, qua URL chia sẻ |
| Tự động tạo WSDL | Có | Không |
| Dựa trên lược đồ REST | Không | Có |
| Phản hồi động | Điều phối Groovy | Script mock JavaScript |
| Hỗ trợ HTTPS | Thiết lập keystore thủ công | Tích hợp sẵn |
| Mocking có trạng thái | Qua biến Groovy | Qua script JavaScript |
| Miễn phí | Có | Có |
Khi nào nên sử dụng từng công cụ
Dùng SoapUI Mock khi:
- Cần mock SOAP từ WSDL và muốn sinh stub tự động
- Làm việc offline hoặc mạng nội bộ nghiêm ngặt
- Đã quen thuộc và tích hợp sâu với SoapUI
Dùng Apidog Smart Mock khi:
- Chủ yếu mock REST endpoint, cần chia sẻ nhanh cho nhóm
- Muốn mock server luôn chạy, không phụ thuộc tiến trình cá nhân
- Bắt đầu dự án mới, định nghĩa hợp đồng API trước khi code
- Tránh cài đặt, bảo trì môi trường Java cho mock
Câu hỏi thường gặp
Tôi có thể chạy dịch vụ mock SoapUI không cần GUI không?
Có, dùng mockservicerunner.sh (Linux/macOS) hoặc mockservicerunner.bat (Windows) với file project và tên service. Vẫn cần Java cài đặt, không cần GUI.
Apidog có hỗ trợ mock SOAP không?
Một phần. Bạn tự cấu hình response SOAP XML trong Apidog mock server, không tự động sinh từ WSDL. Nếu biết trước giao diện SOAP, thao tác thủ công vẫn khả thi.
SoapUI mock có mô phỏng response chậm được không?
Có. Cấu hình trường "Delay" (ms) trong mock response. Apidog cũng hỗ trợ cấu hình độ trễ response để mô phỏng mạng chậm.
Apidog mock chịu được bao nhiêu request?
Cloud mock server của Apidog phù hợp cho dev/test thông thường. Để kiểm thử tải lớn, cân nhắc giải pháp mock server chuyên dụng.
Nếu hai thành viên cần mock response khác nhau cùng một endpoint thì sao?
SoapUI: mỗi người chạy mock riêng, cấu hình riêng.
Apidog: tạo nhiều môi trường hoặc dùng query param để chọn kịch bản response khác nhau. Tính năng "Mock expects" cho phép khớp điều kiện request với response cụ thể.
Apidog mock có bắt buộc phải định nghĩa đầy đủ schema API không?
Không bắt buộc. Schema giúp tạo dữ liệu thực tế, nhưng bạn có thể tạo mock response thủ công chỉ với endpoint và response content.
Dịch vụ mock của SoapUI hiệu quả nhưng phụ thuộc vào tiến trình cục bộ và Java. Với nhóm hiện đại cần mock ổn định, dễ chia sẻ, giải pháp cloud như Apidog giúp giảm gánh nặng cấu hình và phối hợp.
Top comments (0)