ป้ายกำกับ: Maximum Execution Time

Playwright: tests ชื่อไฟล์, folderPlaywright: tests ชื่อไฟล์, folder

ในฐานะ Senior Architect การทำความเข้าใจว่า Test Framework ทำงานอย่างไรเป็นสิ่งสำคัญอย่างยิ่ง โดยเฉพาะอย่างยิ่งเมื่อต้องจัดการกับ Test Suite ขนาดใหญ่ Playwright มีกลไกที่ชัดเจนในการกำหนดลำดับการรัน Test (Test Execution Order) ซึ่งไม่ได้ขึ้นอยู่กับว่าคุณเขียนไฟล์นั้นก่อนหรือหลัง แต่ขึ้นอยู่กับโครงสร้างชื่อไฟล์และโฟลเดอร์เป็นหลัก บทความนี้จะเจาะลึกหลักการทำงานเพื่อช่วยให้คุณควบคุมลำดับการรัน Test ได้อย่างแม่นยำ


📂 1. การกำหนดลำดับการรัน Test ด้วยโครงสร้าง Folder และ File

Playwright จะทำงานในรูปแบบของการสแกนหาไฟล์ Test ทั้งหมดในไดเรกทอรีที่กำหนด และจะใช้หลักการจัดเรียงตามลำดับตัวอักษร (Alphabetical Sorting) ทั้งในระดับโฟลเดอร์และระดับไฟล์

  1. ชื่อ Folder: Playwright จะรัน Test Suite ที่อยู่ในโฟลเดอร์ที่ขึ้นต้นด้วยตัวอักษร (A-Z) หรือตัวเลข (0-9) ก่อน
  2. ชื่อไฟล์: ภายในโฟลเดอร์เดียวกัน การรัน Test จะเรียงตามชื่อไฟล์ที่เรียงตามลำดับตัวอักษรเช่นกัน

💡 Best Practice: การควบคุมลำดับด้วยตัวเลขนำหน้า

หากคุณต้องการให้ Test Suite บางตัวทำงานตามลำดับขั้นตอนที่กำหนด (เช่น Setup -> Feature A -> Cleanup) คุณควรใช้ตัวเลขนำหน้าชื่อไฟล์ (Numeric Prefixes) เพื่อบังคับลำดับการรัน ซึ่งเป็นเทคนิคที่นักพัฒนาอาวุโสนิยมใช้มากที่สุด

TypeScript

// 01-setup.spec.ts (รันก่อนเสมอ)

TypeScript

// 02-feature-a.spec.ts

TypeScript

// 03-cleanup.spec.ts (รันหลังสุด)

🔢 2. ลำดับการรันภายในไฟล์เดียว (Sequential Execution)

เมื่อคุณเปิดไฟล์ Test เดียว (เช่น login.spec.ts) และเขียนคำสั่ง test(...) ไว้หลาย Block Playwright จะรัน Test เหล่านั้นตามลำดับที่ปรากฏในไฟล์ โดยรันจากบนลงล่าง (Top-to-Bottom) เสมอ

TypeScript

test('Test 1: Login', async ({ page }) => { /* ... */ });

TypeScript

test('Test 2: Logout', async ({ page }) => { /* ... */ });

ลำดับนี้เป็นแบบเชิงเส้น (Sequential) หมายความว่า Test 2 จะไม่เริ่มจนกว่า Test 1 จะเสร็จสมบูรณ์

⚡ 3. ข้อควรระวัง: ผลกระทบจาก Parallelism

นี่คือจุดที่ผู้พัฒนาต้องระมัดระวังที่สุด เมื่อคุณตั้งค่าให้ Playwright ทำงานแบบขนาน (Parallelism) โดยการเพิ่มจำนวน Worker (เช่น npx playwright test --workers=4) Playwright จะพยายามกระจาย Test หลาย ๆ ไฟล์ให้ทำงานพร้อมกันในเวลาเดียวกัน

ผลลัพธ์: ลำดับการรัน Test จะกลายเป็นแบบไม่กำหนด (Non-deterministic) เนื่องจาก Test ต่าง ๆ จะถูกสุ่มกระจายไปทำงานใน Worker หลายตัวพร้อมกัน หาก Test ของคุณมีการพึ่งพาผลลัพธ์ (State Dependency) จาก Test ก่อนหน้า การเปิด Parallelism อาจทำให้ Test ล้มเหลวได้

✅ บทสรุปและข้อแนะนำจาก Senior Architect

เพื่อให้มั่นใจว่า Test Suite ของคุณมีความเสถียรและรันตามลำดับที่ต้องการเสมอ:

  1. ใช้ Numeric Prefixes: ใช้ 01-, 02- เพื่อควบคุมลำดับการรัน Test Suite ที่สำคัญ
  2. ระวัง State Dependency: หาก Test A ต้องใช้ข้อมูลที่สร้างโดย Test B ห้ามเปิด Parallelism เด็ดขาด หรือให้ใช้ Fixtures เพื่อจัดการสถานะข้อมูลแทน
  3. ทำความเข้าใจขอบเขต: จำไว้ว่าการจัดเรียงตามตัวอักษรคือหลักการพื้นฐาน แต่ Parallelism คือข้อยกเว้นที่ต้องระวัง

การเข้าใจกลไกเหล่านี้จะช่วยให้คุณออกแบบ Test Suite ที่มีประสิทธิภาพและสามารถพึ่งพาได้ในสภาพแวดล้อมการพัฒนาที่ซับซ้อน