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.
Giới thiệu
Các dịch vụ mock giải quyết một vấn đề phổ biến trong phát triển API: bạn muốn kiểm tra cách mã client của mình xử lý một dịch vụ trước khi dịch vụ đó sẵn sàng, hoặc bạn muốn kiểm tra các trường hợp đặc biệt (lỗi, phản hồi chậm) mà không gây ra chúng trong một hệ thống thực.
Tính năng dịch vụ mock của SoapUI đã có sẵn từ những phiên bản đầu tiên và nó hoạt động hiệu quả. Nó chạy một máy chủ HTTP cục bộ phản hồi các yêu cầu theo các quy tắc bạn cấu hình. Vấn đề là tiến trình cục bộ này gây ra trở ngại: nó ngừng hoạt động khi bạn đóng SoapUI, các thành viên khác trong nhóm không thể truy cập nó nếu không có các thủ thuật mạng, và giao diện cấu hình thì cồng kềnh.
Hướng dẫn này bao gồm cách hoạt động của dịch vụ mock SoapUI, cách thiết lập chúng, các vấn đề phổ biến mà các nhóm gặp phải và cách tiếp cận của Apidog so sánh như thế nào.
Cách hoạt động của dịch vụ mock SoapUI
SoapUI tạo dịch vụ mock từ các giao diện SOAP hoặc REST hiện có trong dự án của bạn. Dịch vụ mock:
- Lắng nghe trên một cổng cục bộ mà bạn cấu hình (ví dụ:
http://localhost:8088/MockService) - Chặn các yêu cầu đến
- Khớp yêu cầu với một "phản hồi mock" bằng cách sử dụng logic điều phối (dispatch logic)
- Trả về phản hồi đã cấu hình
Đối với các dịch vụ SOAP, SoapUI có thể tự động tạo phản hồi mock từ WSDL của bạn, tạo các phản hồi giả lập cho mỗi hoạt động. Điều này hữu ích để mô phỏng một dịch vụ trước khi nó tồn tại hoặc trước khi bạn có quyền truy cập vào endpoint thực.
Thiết lập dịch vụ mock SoapUI (từng bước)
Đối với giao diện SOAP
- Trong dự án SoapUI của bạn, nhấp chuột phải vào một giao diện SOAP trong cây dự án.
- Chọn “Generate MockService.” (Tạo MockService)
- Trong hộp thoại, cấu hình:
- Tên dịch vụ (ví dụ: “OrderService Mock”)
- Số cổng (mặc định là 8088; thay đổi nếu cổng đó đang được sử dụng)
- Đường dẫn (ví dụ:
/orders)
- Nhấp OK. SoapUI tạo một nút MockService trong cây dự án của bạn.
- Mở rộng nút MockService. Bạn sẽ thấy một “MockOperation” cho mỗi hoạt động SOAP trong giao diện.
- Nhấp đúp vào một MockOperation để mở trình chỉnh sửa phản hồi mock.
- Chỉnh sửa XML phản hồi SOAP để trả về các giá trị bạn muốn mô phỏng.
- Nhấp vào nút play màu xanh lá cây trong trình chỉnh sửa MockService để khởi động máy chủ cục bộ.
Mock của bạn hiện đang chạy tại http://localhost:8088/orders. Trỏ mã client của bạn đến URL này.
Đối với giao diện REST
- Nhấp chuột phải vào một giao diện hoặc tài nguyên REST trong cây dự án.
- Chọn “Add to MockService” (Thêm vào MockService) hoặc “Generate MockService” (Tạo MockService).
- Cấu hình cổng và đường dẫn như trên.
- Đối với mỗi tài nguyên/phương thức, cấu hình nội dung phản hồi 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, dịch vụ mock của SoapUI trả về phản hồi mock đầu tiên mà nó tìm thấy. Nếu bạn muốn các phản hồi khác nhau cho các đầu vào khác nhau, hãy cấu hình một "dispatch script" (Groovy) hoặc sử dụng loại điều phối “SEQUENCE” (TUẦN TỰ).
Điều phối theo trình tự (Sequence dispatch): Trả về các phản hồi theo một thứ tự cố định trong các lần gọi liên tiếp. Lần gọi 1 nhận phản hồi A, lần gọi 2 nhận phản hồi B.
Điều phối SCRIPT: Một script Groovy kiểm tra yêu cầu và trả về tên phản hồi dựa trên logic.
Ví dụ script điều phối:
def request = mockRequest.getRequestContent()
if (request.contains("orderId>12345")) {
return "OrderFoundResponse"
} else {
return "OrderNotFoundResponse"
}
Bạn tạo nhiều phản hồi mock được đặt tên (ví dụ: “OrderFoundResponse,” “OrderNotFoundResponse”) và script điều phối sẽ chọn phản hồi nào để trả về dựa trên nội dung yêu cầu đến.
Các vấn đề phổ biến của dịch vụ mock SoapUI
Vấn đề 1: Mock ngừng hoạt động khi SoapUI đóng
Dịch vụ mock của SoapUI chạy như một phần của tiến trình JVM của SoapUI. Khi bạn đóng SoapUI, mock sẽ ngừng hoạt động. Các thành viên trong nhóm đang sử dụng mock sẽ mất nó.
Giải pháp thay thế:
- Giữ SoapUI mở trên một máy chuyên dụng hoặc máy ảo (VM)
- Sử dụng tùy chọn máy chủ mock dòng lệnh của SoapUI:
mockservicerunner.sh -p 8088 -s "OrderService Mock" project.xml - Sử dụng một máy dùng chung cố định luôn chạy mock
Không có giải pháp nào trong số này là tối ưu. Tùy chọn dòng lệnh có ích, nhưng nó vẫn yêu cầu một máy có SoapUI và Java được cài đặt.
Vấn đề 2: Chia sẻ mock giữa các thành viên trong nhóm
Một mock trên localhost:8088 chỉ có thể truy cập được bởi người chạy nó. Để các thành viên trong nhóm truy cập cùng một mock, bạn cần quyền truy cập mạng vào máy đó (quy tắc tường lửa, thiết lập VPN) hoặc chạy mock trên một máy chủ dùng chung.
Vấn đề 3: Script điều phối bị lỗi với XML phức tạp
Script điều phối của SoapUI sử dụng Groovy để khớp chuỗi trên nội dung XML thô. Các envelope SOAP có namespace, và cùng một giá trị logic có thể xuất hiện với các tiền tố namespace khác nhau tùy thuộc vào client. Các script tìm kiếm các chuỗi văn bản như <orderId>12345</orderId> sẽ bị lỗi khi tiền tố khác nhau.
Việc khắc phục đòi hỏi phân tích cú pháp XML đúng cách trong script điều phối bằng cách sử dụng lớp GroovyUtils của SoapUI, điều này làm tăng độ phức tạp.
Vấn đề 4: Trạng thái không được duy trì giữa các lần gọi
Các dịch vụ mock của SoapUI mặc định là không trạng thái. Nếu bạn muốn mock một luồng công việc tạo-sau-đó-đọc (POST để tạo, GET để truy xuất), bạn cần một script điều phối Groovy lưu trữ trạng thái trong một biến dùng chung. Điều này hoạt động nhưng rất dễ bị lỗi.
Vấn đề 5: SSL cho dịch vụ mock
Cấu hình HTTPS cho dịch vụ mock SoapUI yêu cầu thiết lập một keystore, cấu hình cài đặt SSL của SoapUI và trỏ client đến chứng chỉ phù hợp. Điều này phức tạp hơn đáng kể so với các mock chỉ HTTP.
Apidog Smart Mock: So sánh
Cách tiếp cận mock của Apidog bắt đầu từ thiết kế API, không phải từ một tiến trình đang chạy.
Khi bạn định nghĩa một endpoint API trong Apidog (phương thức, đường dẫn, lược đồ yêu cầu, lược đồ phản hồi), Apidog tự động tạo một endpoint mock trên đám mây. Không cần cấu hình.
URL mock sẽ trông giống như: https://{your-project}.mock.apidog.io/orders/{id}
URL này:
- Luôn chạy (không có tiến trình cục bộ nào để khởi động hoặc dừng)
- Có thể truy cập được bởi mọi thành viên trong nhóm có quyền truy cập vào dự án
- Tạo phản hồi từ lược đồ bạn đã định nghĩa
Cách Apidog tạo phản hồi mock
Apidog đọc lược đồ phản hồi của bạn (JSON Schema hoặc định nghĩa phản hồi OpenAPI) và tạo dữ liệu giả lập thực tế. Một lược đồ nói rằng orderId là một string theo định dạng UUID sẽ trả về một UUID ngẫu nhiên. Một lược đồ nói rằng amount là một number giữa 0 và 10000 sẽ trả về một số trong phạm vi đó.
Bạn cũng có thể cấu hình các quy tắc mock tùy chỉnh cho các trường cụ thể. Đặt orderId luôn trả về "test-123" khi bạn cần một giá trị dự đoán được.
Endpoint SOAP trong Apidog Mock
Smart Mock của Apidog được thiết kế cho các endpoint REST với phản hồi JSON. Đối với các endpoint SOAP, việc thiết lập mock là thủ công: bạn tạo một yêu cầu trong Apidog, cấu hình một phản hồi tùy chỉnh với một SOAP envelope và sử dụng máy chủ mock của Apidog để trả về nó.
Điều này ít tự động hóa hơn so với việc tạo mock dựa trên WSDL của SoapUI, nhưng nó hoạt động tốt cho các nhóm cần một mock SOAP đơn giản mà không cần chạy một tiến trình Java cục bộ.
Mocking có trạng thái (Stateful mocking)
Apidog hỗ trợ các script phản hồi tùy chỉnh cho hành vi mock có trạng thái. Bạn có thể kiểm tra nội dung yêu cầu trong một script mock JavaScript và trả về các phản hồi khác nhau dựa trên nội dung yêu cầu, tương tự như script điều phối của SoapUI nhưng bằng JavaScript.
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ụ
Sử dụng dịch vụ mock SoapUI khi:
- Bạn cần mock một dịch vụ SOAP dựa trên WSDL và muốn các stub phản hồi được tự động tạo
- Nhóm của bạn làm việc offline hoặc sau các kiểm soát mạng nghiêm ngặt
- Bạn đã sử dụng sâu trong hệ sinh thái SoapUI và không muốn thay đổi công cụ
Sử dụng Apidog Smart Mock khi:
- Nhóm của bạn mock các endpoint REST và cần quyền truy cập chia sẻ mà không cần thiết lập mạng
- Bạn muốn các máy chủ mock luôn chạy mà không cần can thiệp thủ công
- Bạn đang bắt đầu một dự án mới và định nghĩa hợp đồng API trước khi triển khai
- Bạn muốn tránh cài đặt và duy trì môi trường Java cho các dịch vụ mock
Câu hỏi thường gặp
Tôi có thể chạy dịch vụ mock SoapUI mà không cần GUI không?Có. SoapUI bao gồm mockservicerunner.sh (Linux/macOS) và mockservicerunner.bat (Windows). Chạy chúng với đường dẫn tệp dự án và tên dịch vụ. Bạn vẫn cần cài đặt Java, nhưng không cần mở GUI.
Apidog có hỗ trợ dịch vụ mock SOAP không?Một phần. Bạn có thể cấu hình phản hồi tùy chỉnh với SOAP XML trong máy chủ mock của Apidog. Bạn sẽ không nhận được tính năng tự động tạo phản hồi stub dựa trên WSDL. Đối với các nhóm có giao diện SOAP đã được hiểu rõ, việc thiết lập thủ công là có thể quản lý được.
Dịch vụ mock SoapUI có thể mô phỏng phản hồi chậm không?Có. Trong cấu hình phản hồi mock, đặt giá trị “Delay” (Độ trễ) theo mili giây. Apidog cũng hỗ trợ cấu hình độ trễ phản hồi để mô phỏng điều kiện mạng chậm.
Apidog có thể xử lý bao nhiêu yêu cầu mock?Máy chủ mock đám mây của Apidog xử lý các tải phát triển và kiểm thử điển hình. Đối với kiểm thử hiệu năng với khối lượng lớn, một công cụ máy chủ mock chuyên dụng có thể phù hợp hơn.
Điều gì xảy ra nếu hai thành viên trong nhóm cần các phản hồi mock khác nhau cho cùng một endpoint?Trong SoapUI, mỗi người chạy mock cục bộ riêng của họ và có thể cấu hình độc lập. Trong Apidog, bạn có thể tạo nhiều môi trường hoặc sử dụng tham số truy vấn để chọn các kịch bản phản hồi khác nhau. Tính năng “Mock expects” (Mock mong đợi) của Apidog cho phép bạn khớp các điều kiện yêu cầu cụ thể với các phản hồi cụ thể.
Mock của Apidog có yêu cầu API phải được định nghĩa đầy đủ trước không?Lược đồ phản hồi giúp Apidog tạo dữ liệu thực tế, nhưng bạn có thể tạo các phản hồi mock thủ công mà không cần lược đồ đầy đủ. Chỉ cần định nghĩa endpoint, đặt nội dung phản hồi tùy chỉnh và mock sẽ hoạt động.
Dịch vụ mock của SoapUI hoạt động tốt nhưng gắn liền với một tiến trình Java cục bộ. Đối với các nhóm hiện đại cần các mock ổn định, có thể chia sẻ, cách tiếp cận dựa trên đám mây của Apidog loại bỏ gánh nặng phối hợp.
