ถ้าเทสรันช้า ก็รันเทสพร้อมๆกันด้วย Playwright Parallelism

0
252

การเทส 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

บทความก่อนหน้านี้Playwright ลดการ Login ซ้ำๆด้วย Authentication State
Quality On Top