← Blog Home

QA Checklist: ทดสอบการสมัครสมาชิก + OTP ด้วยอีเมลชั่วคราว (Disposable Email) ให้ครบทุกเคส

th 2026-02-07 13:36:51

QA Checklist: ทดสอบการสมัครสมาชิก + OTP ด้วยอีเมลชั่วคราว (Disposable Email) ให้ครบทุกเคส

ฟลว์สมัครสมาชิกและ OTP เป็นจุดที่ทำให้ผู้ใช้ “หลุด” ได้ง่ายที่สุด เพราะมันรวมหลายระบบไว้ในจุดเดียว: ฝั่งฟอร์ม, API, rate limit, anti-bot, ตัวส่งอีเมล, เทมเพลต, ลิงก์ยืนยัน, และกล่องรับเมลของผู้ใช้ ถ้า QA ทดสอบด้วยอีเมลจริงอย่างเดียว ผลอาจดูดีเกินจริง เพราะผู้ใช้จำนวนมากเลือกใช้อีเมลชั่วคราว หรือโดเมนที่ระบบมองว่าเสี่ยง ทำให้เกิดเคส “OTP ไม่เข้า” ทั้งที่ระบบปกติ

บทความนี้คือเช็กลิสต์ QA แบบใช้งานได้จริง เพื่อทดสอบ Signup + OTP เมื่อผู้ใช้ใช้ Disposable Email ครอบคลุมทั้งเคสทางเทคนิค เคส UX และเคสความปลอดภัย โดยออกแบบให้ทีม QA/PM/Dev ใช้ร่วมกันได้ และลดความสับสนระหว่าง “บั๊กจริง” กับ “ข้อจำกัดของผู้ให้บริการอีเมลชั่วคราว”

เป้าหมายการทดสอบ: ต้องตอบให้ได้ 4 ข้อนี้

  • ส่งได้ไหม: ระบบส่ง OTP/อีเมลยืนยันไปถึงกล่องรับได้สม่ำเสมอหรือไม่
  • รับได้ไหม: ผู้ใช้เห็น OTP/ลิงก์ได้ทันเวลา และนำไปใช้สำเร็จหรือไม่
  • แก้ปัญหาได้ไหม: ถ้าเมลไม่เข้า ดีเลย์ หรือถูกบล็อก UX/ข้อความช่วยเหลือเพียงพอหรือไม่
  • ปลอดภัยไหม: ป้องกันการสแปม การ brute force การโจมตีด้วยการรีเซนด์ และการรั่วของข้อมูลได้หรือไม่

เตรียมตัวก่อนเทสต์ (Pre-test Setup)

1) ชุดโดเมน/ผู้ให้บริการที่ใช้ทดสอบ

การทดสอบด้วย “เมลชั่วคราวเจ้าเดียว” มักทำให้ผลเอนเอียง เพราะแต่ละผู้ให้บริการมีคุณภาพและอัตราถูกบล็อกต่างกัน แนะนำให้เตรียมอย่างน้อย 3 กลุ่ม:

  • กลุ่ม A: Disposable Email ที่อายุสั้น — เพื่อทดสอบเคสหมดเวลา/ดีเลย์/รีเซนด์
  • กลุ่ม B: Temporary Email ที่ยืดหยุ่นกว่า — เพื่อทดสอบเคสขั้นตอนหลายหน้าและการรอเมล
  • กลุ่ม C: อีเมลปกติ (control) — เพื่อแยกปัญหาระหว่างระบบของเรา vs ผู้ให้บริการเมลชั่วคราว

2) ตั้งค่าการบันทึกหลักฐาน (Evidence)

  • บันทึกเวลา: เวลากด “ส่ง OTP” และเวลาเมลเข้าจริง เพื่อวัด latency
  • เก็บ screenshot/recording: หน้า UI, ข้อความ error, และหน้ากล่องรับเมล
  • เก็บ request_id/trace_id: ถ้าระบบมี เพื่อให้ dev ไล่ log ได้เร็ว
  • แยก environment: staging vs production เพื่อไม่สับสนเรื่อง rate limit และ provider policy

3) กำหนดเกณฑ์ผ่าน/ไม่ผ่าน (Pass/Fail Criteria)

ให้ตกลงร่วมกันก่อนว่าอะไรคือ “ล้มเหลวของระบบเรา” และอะไรคือ “ข้อจำกัดภายนอก” เช่น ถ้าโดเมนถูกบล็อกตั้งใจ ต้องแสดงข้อความที่เหมาะสมและเสนอทางเลือก ไม่ใช่ปล่อยให้ผู้ใช้ค้าง

Checklist: ฟลว์สมัครสมาชิก (Signup) ด้วย Disposable Email

1) Form Validation & UX

  • ตรวจรูปแบบอีเมลถูกต้อง (format) และแสดงข้อความชัดเจน
  • กด submit ซ้ำเร็ว ๆ แล้วไม่เกิด request ซ้อน/สมัครซ้ำ
  • สถานะ loading ชัดเจน และป้องกันการกดรัว
  • รองรับคีย์บอร์ดมือถือ: next/submit ทำงานถูกต้อง
  • กรณี network ช้า: UI ไม่ค้าง และมีการแจ้งเตือนที่เหมาะสม

2) Domain Handling (โดเมนเสี่ยง/โดเมนถูกบล็อก)

  • ถ้าโดเมนถูกบล็อก: แสดงข้อความแบบ “อธิบายได้” ไม่กล่าวโทษผู้ใช้
  • บอกเหตุผลเชิงฟังก์ชัน: เช่น “โดเมนนี้มักมีปัญหาในการรับ OTP” มากกว่า “ห้ามใช้” แบบทื่อ ๆ
  • เสนอทางเลือก: แนะนำใช้อีเมลอื่น หรือวิธีรับ OTP แบบอื่น (ถ้ามี)
  • อย่ารั่วข้อมูล policy ภายในละเอียดเกินไป (เพื่อเลี่ยงการถูกโจมตีปรับโดเมนหนี)

3) Duplicate & Reuse Cases

  • ใช้อีเมลเดียวสมัครซ้ำ: ระบบตอบกลับเหมาะสม (เช่น “อีเมลนี้ถูกใช้แล้ว”) และไม่เปิดเผยมากเกินจำเป็น
  • บัญชียังไม่ยืนยัน: สมัครซ้ำแล้วระบบจัดการสถานะอย่างไร (ส่ง OTP ใหม่, หรือให้ไปยืนยันเดิม)
  • เคส race condition: เปิดสองแท็บสมัครพร้อมกัน แล้วสถานะไม่เพี้ยน

Checklist: การส่ง OTP/อีเมลยืนยัน (Delivery)

1) ความถูกต้องของเนื้อหา OTP

  • OTP ความยาวถูกต้อง (เช่น 6 หลัก) และเป็นตัวเลข/อักษรตามที่กำหนด
  • OTP มี expiry ตาม policy และ UI บอกเวลาหรือเงื่อนไขชัดเจน
  • ข้อความในเมลไม่ทำให้สับสน: ระบุว่าใช้สำหรับ “สมัครสมาชิก/ยืนยันอีเมล” ไม่ใช่ reset password
  • ภาษาที่ใช้ถูกต้องตาม locale และไม่เพี้ยนบนมือถือ

2) Latency & Delay Handling

  • วัดเวลาตั้งแต่กดส่งจนเมลเข้าจริง ในหลายรอบทดสอบ
  • ถ้าเมลมาช้า: UI มีคำแนะนำ เช่น ตรวจสแปม/รีเฟรช/รอสักครู่
  • ถ้าครบช่วงเวลาหนึ่งแล้วยังไม่มา: มีปุ่ม resend และมีเงื่อนไขที่ไม่ทำให้สแปม
  • ระบบไม่ควรตอบว่า “ส่งแล้ว” ทั้งที่ provider ตีกลับทันทีโดยที่เรารู้ได้

3) Resend OTP & Rate Limiting

  • resend ได้ตามจำนวน/ช่วงเวลาที่กำหนด และ UI สื่อสารชัด
  • กด resend รัว ๆ: ต้องถูก throttle และไม่ทำให้ระบบส่งเมลถล่ม
  • เมื่อ resend แล้ว OTP เก่าควรเป็นอย่างไร: ใช้ได้/ใช้ไม่ได้ ต้องชัดเจน
  • ตรวจว่า OTP ล่าสุดเท่านั้นที่ valid (ถ้านโยบายเป็นแบบนั้น)

4) Bounce / Undeliverable Handling

  • กรณี provider ส่งไม่สำเร็จ: ระบบบันทึกเหตุการณ์ และสามารถอธิบายให้ผู้ใช้เข้าใจได้
  • แสดง error แบบไม่เปิดเผยข้อมูลมากเกิน: ไม่ควรบอกว่าบัญชีมีอยู่/ไม่มีอยู่ในบางฟลว์
  • มี fallback guidance: เปลี่ยนอีเมล, ลองใหม่, หรือช่องทางยืนยันอื่น (ถ้ามี)

Checklist: หน้ากรอก OTP (Verification)

1) การกรอก OTP และความทนทานต่อข้อผิดพลาด

  • รองรับการวาง (paste) OTP ทั้งชุด
  • รองรับ auto-advance ช่อง OTP (ถ้าเป็นแบบหลายช่อง) และ backspace ทำงานถูกต้อง
  • กรอกผิด: ข้อความ error ชัดเจน ไม่กล่าวโทษ และไม่รีเซ็ตฟอร์มแบบน่ารำคาญ
  • กรอกถูกแต่หมดอายุ: ต้องแยกข้อความจากกรณีกรอกผิด

2) Expiry, Session, และการนำทาง

  • OTP หมดอายุ: แสดงแนวทางต่อ เช่น resend หรือกลับไปเปลี่ยนอีเมล
  • รีเฟรชหน้า: session ยังอยู่หรือไม่ และ UX ไม่พัง
  • เปิดในแท็บใหม่: state ไม่เพี้ยน และไม่ยืนยันผิดบัญชี
  • กลับไปแก้อีเมล: flow ไม่ตัน และไม่เกิดบัญชีค้างหลายตัวโดยไม่จำเป็น

3) Messaging ที่ควรมีบนหน้ากรอก OTP

  • บอกอีเมลปลายทางแบบ mask เพื่อความมั่นใจของผู้ใช้
  • บอกให้ตรวจกล่องรับ/สแปม และบอกว่าเมลอาจใช้เวลาสักครู่
  • มีปุ่มเปลี่ยนอีเมล/ย้อนกลับที่ชัดเจน

Checklist: ความปลอดภัย (Security) ที่ต้องทดสอบจริง

1) Brute Force & Enumeration

  • ลองเดา OTP ผิดหลายครั้ง: ระบบต้องจำกัดความพยายาม (attempt limit)
  • ตรวจว่าข้อความ error ไม่เผยข้อมูลว่าอีเมลนี้มีบัญชีหรือไม่ (ป้องกัน enumeration)
  • ถ้า lock ชั่วคราว: ระยะเวลาและข้อความต้องชัดเจน และไม่เปิดช่องให้โจมตีต่อ

2) Replay & OTP Reuse

  • OTP ที่ใช้แล้ว ต้องใช้ซ้ำไม่ได้ (ถ้า policy กำหนด)
  • OTP จากรอบ resend เก่า ไม่ควรใช้ยืนยันได้ (ถ้าใช้ latest-only)
  • OTP ควรถูกผูกกับ session/transaction ที่เหมาะสม ลดโอกาสนำไปใช้กับบัญชีอื่น

3) Abuse จาก Disposable Email

  • ลองสร้างหลายบัญชีด้วยโดเมนเดียว: ระบบมีสัญญาณกันสแปมอย่างไร
  • ตรวจ rate limit ต่อ IP/อุปกรณ์/โดเมน และผลกระทบกับผู้ใช้จริง
  • ถ้ามี CAPTCHA/anti-bot: ต้องทดสอบว่ามี false-positive มากไปจนสมัครไม่ผ่านหรือไม่

4) ข้อมูลในอีเมล (Privacy)

  • อีเมล OTP ไม่ควรมีข้อมูลส่วนตัวเกินจำเป็น
  • ลิงก์ยืนยันควรมี token ที่คาดเดายาก และหมดอายุได้
  • ไม่แสดง OTP แบบชัด ๆ ใน notification ที่เสี่ยง (ถ้ามีทางเลือก)

Checklist: เคสที่คนมักลืม แต่เจอบ่อยในสนามจริง

1) เมลเข้าช้า แต่ผู้ใช้กด resend ไปแล้ว

เคสนี้ทำให้ผู้ใช้สับสนมาก เพราะอยู่ดี ๆ จะมี OTP หลายฉบับเข้าพร้อมกัน QA ต้องทดสอบว่า UI อธิบายได้ไหมว่า “ให้ใช้รหัสล่าสุด” หรือ “รหัสเดิมยังใช้ได้” และระบบ backend ตัดสินใจสอดคล้องกับข้อความบนหน้าจอหรือไม่

2) OTP ส่งแล้ว แต่ผู้ใช้ปิดแอป/ปิดแท็บ

บนมือถือ ผู้ใช้ปิดแอปง่ายมาก แล้วกลับมาใหม่ state อาจหาย QA ควรทดสอบว่าเมื่อกลับมาแล้ว flow ยังพาไปต่อได้อย่างเป็นมิตร หรืออย่างน้อยมีทางกลับไปขอ OTP ใหม่โดยไม่ต้องเริ่มทุกอย่างใหม่

3) ผู้ใช้คัดลอก OTP พร้อมช่องว่าง/ตัวอักษรพิเศษ

OTP บางครั้งถูกคัดลอกมาพร้อมเว้นวรรค หรือมีเครื่องหมายแปลก ๆ จากแอปอื่น ระบบควร trim และยอมรับ input ที่สมเหตุสมผล ไม่ควร fail แบบไร้เหตุผล

4) โดเมน Disposable ถูกบล็อกแบบเงียบ ๆ

บางระบบไม่บอกชัดว่า “โดเมนนี้รับไม่ได้” แต่ปล่อยให้ส่งแล้วดูเหมือนสำเร็จ ผลคือผู้ใช้รออย่างเดียวแล้วก็เลิกใช้ QA ต้องทดสอบว่าเมื่อมีสัญญาณส่งไม่สำเร็จ เราสามารถแจ้งผู้ใช้ให้เปลี่ยนวิธีได้เร็วแค่ไหน

แนวทางรายงานบั๊กให้แก้ไว (Bug Report Template)

  • Scenario: สมัครใหม่/เข้าสู่ระบบ/ยืนยันอีเมล/OTP
  • Email type: Disposable/Temporary/ปกติ (ระบุกลุ่ม A/B/C)
  • Steps: กดอะไรบ้าง ทีละขั้น
  • Expected: ควรเกิดอะไร
  • Actual: เกิดอะไรจริง (แนบภาพ/วิดีโอ)
  • Timestamps: เวลากดส่ง + เวลาเมลเข้า (ถ้าเข้า)
  • Network/Device: มือถือ/เดสก์ท็อป/บราวเซอร์/เครือข่าย
  • Trace: request_id/trace_id (ถ้ามี)

สรุป: ทำให้ฟลว์ OTP “ไม่พัง” แม้ผู้ใช้ใช้เมลชั่วคราว

Disposable Email ทำให้โลกความจริงซับซ้อนขึ้น เพราะมันเพิ่มความไม่แน่นอนด้าน delivery และการถูกบล็อก แต่ถ้าทีม QA มีเช็กลิสต์ที่ครอบคลุม คุณจะจับปัญหาได้ก่อนผู้ใช้ และแยกให้ออกว่าอะไรคือบั๊กของเรา อะไรคือข้อจำกัดภายนอก พร้อมออกแบบ UX ให้ช่วยผู้ใช้แก้ปัญหาได้ด้วยตัวเอง

จุดชนะไม่ได้อยู่ที่ “ส่ง OTP ได้ครั้งเดียว” แต่อยู่ที่ “ส่งได้สม่ำเสมอ + อธิบายได้เมื่อเกิดปัญหา + ปลอดภัยจาก abuse” เมื่อสามอย่างนี้ครบ ฟลว์สมัครสมาชิกของคุณจะลื่นขึ้นทันที และ conversion จะดีขึ้นแบบที่วัดได้จริง

Tip: Temporary inboxes are best for low-risk sign-ups and verification. Avoid sensitive accounts that require long-term recovery access.