169 wordpress feature image (2)

ทำไม Automation Test ที่เขียนถูก ถึงยังเชื่อไม่ได้เสมอไป

👻❌ เคยเจอผีหลอกตอนรัน Automation Test กันมั้ยคะ

รันบนเครื่องตัวเองกี่รอบก็ผ่านหมด ผ่านตลอด ผ่านทุกครั้ง ไม่เคยติดปัญหาอะไร
แต่พอเอาขึ้นไปรันรวมกับ Regression Test เท่านั้นแหละ
พังยับ!!!

แล้วเราเอามาลองรันบนเครื่องตัวเองหลังจากเห็นมันพัง
เอ้า ก็ผ่าน

สุดท้ายนั่งกุมหัว ไม่รู้จะทำยังไง 🤦‍♀️

แค่นั้นยังไม่พอ พอเป็นแบบนี้บ่อยๆ กลายเป็น Automation Test ที่ไม่ stable และไม่มีใครเชื่อมันซะงั้น
สุดท้ายกลับมานั่งเช็ค manual เหมือนเดิม เพราะผล Automation Test มันเชื่อไม่ได้

อวสาน QA ร่างทอง

Test ที่รันอยู่ก็ไม่มีใครเชื่อ
ทีมก็ไม่แบ่งเวลาให้เขียน Automation Test เพราะไม่เห็นประโยชน์
สุดท้ายก็รัน Manual เหมือนเดิม

ยังค่ะ ยังไม่จบแค่นี้ เราไม่อวสานกันง่ายๆ แบบนี้หรอกนะคะ
วันนี้พี่กิ่งจะพามาเจาะลึก “หนึ่งปัญหาสำคัญ” ที่ทำให้เกิดเหตุการณ์แบบนี้ได้ค่ะ
บางทีมันไม่ได้เกิดจากเขียนโค้ดไม่ดี หรือระบบมีบั๊กเยอะอะไรเลยค่ะ
แต่มันอาจจะเกิดจากปัญหาง่ายๆ จากสิ่งที่เรียกว่า “Test Data” ของเรา ที่มันไม่ independent
คือไม่เป็นอิสระต่อกัน และยังต้องพึ่งพาข้อมูลหรือผลลัพธ์จากส่วนอื่นๆ

.

💡 ลองดูตัวอย่างสถานการณ์นี้นะคะ

สมมติว่าเรากำลังทดสอบระบบเว็บช็อปปิ้ง ในส่วนฟีเจอร์ Add Product ที่เป็นการเพิ่มสินค้าใหม่เข้าไปในระบบ
แล้วเราก็กำลังทำ Automation Test Case สำหรับกดเพิ่มสินค้าใหม่ แล้วก็เช็คว่าสินค้านั้นถูกเพิ่มเข้าไปได้สำเร็จ

Average QA

Test Case ถูกทุกอย่าง แต่ตั้งชื่อสินค้าแบบ Fix ไปเลยว่า “กระเป๋าสะพาย 1”
1. เปิดไปที่หน้า Add Product
2. เพิ่มสินค้า ชื่อ: กระเป๋าสะพาย 1, ราคา: 399
3. Verify ว่ามี “กระเป๋าสะพาย 1” อยู่ในระบบ

ก็เหมือนจะไม่มีอะไรใช่มั้ยคะ ลองจินตนาการต่อไปอีก

วันที่ 1: เขียนเคสนี้เสร็จ รันผ่าน เยี่ยม! ✅

วันที่ 2: Test พัง! ทั้งๆที่ไม่ได้แก้อะไรเลย

แต่มันพังเพราะไม่สามารถเพิ่มสินค้าชื่อซ้ำได้ ก็เลยบอกว่า Test นี้เฟล ทั้งๆที่จริงๆมันควรจะผ่าน

.

หรืออีกหนึ่งตัวอย่างที่อาจจะเจอกันบ่อยๆ แต่ไม่รู้ตัว

วันที่ 1: เขียนเคสนี้เสร็จ รันผ่าน เยี่ยม! ✅

วันที่ 2:  มีการ Deploy เวอร์ชั่นใหม่ที่ไปทำให้ส่วนนี้พัง ทำให้ Add Product ไม่ได้

แต่… Regression เราก็รันผ่านเหมือนเดิม แล้วเราก็ไม่รู้ว่ามันพัง จนกระทั่ง user มาบอก

ทำไมเป็นแบบนั้น…
เพราะมันไปเจอ “กระเป๋าสะพาย 1” ที่เราเพิ่มไว้ตั้งแต่วันก่อน แล้วก็บอกว่าผ่าน

.

Test ที่ดี นอกจากจะต้องคอยดูให้ Regression มันรันผ่านตลอดแล้วเนี่ย
มันควรจะต้องเฟลด้วย เวลาที่มีบั๊กเกิดขึ้นจริงๆ
แต่เคสนี้มันไม่เฟล! เพราะมันดันไปเจอข้อมูลเก่าที่เคยใช้ไปแล้ว

และสิ่งนี้จริงๆคือสิ่งที่สำคัญที่สุดเลยใช่มั้ยคะ
เรามี Regression Test เพื่อให้มั่นใจว่าของเดิมมันไม่มีอะไรพัง
และเมื่อไหร่ที่มันพัง เราควรจะต้องรู้ให้เร็วที่สุด

แต่ตอนนี้มันบอกไม่ได้ ก็ถือว่าเป็น Automation Test ที่ใช้ไม่ได้

.

🛡️ 3 หลักการจัดการ Test Data ฉบับ “QA ร่างทอง”

ถ้าอยากให้ Script ของเรา stable สุดๆ เชื่อได้ทุกครั้งที่กดรัน
เราก็ต้องอัพเกรดการจัดการ Test Data ของเราให้ร่างทองไปด้วยค่ะ

.

1️⃣ Static Data ใช้ให้ถูกงาน

พวกข้อมูลที่ Fix ตายตัว เช่น User Role, ประเภทสินค้า อะไรที่เรารู้แน่นอนว่ามันจะไม่เปลี่ยนแปลง ใช้ data ที่กำหนดตายตัวได้เลยค่ะ เช่น keyword สำหรับ search

✅ ใช้ได้เมื่อ test ไม่ต้องการ uniqueness (ที่ต้องไม่ซ้ำกับใคร)
เช่น ค้นหาด้วย keyword “กระเป๋า” ไม่ว่าจะรันกี่ครั้ง ก็ใช้คำเดิมได้

❌ ห้ามใช้เด็ดขาด ถ้า data ต้องเป็นของใหม่ทุกครั้ง
เช่น สร้าง account, สร้างสินค้า ถ้าใช้ชื่อเดิมซ้ำ Test จะไม่รู้ว่า data นี้มาจากไหน

.

2️⃣ สร้าง unique data ทุกครั้ง
ทุกครั้งที่รัน ก็ให้มันสร้าง Test Data ใหม่ไปเลยแทนที่จะ hardcode เอาไว้
ใช้พวก Library Faker ช่วยสุ่มชื่อ หรือ Timestamp จะช่วยได้เยอะมากค่ะ

เช่น แทนที่จะใช้ “กระเป๋าสะพาย 1” 
เราก็ใช้ กระเป๋าสะพาย + timestamp (เช่น กระเป๋าสะพาย + dayjs().format('YYYYMMDDHHmmss')
ก็จะได้ “กระเป๋าสะพาย 202605261914” มาใช้แทน

หรือจะใช้ร่วมกับ Faker ที่ช่วยสุ่มชื่อก็ได้

faker.commerce.productName() + moment().format('YYYYMMDDHHmmss') 

เราก็จะได้ “Soft Gloves 202605261914” มาใช้ ก็จะบอกได้เลยว่า data นี้เพิ่งสร้างจริงๆ

.

3️⃣ แยก Data Layer ออกจาก Action Layer

Action Layer คือพวก command ที่บอกว่าเราจะทำอะไรกับแอพของเรา
ถ้าเราทำเป็น Page Object Model ส่วนใหญ่ก็จะเป็น function ที่อยู่ใน Page Class ของเรานั่นเองค่ะ

❌ ซึ่งเราไม่ควรสร้างหรือเตรียมข้อมูลในนี้เด็ดขาด เพราะหน้าที่ของ Page Class คือจัดการกับสิ่งที่ทำได้ในหน้านั้นเท่านั้น
มันไม่จำเป็นต้องรู้เรื่อง Test Data เลย เราไม่ควรเอา Logic ไปปนกัน
เพราะจะทำให้ reuse ยาก และ ทำความเข้าใจยากขึ้นด้วยค่ะว่า Test นั้นใช้ data อะไร

✅ วิธีที่ควรทำคือ จัดการ data ทั้งหมด ใน Steps Definition ค่ะ หรือ layer ที่เป็น Test Case ของเราจริงๆ
แล้วค่อย pass ข้อมูลที่เราจะใช้ส่งเข้าไปเป็น parameter แทนค่ะ วิธีนี้จะทำให้โค้ดของเรา maintain ง่ายขึ้นมาก และ Test Case ก็จะอ่านรู้เรื่องขึ้นด้วยค่ะ

.

Automation Test ที่ดี ไม่ใช่แค่เทสผ่าน เขียวตลอด
แต่ต้องเป็น Test ที่เชื่อได้ว่า “ถ้าผ่าน คือผ่านจริง” และ “ถ้าไม่ผ่าน คือพังจริง”
และต้องให้ผลเหมือนเดิมทุกครั้งที่รัน (Determinism)
ไม่ใช่ต้องคอยสวดมนต์ให้มันผ่าน หรือกด rerun ซ้ำๆ จนกว่าจะผ่าน

เขียน Script เป็น ใช้ Tool เป็น มันแค่จุดเริ่มต้นค่ะ
🥇 QA ร่างทอง คือคนที่เขียน Automation Test ที่ทุกคนเชื่อมั่นและมีคุณค่าต่อทีมอย่างแท้จริง

และTest Data ที่ดีก็เป็นส่วนหนึ่งในนั้นค่ะ

ตอนนี้ใครเจอปัญหาเรื่อง Test Data แบบไหนอยู่บ้าง มาร่วมแชร์ร่วมบ่นกันได้ในคอมเม้นเลยนะคะ

Leave a Comment

Your email address will not be published. Required fields are marked *