การเทส E2E หรือ API เมื่อเรามีเทสมากขึ้นเรื่อยๆ จะมีปัญหาตามมาคือ ระยะเวลาที่ใช้ในการรันเทสเพิ่มขึ้นเรื่อยๆจนทำให้การเทสเป็นคอขวดของการพัฒนา Software อีกครั้ง โดยการแก้ไขก็มีหลากหลายวิธีเช่น ลดจำนวน E2E เทส และไปเพิ่มเทสในส่วน API หรือ Unit Test แทน หรือจะเป็นการลดขั้นตอนการ login ซ้ำๆลงด้วย Authentication State
แต่สุดท้ายเมื่อจำนวนเทสเราเพิ่มขึ้นมากๆ การช่วยลดเวลาการเทสอีกวิธีที่ควรนำมาใช้คือ Parallel Test Execution หรือการรันเทสของเราพร้อมๆกันนั่นเอง ซึ่งเปรียบเสมือนการสเกลการเทสของเราในแกน X โดยการเพิ่มจำนวน Worker ที่ใช้ในการรันเทสนั่นเอง
Playwright Parallelism
Playwright รอบรับการรันเทสแบบ Parallel เป็นค่าตั้งต้นอยู่แล้ว โดยที่เราไม่ต้องใช้ 3rd Party ใดๆมาช่วยเลย
โดยการกำหนดจำนวน Executor ของ Playwright จะเป็นการกำหนดจำนวน Worker ซึ่งเราสามารถทำได้ง่ายๆ เพียงแค่กำหนดจำนวน Worker ใน playwright.config.ts
import type { PlaywrightTestConfig } from '@playwright/test'; import { devices } from '@playwright/test'; const config: PlaywrightTestConfig = { /* Opt out of parallel tests on CI. */ workers: 2, }
ถ้าเราไม่อยากรันเทสแบบ Parallel เราสามารถเปลี่ยนจำนวน workers เป็น 1 ได้
ถ้าเราดูรูปแบบการจัดการรันเทสของ Worker จากรูปด้านล่าง
แต่ละ Worker จะทำการแบ่ง Test Spec กันไปรันเทส หมายความว่า Playwright จะรันเทสแบบ Parallel ในชั้นของ Test Spec หรือ Test Suite นั้นเอง แต่ภายใต้ Test Spec เดียวกัน Test Case จะถูกรันภายใต้ Worker เดียวกันครับ
ข้อควรระวังการรันเทสแบบ Parallel
สิ่งหนึ่งที่ต้องระวังเป็นพิเศษในการรันเทสแบบ Parallel ก็คือ Test data ที่ใช้ เช่น Test User
หลายๆเว็บไซท์ ไม่อนุญาติให้เรา login เข้าระบบ ด้วย user เดียวกันพร้อมๆกัน ดังนั้นเราจำเป็นต้องแยก Test User ออกจากกันให้ชัดเจนด้วย
ตัวอย่าง Source Code Github
Playwright Web Automated Test
เรียนรู้การทดสอบ Web Application ด้วย
Playwright และ TypeScript