PlusMagi's Blog By Pitt Phunsanit API,Automated Testing,Backend,Network,Playwright,REST,Testing E2E Testing with Playwright: การทำ API Testing และการ Mock Network Requests / Intercept Calls

E2E Testing with Playwright: การทำ API Testing และการ Mock Network Requests / Intercept Calls

ในโลกของการพัฒนาซอฟต์แวร์ยุคใหม่ แอปพลิเคชันส่วนใหญ่มักถูกสร้างขึ้นด้วยสถาปัตยกรรมแบบ Microservices และพึ่งพาการสื่อสารผ่าน API ภายนอกจำนวนมาก การทดสอบที่ครอบคลุมจึงไม่ใช่แค่การคลิกบนหน้าจอ (UI) เท่านั้น แต่ยังต้องมั่นใจว่าทุกการเรียกข้อมูล (Network Calls) ทำงานได้อย่างถูกต้องและเสถียร แม้ว่าบริการภายนอกจะล่มหรือตอบสนองช้าก็ตาม


เจาะลึกรายละเอียดและประเด็นสำคัญ

หัวใจของการทดสอบ End-to-End (E2E) ที่มีประสิทธิภาพคือความสามารถในการแยกส่วนการทดสอบออกจากสภาพแวดล้อมภายนอกที่ไม่แน่นอน การใช้เครื่องมืออย่าง Playwright ทำให้เราก้าวข้ามข้อจำกัดเดิมๆ โดยไม่ได้จำกัดแค่การตรวจสอบ DOM แต่ยังสามารถเข้าถึงระดับ Network Layer ได้โดยตรง เราสามารถ “ดักจับ” (Intercept) และ “แก้ไข” (Mock) ข้อมูลที่แอปพลิเคชันเรียกจาก API ต่างๆ ก่อนที่จะไปถึงปลายทางจริง

การทำ Mocking Network Requests ไม่เพียงแต่ช่วยให้ชุดทดสอบของเราทำงานได้เร็วขึ้นอย่างมากเท่านั้น แต่ยังเพิ่มความน่าเชื่อถือ (Reliability) ให้กับ Test Suite อย่างยิ่ง เพราะเราสามารถจำลองสถานการณ์ที่ยากต่อการเข้าถึง เช่น การตอบกลับด้วยรหัส 500, ข้อมูลว่างเปล่า, หรือ Latency สูง โดยไม่ต้องพึ่งพาเซิร์ฟเวอร์จริง ทำให้มั่นใจได้ว่า UI ของเราจะจัดการกับข้อผิดพลาดเหล่านั้นได้อย่างสง่างาม

import { test, expect } from ‘@playwright/test’; test(‘should mock API call and verify UI behavior’, async ({ page }) => { // 1. Intercept the specific API endpoint await page.route(‘**/api/v1/user/*’, async route => { // 2. Mock the response data instead of letting it hit the real server await route.fulfill({ status: 200, contentType: ‘application/json’, body: JSON.stringify({ id: 1, name: ‘Mock User’ }), // Controlled mock data }); }); // Navigate to the page which triggers the API call await page.goto(‘/user-profile’); // Assert that the UI correctly displays the mocked data await expect(page.getByText(‘Welcome, Mock User’)).toBeVisible(); });

การนำไปประยุกต์ใช้ในชีวิตและการทำงานยุคใหม่

  • การเร่งความเร็วใน CI/CD Pipeline: การ Mocking ช่วยให้ชุดทดสอบ E2E สามารถรันได้อย่างรวดเร็วและสม่ำเสมอ ไม่ว่า API ภายนอกจะมีการเปลี่ยนแปลงหรือล่มหรือไม่ก็ตาม ทำให้สามารถรวม (Integrate) และส่งมอบ (Deploy) ฟีเจอร์ใหม่ๆ ได้บ่อยขึ้นอย่างมั่นใจ
  • การทดสอบ Edge Cases ที่ซับซ้อน: เราสามารถจำลองสถานการณ์ที่เกิดขึ้นได้ยากในสภาพแวดล้อมจริง เช่น การตอบกลับด้วยข้อมูลที่ไม่คาดคิด (Malformed Data) หรือการหมดเวลา (Timeout) เพื่อให้แน่ใจว่าระบบของเรามีความทนทาน (Resilience) สูงสุด

ในฐานะ Senior Developer การยกระดับชุดทดสอบจากแค่การตรวจสอบ UI ไปสู่การควบคุม Network Layer ด้วย Playwright คือกุญแจสำคัญในการสร้างผลิตภัณฑ์ที่แข็งแกร่งและพร้อมรับมือกับความผันผวนของโลกดิจิทัลได้อย่างแท้จริง นี่คือการลงทุนด้านคุณภาพโค้ดที่จะช่วยลดภาระงานในการแก้ไขบั๊กใน Production ได้อย่างมหาศาล


อ่านเพิ่มเติม