ระบบทดสอบ ภาพรวม
โปรเจกต์ BC Ai Account มีชุดทดสอบกระจายอยู่ 4 ที่ ไม่ได้รวมเป็นคำสั่งเดียว แต่ละชุดมีวัตถุประสงค์ต่างกัน และมีกติกาความปลอดภัยร่วมกันคือ ทดสอบกับเครื่องและฐานข้อมูลในเครื่องเท่านั้น
| ชุดทดสอบ | อยู่ที่ | ทดสอบอะไร | อ่านต่อ |
|---|---|---|---|
| บอท UAT ในเครื่อง | tests/uat/ |
เปิดทุกเมนูแล้วจับ error (smoke) กับไล่งานจริงของแต่ละตำแหน่ง ตรวจทั้งหน้าจอ, API และฐานข้อมูล แล้วเขียนผลเป็นไฟล์ finding | บอท UAT ในเครื่อง b01-b11: ตัวช่วย lib.mjs, smoke, finding และการรวมผล (tests/uat) |
| Stagehand | tests/stagehand/ |
ให้ AI (DeepSeek) ขับเบราว์เซอร์ สำรวจปุ่มและทดสอบ CRUD ของหน้าจอ | Stagehand, Playwright และ Go test: ทดสอบด้วย AI, สคริปต์ตรวจหน้าจอ และชุดทดสอบ backend |
| Playwright สคริปต์ย่อย | tests/playwright/ |
สคริปต์ตรวจหน้าจอเฉพาะจุดผ่าน Chrome ที่เปิดไว้ (CDP) | Stagehand, Playwright และ Go test: ทดสอบด้วย AI, สคริปต์ตรวจหน้าจอ และชุดทดสอบ backend |
| Go test | backend/internal/**, backend/test/ |
ทดสอบ backend ทั้งแบบไม่ต้องใช้ฐานข้อมูล แบบต่อฐานข้อมูลจริง (ตั้ง env แล้วค่อยรัน) และแบบ integration ด้วย Docker | Stagehand, Playwright และ Go test: ทดสอบด้วย AI, สคริปต์ตรวจหน้าจอ และชุดทดสอบ backend |
| คู่มือทดสอบด้วยมือ | testscript/stock.md |
แนวทางทดสอบ E2E ระบบสินค้าหลายหน่วยนับ ในมุมผู้ใช้คนไทย | Stagehand, Playwright และ Go test: ทดสอบด้วย AI, สคริปต์ตรวจหน้าจอ และชุดทดสอบ backend |
โฟลเดอร์ frontend/e2e/ มีอยู่แต่ว่างเปล่า และ frontend/package.json มีเพียง script lint กับ prebuild ไม่มี script test (frontend/package.json:9-10) ฝั่งหน้าเว็บจึงไม่มี unit test ในโปรเจกต์นี้ การตรวจหน้าเว็บทั้งหมดทำผ่านชุด E2E ข้างต้น
แยกให้ออกจาก "ระบบ UAT"
tests/uat/ เป็นสคริปต์ที่นักพัฒนารันเอง ผลลัพธ์เป็นไฟล์ในโฟลเดอร์ out/ ส่วนโฟลเดอร์ uat/ ที่ราก (Tester Swarm และ Chaos Lab) เป็นแอปเว็บที่เปิด ticket เข้า IssueMate เอง ทั้งสองอย่างใช้แนวคิดเดียวกัน (เปิดหน้าจอจริง ตรวจ API และฐานข้อมูล) แต่เป็นคนละโค้ด ดู ระบบ UAT ภาพรวม: บอททดสอบอัตโนมัติและ Chaos Lab (UAT System Overview) และ รูปแบบสคริปต์ทดสอบและตัวรัน (UAT Script Format and Runner)
กติกาที่ทุกชุดทดสอบใช้ร่วมกัน
- ล็อกให้ทำงานเฉพาะในเครื่อง บอท UAT ปฏิเสธ URL ที่ไม่ใช่
localhost/127.0.0.1(tests/uat/lib.mjs:15) และตรวจว่าฐานข้อมูลเป็นเครื่องเดียวกันก่อนรัน SQL ส่วนสคริปต์ CRUD ของ Stagehand มีตัวป้องกันแบบเดียวกัน (tests/stagehand/crud-item.mjs:12) - ใช้โหมดเดโม หน้าเว็บที่ถูกทดสอบรันด้วย env
FORCE_BCDEMO=1ทุกคำขอจึงเป็นผู้ใช้เดโมที่ต่อฐานbcdemo(tests/uat/BRIEF.md:6,tests/stagehand/crud-item.mjs:3) - ข้อมูลทดสอบติดป้าย รหัสที่สร้างขึ้นต้น
UATB<NN>และหมายเหตุมีUAT-<วันที่>-B<NN>เพื่อให้ตามเก็บ/ล้างได้ (tests/uat/BRIEF.md:30) - ตัวเลขเงินเทียบแบบ numeric จากฐานข้อมูล ไม่ใช้ทศนิยมของ JavaScript (
tests/uat/BRIEF.md:52) - ห้ามกดปุ่มอันตราย เช่น ปิดงวด ปิดปี ส่ง e-Tax สคริปต์เปิดหน้าจอดูอย่างเดียว (
tests/uat/BRIEF.md:33) และสคริปต์สำรวจปุ่มของ Stagehand ข้ามปุ่มที่บันทึก/ยืนยัน/อัปโหลด/ออกจากระบบ (tests/stagehand/explore-buttons.mjs:21) - ผู้ทดสอบรายงานอย่างเดียว ไม่แก้โค้ด บอทแต่ละตัวเขียน finding ระดับ S1-S4 แล้วจบ
วัดความครอบคลุมเมนู
tests/uat/smoke-all.mjs ไล่เปิดทุกเมนูใบที่มองเห็นใน frontend/src/config/bcMenu.json แล้วเขียนผลหนึ่งบรรทัดต่อเมนูลง smoke.jsonl เพื่อให้ตัวเลขความครอบคลุมมาจากการวัดจริง (ข้อความในไฟล์ระบุว่าบอท B01-B11 บันทึกเฉพาะที่ผิด) รันซ้ำแล้วข้ามเมนูที่ผ่านแล้ว และแบ่งงานเป็นหลายส่วนได้ด้วย UAT_SHARD=1/4 (tests/uat/smoke-all.mjs:1-29)
คำสั่งที่ใช้บ่อย
# Go: unit test ทั้ง backend (ฝั่งที่ต้องใช้ฐานข้อมูลจะถูกข้ามถ้าไม่ได้ตั้ง env)
npm run backend:test # = cd backend && go test ./internal/...
# Go: integration (ต้องมี Docker)
cd backend && make test-integration
# บอท UAT: เปิดทุกเมนู
UAT_RUN_ID=<YYYYMMDD> node tests/uat/smoke-all.mjs
# Stagehand: สำรวจปุ่ม (ต้องตั้ง env DEEPSEEK_API_KEY)
cd tests/stagehand && npm run explore
ข้อจำกัด
- script ที่รากมีเฉพาะ
backend:testและlint(package.json:6-13) ไม่มีคำสั่งรวมสำหรับชุด E2E ผู้รันต้องเปิดเว็บ, Go API และฐานข้อมูลเดโมไว้ก่อนเอง tests/playwright/package.jsonมีเพียงสคริปต์testตัวอย่างที่ตั้งให้ล้มเหลว (:6-8) ใช้npm testไม่ได้ ต้องรันไฟล์.mjsโดยตรง- ชุดทดสอบ Go ที่ต่อฐานข้อมูลจริงถูกข้ามอัตโนมัติเมื่อไม่ได้ตั้ง env ผลผ่านจึงไม่ได้แปลว่าทดสอบส่วนนั้นแล้ว
ที่มาในโค้ด
package.json:11-12scriptbackend:buildและbackend:test(go test ./internal/...) ที่รากbackend/Makefile:24-32make testกับmake test-integration(แท็กintegration, ต้องมี Docker)tests/uat/lib.mjs:15ล็อกเฉพาะเครื่อง,:187smokeเป็นด่านตรวจเมนูกลางtests/uat/smoke-all.mjs:1-29วัดความครอบคลุมเมนูและแบ่ง shardtests/stagehand/package.json:11-18script ทั้งหมดของ Stagehandtests/playwright/package.json:6สคริปต์testตัวอย่างtestscript/stock.md:1คู่มือทดสอบหลายหน่วยนับ- ดูเพิ่ม: บอท UAT ในเครื่อง b01-b11: ตัวช่วย lib.mjs, smoke, finding และการรวมผล (tests/uat) · Stagehand, Playwright และ Go test: ทดสอบด้วย AI, สคริปต์ตรวจหน้าจอ และชุดทดสอบ backend · ระบบ UAT ภาพรวม: บอททดสอบอัตโนมัติและ Chaos Lab (UAT System Overview) · สคริปต์ประจำโปรเจกต์ ภาพรวม: ดีพลอยเว็บ ประทับรุ่น สร้างฐานข้อมูล และตัวเฝ้า ticket (Scripts Overview) · ระบบ AI Copilot ภาพรวม (AI System Overview)