สรุป
บริการจำลอง (mock services) ของ SoapUI สามารถจำลองปลายทาง SOAP หรือ REST ในเครื่อง แต่ต้องพึ่งพากระบวนการ Java, การตั้งค่าด้วยตนเอง และไม่สะดวกต่อการแชร์กับทีม หากไม่ได้ใช้เครื่องร่วมกัน ในทางกลับกัน Smart Mock ของ Apidog สร้างการตอบสนองจำลองจาก schema API ของคุณ ทำงานบนคลาวด์ และแชร์กับทีมได้โดยอัตโนมัติ
💡Apidog คือแพลตฟอร์มการพัฒนา API แบบครบวงจรฟรี พร้อม Smart Mock ในตัวที่สร้างปลายทางจำลองได้ทันทีจากคำจำกัดความ API ของคุณ โดยไม่ต้องเรียกใช้กระบวนการ Java ในเครื่อง ลองใช้ Apidog ฟรี ไม่ต้องใช้บัตรเครดิต
บทนำ
บริการจำลอง (Mock services) คือเครื่องมือสำคัญในการพัฒนา API ที่ช่วยให้คุณสามารถทดสอบโค้ดไคลเอ็นต์กับ API ที่ยังไม่พร้อมใช้งาน หรือทดสอบ edge cases (ข้อผิดพลาด, response ช้า ฯลฯ) ได้โดยไม่กระทบระบบจริง
SoapUI ให้บริการจำลองมานานแล้ว โดยรัน HTTP server ในเครื่องและตอบสนองต่อ request ตามกฎที่กำหนด แต่ปัญหาคือ mock เหล่านี้ผูกติดกับกระบวนการในเครื่อง, UI ตั้งค่ายุ่งยาก และสมาชิกทีมเข้าถึงยาก
บทความนี้จะแนะนำวิธีใช้งาน mock service ของ SoapUI อย่างเป็นขั้นตอน, ปัญหาที่พบบ่อย และเปรียบเทียบแนวทางของ Apidog Smart Mock
บริการจำลองของ SoapUI ทำงานอย่างไร
SoapUI สร้าง mock service จาก SOAP หรือ REST ที่มีอยู่ในโปรเจกต์ โดย:
- รอรับ request บนพอร์ตที่กำหนด (เช่น
http://localhost:8088/MockService) - ดักจับคำขอที่เข้ามา
- จับคู่กับ mock response ที่กำหนดไว้
- ส่ง response กลับ
สำหรับ SOAP, SoapUI สามารถสร้าง stub response อัตโนมัติจาก WSDL ของคุณได้ เหมาะสำหรับการจำลองบริการก่อนที่จะมี service ตัวจริง
การตั้งค่าบริการจำลองของ SoapUI (ทีละขั้นตอน)
สำหรับอินเทอร์เฟซ SOAP
- ในโปรเจกต์ SoapUI คลิกขวาที่ SOAP interface
- เลือก “Generate MockService”
- ตั้งค่า:
- ชื่อบริการ (เช่น “OrderService Mock”)
- หมายเลขพอร์ต (เริ่มต้น 8088)
- พาธ (เช่น
/orders)
- คลิก OK จะมี MockService node ในโปรเจกต์
- ขยาย MockService จะเห็น MockOperation สำหรับแต่ละ operation
- ดับเบิลคลิกที่ MockOperation เพื่อแก้ไข response
- แก้ไข XML response ให้ตรงกับข้อมูลที่คุณต้องการ
- กดปุ่ม play สีเขียวเพื่อ start mock server
Mock service จะรันที่ http://localhost:8088/orders สามารถใช้ URL นี้กับไคลเอนต์ได้ทันที
สำหรับอินเทอร์เฟซ REST
- คลิกขวาที่ REST interface หรือ resource
- เลือก “Add to MockService” หรือ “Generate MockService”
- ตั้งค่าพอร์ตและพาธ
- สำหรับแต่ละ resource/method กำหนด response และ status code
- เริ่ม mock service
การกำหนดค่าการส่งข้อมูล (dispatch)
ค่า default คือ SoapUI จะตอบ response แรกเสมอ หากต้องการตอบต่างกันสำหรับ input ต่างกัน ให้ใช้ “Script dispatch” (Groovy) หรือ “SEQUENCE”:
- SEQUENCE: ตอบ response ตามลำดับ
- SCRIPT: ใช้ Groovy ตรวจสอบ request และเลือก response
ตัวอย่าง:
def request = mockRequest.getRequestContent()
if (request.contains("orderId>12345")) {
return "OrderFoundResponse"
} else {
return "OrderNotFoundResponse"
}
สร้าง mock response หลายชุด (เช่น “OrderFoundResponse”, “OrderNotFoundResponse”) แล้วใช้สคริปต์ dispatch เลือก response ตามเนื้อหา request
ปัญหาทั่วไปของบริการจำลอง SoapUI
ปัญหา 1: Mock หยุดทำงานเมื่อปิด SoapUI
Mock service ทำงานร่วมกับ JVM ของ SoapUI เมื่อปิดโปรแกรม mock ก็หยุดใช้งาน สมาชิกทีมอื่นจะเข้าถึงไม่ได้
วิธีแก้ไข:
- เปิด SoapUI ทิ้งไว้
- ใช้ command-line runner:
mockservicerunner.sh -p 8088 -s "OrderService Mock" project.xml
- ใช้ VM หรือ server เฉพาะรัน mock ตลอดเวลา
แต่ทั้งหมดนี้ยังต้องติดตั้ง Java และ SoapUI
ปัญหา 2: การแชร์ mock กับทีม
mock service ที่ localhost:8088 ใช้ได้เฉพาะเครื่องนั้น ถ้าทีมต้องการใช้งานร่วมกัน ต้องตั้งค่า network, firewall, VPN หรือใช้เซิร์ฟเวอร์ที่แชร์กัน
ปัญหา 3: สคริปต์ dispatch พังเมื่อเจอ XML ซับซ้อน
สคริปต์ dispatch มักจับคู่ด้วย string Groovy บน XML ดิบ ซึ่ง namespace/prefix ของ SOAP อาจต่างกันในแต่ละไคลเอนต์ เช่น <orderId>12345</orderId> อาจกลายเป็น <ns1:orderId>12345</ns1:orderId>
วิธีแก้ต้องใช้ GroovyUtils แยกวิเคราะห์ XML เพิ่มความซับซ้อน
ปัญหา 4: Stateless mock
Mock ของ SoapUI เป็น stateless โดย default ถ้าต้องการจำลอง flow เช่น POST สร้าง resource แล้ว GET อ่าน ต้องเขียน Groovy script เก็บ state เอง (เปราะบางและยุ่งยาก)
ปัญหา 5: SSL (HTTPS)
การตั้งค่า HTTPS ต้องเตรียม keystore, config SSL เพิ่มเติมใน SoapUI และ client ต้องรองรับใบรับรอง (ซับซ้อนกว่าการใช้ HTTP ธรรมดา)
Apidog Smart Mock: เปรียบเทียบกันอย่างไร
Apidog Smart Mock สร้าง mock endpoint อัตโนมัติจาก API schema ที่คุณกำหนด
- เมื่อสร้าง API endpoint (method, path, request/response schema) ใน Apidog ระบบจะสร้าง mock endpoint บนคลาวด์ทันที
- URL mock ตัวอย่าง:
https://{your-project}.mock.apidog.io/orders/{id} - ข้อดี:
- ทำงานตลอดเวลา (cloud)
- สมาชิกทีมเข้าถึงได้ผ่าน URL เดียวกัน
- สร้าง response ตาม schema จริง
Apidog สร้างการตอบกลับจำลองอย่างไร
Apidog อ่าน response schema (JSON Schema หรือ OpenAPI) แล้วสร้าง mock data ที่ตรงกับรูปแบบ เช่น ถ้า orderId เป็น string รูปแบบ UUID ก็จะตอบ UUID, ถ้า amount กำหนด range ก็จะตอบตัวเลขในช่วงนั้น
สามารถตั้งกฎ custom เช่นให้ orderId ตอบ "test-123" เสมอได้
SOAP endpoint ใน Apidog Mock
Apidog Smart Mock เหมาะกับ REST/JSON เป็นหลัก สำหรับ SOAP สามารถสร้างคำขอและตั้งค่า response (SOAP XML) เองใน Apidog mock server ได้ แต่ไม่มี auto-stub จาก WSDL เช่น SoapUI
Stateful mocking
Apidog รองรับสคริปต์ JavaScript ใน mock response เพื่อจำลอง state หรือพฤติกรรมที่ซับซ้อนได้ เช่น ตรวจสอบ request แล้วตอบ response ที่ต่างกัน (เหมือน dispatch script ของ SoapUI แต่ใช้ JS)
การเปรียบเทียบแบบเคียงข้างกัน
| คุณสมบัติ | SoapUI Mock | Apidog Smart Mock |
|---|---|---|
| ต้องใช้ Java | ใช่ | ไม่ |
| ทำงานตลอดเวลา | เฉพาะเมื่อใช้ command-line runner | ใช่ (คลาวด์) |
| เข้าถึงได้โดยทีม | การตั้งค่าเครือข่ายด้วยตนเอง | ใช่, ผ่าน URL ที่แชร์ได้ |
| การสร้าง WSDL อัตโนมัติ | ใช่ | ไม่ |
| อิงตาม REST schema | ไม่ | ใช่ |
| การตอบกลับแบบไดนามิก | Groovy dispatch | สคริปต์จำลอง JavaScript |
| รองรับ HTTPS | การตั้งค่า keystore ด้วยตนเอง | มีในตัว |
| การจำลองแบบมีสถานะ | ผ่านตัวแปร Groovy | ผ่านสคริปต์ JavaScript |
| ฟรี | ใช่ | ใช่ |
เมื่อใดควรใช้แต่ละอย่าง
ใช้ SoapUI Mock เมื่อ:
- ต้องการ mock SOAP ที่อิง WSDL และ stub response อัตโนมัติ
- ทีมทำงานออฟไลน์หรือมีข้อจำกัด network
- ใช้ SoapUI ecosystem เดิม
ใช้ Apidog Smart Mock เมื่อ:
- จำลอง endpoint REST ต้องการแชร์กับทีมโดยไม่ต้องเซ็ต network
- ต้องการ mock server ที่ always-on
- เริ่มโปรเจกต์ใหม่และออกแบบ API contract ล่วงหน้า
- ไม่ต้องการดูแล Java/SoapUI
คำถามที่พบบ่อย
Q: รัน mock ของ SoapUI แบบไม่ใช้ GUI ได้ไหม?
A: ได้ ใช้ mockservicerunner.sh หรือ mockservicerunner.bat ระบุไฟล์โปรเจกต์และชื่อ service (ยังต้องมี Java)
Q: Apidog รองรับ SOAP mock หรือไม่?
A: รองรับบางส่วน สามารถตั้งค่า response SOAP XML เองได้ แต่ไม่มี auto-stub จาก WSDL
Q: SoapUI mock ทำ slow response ได้ไหม?
A: ได้ กำหนดค่า Delay ใน mock response (ms) Apidog ก็รองรับการตั้งค่าหน่วงเวลาเช่นกัน
Q: Apidog mock รองรับ concurrent request ปริมาณเท่าไร?
A: รองรับโหลดสำหรับ dev/test ทั่วไป ถ้าต้องการ performance test ปริมาณมาก อาจใช้ mock server เฉพาะทาง
Q: ถ้าสมาชิกทีมต้องการ mock response ต่างกันใน endpoint เดียวกัน?
A: SoapUI: แต่ละคนรัน mock ในเครื่องและปรับได้เอง
Apidog: สร้าง environment หลายชุด หรือใช้ query parameter เลือก scenario, ฟีเจอร์ "Mock expects" จับคู่ request กับ response ตามเงื่อนไขได้
Q: Mock Apidog ต้องเขียน schema ทั้งหมดก่อนหรือไม่?
A: ไม่จำเป็น ต้องมี response schema จึงจะ generate data อัตโนมัติได้ แต่สามารถตั้งค่า custom response ด้วยตนเองได้
สำหรับทีมที่ต้องการ mock service ที่แชร์และคงอยู่ตลอดเวลา รูปแบบ cloud ของ Apidog ลดภาระการดูแลและประสานงานได้มาก
Top comments (0)