Writing E2E Test with Playwright in .Net (Part I)
วันนี้ผมอยากจะเขียนถึง E2E test หรือ Integration test หรือ Feature test แล้วแต่ว่าเราจะมองอย่างไง แต่โดยรวมเราจะพูดถึง test ที่เกิดจาก client ซึ่งในที่นี้ผมหมายถึง Browser ก็แล้วกันซึ่งผมต้องการแค่ Firefox, Chromium, WebKit
แล้วปกติเราจะใช้อะไรทำกันล่ะ คำตอบแรกๆ น่าจะเป็น Selenium ซึ่งที่ทำงานผมก็ใช้ และใช้มานานแล้ว และก็มีข้อเสียเยอะพอสมควรแต่เหตุผลที่ผมไม่ชอบมี 3 ข้อ
- มันเชื่อถือไม่ค่อยได้ในหลายๆกรณี เพราะบางครั้งก็ fail แบบหาสาเหตุไม่ได้บน grid
2. กินทรัพยากรเยอะพอสมควร ดีหน่อยที่หลังๆมี headless ให้ใช้
3. ใช้เวลาเยอะในการ run test แต่ล่ะครั้ง
อีกเหตุผลที่สำคัญคือ Selenium ถึงพัฒนามาด้วย protocal เก่าอย่าง DevTools และไม่ค่อยมีการพัฒนาแล้วช่วงเวลานี้
เห้ยเดี๋ยว ที่ผมพูดมันจริงเหรอ ตามผมมาผมมีอะไรให้ดู
ขออ้างอิงคุณ somkiat ในการทดสอบ
และ testim Modernize test automation with AI
อ้าวแต่ selenium คะแนนเยอะกว่านะ ใช่ครับแต่สิ่งที่ผมต้องการคือ ความเร็ว!!!, ใช้ native api,ไม่ flaky , เชื่อถือได้ ,ใช้ทรัพยาการน้อย, debug ได้ง่าย และเสถียร และที่สำคัญสิ่งหนึ่งที่ผมกำลังทำในที่ทำงานคือ Contract test โดยต้องอาศัยการ feature ของ Intercept network activity ที่ selenium ยังไม่ support เท่าที่ตรวจสอบ ณ.ตอนนี้
Playwright กับ .NET Ecosystem
สำหรับตอนนี้ผมอยากจะแสดงให้เห็นว่า .NET เราเหมาะที่จะทำ e2e test เป็นอย่างมากเพราะเราสามารถใช้ stack ตามนี้ได้เลย
- xUnit
- c# asp.net
- platwrightsharp
แล้ว test ทุกอย่างแค่ 1 click เลย งั้นมาจับมือทำกันเลย
- clone repo จาก AspnetPlaywrightFeatureTest
- เปิด Solution ขึ้นมาเลยครับ
- กด run all เลยครับ (ตามหมายเลข 1)
การ run แบบ headfull ให้ไปที่ file : AspnetPlaywrightFeatureTest/TestConstants.cs at master · execution/AspnetPlaywrightFeatureTest (github.com) โดย set ค่า เป็น false เมื่อ run test จะเห็น browser เปิดขึ้นมาครับ
การ run แบบ headless ให้ไปที่ file : AspnetPlaywrightFeatureTest/TestConstants.cs at master · execution/AspnetPlaywrightFeatureTest (github.com) โดย set ค่า เป็น true
ตอนต่อไปจะมาอธิบายว่าทำงานอย่างไร สวัสดี….