End-to-End Test คืออะไร และทำด้วย Cypress ยังไง

Sharing is caring!

ในการพัฒนาเว็บไซต์หรือแอปพลิเคชันสมัยใหม่ ไม่เพียงแต่ต้อง “ทำให้มันทำงาน” เท่านั้น แต่ยังต้องแน่ใจว่า “มันยังคงทำงานได้” ทุกครั้งที่มีการเปลี่ยนแปลง นี่คือหน้าที่ของ End-to-End Testing (E2E) ซึ่งเป็นการจำลองการใช้งานจริงของผู้ใช้จากต้นทางถึงปลายทาง และเครื่องมือที่ได้รับความนิยมอย่างมากก็คือ Cypress

End-to-End Test (E2E) คืออะไร?

คือการทดสอบการทำงานของระบบทั้งระบบ ตั้งแต่ UI, Backend, Database จนถึง Service อื่น ๆ เพื่อให้มั่นใจว่าทุกส่วนทำงานร่วมกันได้อย่างถูกต้อง เช่น การจำลองผู้ใช้เข้าสู่ระบบ เพิ่มสินค้าในตะกร้า และชำระเงิน

เปรียบเทียบกับ Unit Test และ Integration Test

  • Unit Test: ทดสอบ function หรือ component เดี่ยว ๆ
  • Integration Test: ทดสอบว่าหลายส่วนทำงานร่วมกันได้
  • E2E Test: ทดสอบทั้งระบบผ่านอินเทอร์เฟซของผู้ใช้งานจริง

ข้อดีของ E2E Test

  • มั่นใจว่าระบบพร้อมใช้งานจริง
  • ตรวจจับบั๊กที่อาจพลาดจาก Unit Test
  • ช่วย QA ทำ regression test อัตโนมัติ

รู้จัก Cypress

Cypress เป็นเครื่องมือ E2E Testing แบบ Open Source ที่เขียนด้วย JavaScript และทำงานบน browser จริง (Chromium, Firefox ฯลฯ) ทำให้สามารถตรวจสอบ UI และพฤติกรรมของผู้ใช้ได้อย่างแม่นยำ

จุดเด่นของ Cypress

  • ติดตั้งง่าย ไม่ต้อง config เยอะ
  • ดูผลการรันทดสอบแบบ real-time
  • บันทึกวีดีโอได้อัตโนมัติ
  • มีคำสั่งภาษาอังกฤษอ่านง่าย เช่น cy.visit()cy.get()

เริ่มต้นติดตั้ง Cypress

npm install cypress --save-dev
npx cypress open

คำสั่งด้านบนจะเปิด Cypress GUI ที่ให้คุณสร้าง Test Case และรันได้ทันที

ตัวอย่าง E2E Test ด้วย Cypress

Test: ตรวจสอบว่าหน้า Login โหลดได้และเข้าสู่ระบบสำเร็จ

describe('Login Test', () => {
  it('should visit login page and login', () => {
    cy.visit('https://example.com/login');
    cy.get('input[name=email]').type('[email protected]');
    cy.get('input[name=password]').type('password123');
    cy.get('button[type=submit]').click();
    cy.url().should('include', '/dashboard');
  });
});

Test: ตรวจสอบว่าเพิ่มสินค้าในตะกร้าได้

describe('Shopping Cart Test', () => {
  it('should add item to cart', () => {
    cy.visit('/products');
    cy.get('.product-card').first().contains('Add to Cart').click();
    cy.get('#cart-count').should('contain', '1');
  });
});

จัดโครงสร้างไฟล์ E2E

cypress/
  └── integration/
      ├── login.spec.js
      └── cart.spec.js

การรัน Cypress แบบ Headless (CI/CD)

สามารถรัน Cypress โดยไม่เปิด UI ได้ด้วยคำสั่ง:

npx cypress run

ใช้ใน Jenkins, GitHub Actions หรือ GitLab CI ได้ทันที

ข้อควรระวังในการทำ E2E

  • ใช้เวลาในการรันนานกว่าการทดสอบแบบอื่น
  • ต้องจัดการ test data ให้เหมาะสม
  • ควรแยก test ที่สำคัญจริง ๆ เท่านั้น เพื่อประหยัดเวลา

สรุป

End-to-End Testing คือเครื่องมือสำคัญในการตรวจสอบคุณภาพระบบในมุมมองของผู้ใช้จริง และ Cypress ก็เป็นเครื่องมือที่ทั้งง่ายและทรงพลังในการทำสิ่งนี้ หากคุณอยากมั่นใจว่าระบบของคุณจะยังทำงานแม้เปลี่ยนโค้ดแล้วหลายครั้ง — การทำ E2E Test คือคำตอบที่คุณไม่ควรมองข้าม

ภาพประกอบจาก: Unsplash และ Cypress.io

Leave a Reply

อีเมลของคุณจะไม่แสดงให้คนอื่นเห็น ช่องข้อมูลจำเป็นถูกทำเครื่องหมาย *