ระบบ UAT ภาพรวม
โฟลเดอร์ uat/ เก็บเครื่องมือทดสอบแบบ UAT (User Acceptance Test) ของ BC Ai Account สองตัว ที่ทำงานแยกกันและเป็นแอป Next.js คนละตัว
| ระบบ | ทำอะไร | โฟลเดอร์ | อ่านต่อ |
|---|---|---|---|
| UAT Tester Swarm | รัน "สคริปต์ทดสอบ" JSON ผ่านเบราว์เซอร์จริง, API และฐานข้อมูล Demo แล้วเปิด ticket เองเมื่อไม่ผ่าน | uat/openhands-swarm/ (สั่ง dev/start ที่พอร์ต 3050) |
บันทึกนี้, รูปแบบสคริปต์ทดสอบและตัวรัน (UAT Script Format and Runner), การทำงานอัตโนมัติของ UAT Tester: คิว ticket ตรวจซ้ำ รอบกลางคืน MCP (UAT Swarm Operations) |
| Chaos Lab | ห้องทำงานเสมือน 3 มิติ จำลองพนักงานหลายแผนกยิงรายการพร้อมกันใส่ฐานทดสอบ แล้วตรวจกฎบัญชี | uat/chaos-lab/ (พอร์ต 3055) |
Chaos Lab: ห้องทำงานเสมือนยิงรายการพร้อมกันเพื่อทดสอบกฎบัญชี (UAT Chaos Lab) |
นอกจากนี้ uat/scratch/ เป็นสคริปต์ชั่วคราวของนักพัฒนา (สำรวจหน้าจอ ตรวจคอลัมน์ ปิด ticket ที่ยืนยันแล้ว ฯลฯ) ไม่ใช่ส่วนของระบบหลัก ส่วนโฟลเดอร์สำรอง openhands-swarm-src-backup-* ไม่ใช้งาน
กติกาการเขียนสคริปต์และการทำงานกับ IssueMate ในเชิงมาตรฐานอยู่ที่ BC Ai Tester (:3050): สคริปต์ UAT, คำสั่ง do, Smart Delta Patrol และกติกาผู้ทดสอบขี้สงสัย และ เฝ้าและตอบใบงาน IssueMate BCAIACC (wait_for_issue.py, reply-batch, คำถาม PDF) บันทึกชุด sys-uat-* นี้อธิบายตามโค้ดที่มีอยู่จริง
การรันหนึ่งรอบทำงานอย่างไร
- มีสคริปต์ สคริปต์คือไฟล์ JSON ใน
uat-scripts/(ชื่อขึ้นต้น เช่นask-,auto-,e2e-,smoke-) หรือสร้างจากคำสั่งภาษาไทยผ่านหน้า "สั่งงานตรวจ" / MCP toolcommand(ดูข้อถัดไป) - เข้าคิว
startRunsสร้างรอบใหม่ (id สุ่ม) และมอบให้บอทที่ตรง module + lens และยังว่างก่อน ถ้าไม่มีก็หมุนเวียนให้ตัวอื่น (uat-runs.ts:91-125) - คุมจำนวนพร้อมกัน
pumpเริ่มรอบถัดไปไม่เกินmaxParallelBots(ค่าเริ่มต้น 12 ที่swarm-store.ts) - รัน เปิดโปรเซสลูก
node runner/run.mjs --script <ไฟล์> --out runs/<id> --base <เว็บ ERP>(uat-runs.ts:174) ตัวรันพิมพ์เหตุการณ์ทีละบรรทัดเป็น JSON ให้เว็บอ่านต่อ - เก็บหลักฐาน ผลทั้งหมดอยู่ใน
runs/<id>/(run.jsonและไฟล์หลักฐาน เช่นภาพ) รอบที่ไม่ผ่านเก็บวิดีโอvideo.webmและtrace.zipเพิ่ม รอบที่ผ่านลบวิดีโอทิ้ง (run.mjs:218-224) - ไม่ผ่าน -> ticket รอบที่จบเป็น
failedและเปิดสวิตช์autoIssueMateจะเรียกautoIssueส่งเข้า IssueMate เอง (uat-runs.ts:265) ระดับความรุนแรง S1-S4 ของสคริปต์แปลงเป็นความสำคัญ critical/high/medium/low (issuemate.ts:10) - จดประวัติ ทุกรอบที่จบถูกจดต่อท้ายไฟล์ประวัติรายเดือน (
recordRunจากuat-runs.ts:87) เพื่อทำหน้าแนวโน้ม - ตรวจซ้ำ เมื่อ ticket ถูกเปลี่ยนเป็น
deployedระบบสั่งรันสคริปต์เดิมซ้ำเอง ดู การทำงานอัตโนมัติของ UAT Tester: คิว ticket ตรวจซ้ำ รอบกลางคืน MCP (UAT Swarm Operations)
สั่งงานตรวจด้วยภาษาไทย (Code-First)
dispatch ใน command.ts รับคำสั่ง เลือกบอทจากคำสำคัญในประโยค (ถ้าไม่ตรงโมดูลใดจะเลือกสต็อก ข้อมูลหลัก รายงาน; สูงสุด 9 ตัว) แล้ว commandBot สร้างสคริปต์จากแม่แบบตามมุมตรวจของบอท:
| มุมตรวจ (lens) | สคริปต์ที่สร้าง |
|---|---|
screen |
ล็อกอิน Demo, เปิดจอที่ตรงคำสั่ง (ขั้น bc.auditScreen), กดปุ่มปรับความกว้างคอลัมน์/สลับภาษา, ตรวจว่าไม่มี HTTP 400+/JS error/SQLSTATE |
data |
db.query ตรวจรหัสว่างในตารางหลักของโมดูล และตรวจว่าผลต่าง Debit-Credit ของเอกสารทดสอบ UAT% เป็น 0.00 |
api |
ตรวจ /api/auth/session ได้ 200 และเรียกรายงาน /api/process/report/run ต้องได้ executedSql |
สคริปต์ที่สร้างต้องผ่าน checkScript ก่อนบันทึก ซึ่งรวมการตรวจ SQL ทุกคำสั่งด้วย EXPLAIN (sqlGuard) จากนั้นจึง saveScript และ startRuns ในโค้ดชุดนี้การสร้างสคริปต์ทำด้วยแม่แบบในเครื่อง (ข้อความในโค้ดเรียกว่า Code-First Local Engine, 0 Token) ไม่ได้ให้โมเดลภาษาเขียนสคริปต์
จำนวนบอท
บอทสร้างจากอาร์เรย์ใน swarm-data.ts: 12 โมดูล (master, sales, purchase, inventory, gl, tax, reports, security, admin, recon, cash, pos) คูณมุมตรวจหน้าจอ/ฐานข้อมูล/API โดยเงินสด/ธนาคาร (cash) มีเฉพาะหน้าจอกับฐานข้อมูล รวมเป็น 35 บอทตามการคำนวณจากโค้ด ส่วนคอมเมนต์เหนืออาร์เรย์ LENSES (swarm-data.ts:142) และหัวข้อ README ยังเขียนว่า 32 ซึ่งเป็นตัวเลขก่อนเพิ่มโมดูล POS
ข้อควรรู้เมื่อเทียบกับ README ของโฟลเดอร์
- ขั้น
ui.act,ui.see,ui.playในตัวรันปัจจุบันตรวจด้วย DOM ในเครื่อง (ข้อความในโค้ดระบุ 0 Token) ส่วนโค้ดเรียก Ollama Cloud/Stagehand ยังอยู่ในไฟล์แต่ตัวแปรneedsStagehandตั้งเป็นfalse(run.mjs:166-194) - ขั้น
ui.adminLoginในตัวรันปัจจุบันเรียกการล็อกอิน Demo เดียวกัน (run.mjs:515-517) แต่ถ้าสคริปต์มีขั้นนี้ ตัวรันจะไม่อัดวิดีโอ/trace (run.mjs:209) - README ในโฟลเดอร์ยังบรรยายการให้ AI เขียนสคริปต์/วิเคราะห์ ticket ด้วยโมเดลหลายรุ่น ให้ยึดโค้ดเป็นหลักเมื่อไม่ตรงกัน
ที่มาในโค้ด
uat/package.json:1และuat/openhands-swarm/package.json:6แอป Tester (พอร์ต 3050 ใน scriptdev/start) ส่วนuat/chaos-lab/package.json:6ใช้พอร์ต 3055uat/openhands-swarm/src/lib/uat-runs.ts:91-125เข้าคิวและเลือกบอท,:140pumpคุมจำนวนพร้อมกัน,:174เปิดโปรเซสตัวรัน,:265ส่ง ticket อัตโนมัติเมื่อรอบไม่ผ่านuat/openhands-swarm/src/lib/swarm-store.ts:17-30ค่าตั้งต้นของระบบ (maxParallelBots12,autoIssueMate,autoRetest)uat/openhands-swarm/src/lib/swarm-data.ts:142ที่มาของจำนวนบอทuat/openhands-swarm/src/lib/command.ts:308commandBotสร้างสคริปต์จากแม่แบบแล้วสั่งรันuat/openhands-swarm/runner/run.mjs:1-4ตัวรันสคริปต์ทีละเรื่อง- ดูเพิ่ม: รูปแบบสคริปต์ทดสอบและตัวรัน (UAT Script Format and Runner) · การทำงานอัตโนมัติของ UAT Tester: คิว ticket ตรวจซ้ำ รอบกลางคืน MCP (UAT Swarm Operations) · Chaos Lab: ห้องทำงานเสมือนยิงรายการพร้อมกันเพื่อทดสอบกฎบัญชี (UAT Chaos Lab) · BC Ai Tester (:3050): สคริปต์ UAT, คำสั่ง do, Smart Delta Patrol และกติกาผู้ทดสอบขี้สงสัย · เฝ้าและตอบใบงาน IssueMate BCAIACC (wait_for_issue.py, reply-batch, คำถาม PDF) · ระบบทดสอบ ภาพรวม: บอท UAT, Stagehand, Playwright และ Go test (Tests Overview) · สคริปต์ประจำโปรเจกต์ ภาพรวม: ดีพลอยเว็บ ประทับรุ่น สร้างฐานข้อมูล และตัวเฝ้า ticket (Scripts Overview)