หน้านี้อธิบายว่าโปรเจกต์นี้ทำอะไร ทำงานเป็นลำดับยังไง และต้องตั้งค่าอะไรบ้างจึงจะได้รับข้อความ ✅ PASS / ❌ FAIL ทุกสุดสัปดาห์โดยไม่ต้องเปิดเครื่องทิ้งไว้
เรามีเว็บ Task Board (สมัครสมาชิก, login, จัดการงาน, โปรไฟล์) และชุดเทสอัตโนมัติ 127 เคส (รวมตรวจ accessibility ด้วย axe) ที่ทำงานเหมือนคนจริงๆ คือเปิดเบราว์เซอร์ กรอกข้อมูล กดปุ่ม แล้วตรวจว่าผลตรงกับที่ควรเป็น จากนั้นให้ GitHub รันชุดเทสนี้ตามเวลาที่ตั้งไว้ และส่งผลเข้าแชตของเรา
node app/server.mjs ให้เองที่พอร์ต 3000test-results/results.json และรายงาน HTML อัปโหลดเก็บไว้ 14 วันscripts/notify.mjs อ่านผล สรุปเป็นข้อความ แล้วยิงเข้า Webhook ของ Discord/Slack — ทำเสมอ ไม่ว่าผ่านหรือพัง| ไฟล์ | หน้าที่ |
|---|---|
app/index.html | เว็บที่ถูกเทส: สมัครสมาชิก/login (demo/demo1234 มีให้ตั้งแต่เริ่ม), task board (priority, แก้, ลบ, ค้นหา, กรอง), โปรไฟล์ (เปลี่ยนชื่อ/รหัสผ่าน, dark mode, ลบบัญชี) เก็บข้อมูลใน localStorage |
app/server.mjs | เซิร์ฟเวอร์เล็กๆ เสิร์ฟหน้าเว็บ ไม่ต้องติดตั้งอะไรเพิ่ม |
tests/support/pages.ts | Page Object (AuthPage, TasksPage, ProfilePage) ให้ทุกเคสใช้ท่าเดียวกัน แก้ที่เดียวเมื่อหน้าเว็บเปลี่ยน |
tests/login.spec.ts | สมัครสมาชิก, login/logout, ผู้ที่ยังไม่ login เข้าหน้าภายในไม่ได้, session, หน้า 404, title |
tests/tasks.spec.ts | เพิ่ม/แก้/ลบ/ติ๊กเสร็จ, ค้นหา, กรอง, Clear completed, ข้อมูลคงอยู่หลัง reload |
tests/profile.spec.ts | เปลี่ยนชื่อ, เปลี่ยนรหัสผ่าน, dark mode, ลบบัญชี |
tests/journey.spec.ts | เส้นทางเต็มตั้งแต่สมัครจนลบบัญชี, ผู้ใช้ 2 คนข้อมูลไม่ปนกัน, จอมือถือ, ข้อมูลใน storage เสีย |
playwright.config.ts | ตั้งค่า retry, เก็บหลักฐานตอนพัง, เปิดเว็บให้เอง, สร้าง results.json |
scripts/notify.mjs | อ่าน results.json แล้วส่งข้อความเข้า WEBHOOK_URL |
tests/a11y.spec.ts | axe ตรวจ accessibility (WCAG 2.1 A/AA) ทุกหน้าและทุกสถานะสำคัญ รวมโหมดมืด |
.github/workflows/smoke.yml | ชุดเร็ว @smoke ทุกครั้งที่ push เข้า main และทุก pull request (ไม่ส่ง webhook) |
.github/workflows/weekend-e2e.yml | รันทุกเคสเสาร์-อาทิตย์ตามเวลาที่ตั้ง แล้วแจ้งผลเข้า webhook |
สถานะที่ติ๊กจะจำไว้ในเบราว์เซอร์นี้
npm ci npx playwright install chromium npm test
127 passed (ชุดเร็ว 5 เคสรันด้วย npm run test:smoke)
# PowerShell $env:WEBHOOK_URL = "วาง URL ที่นี่"; npm run notify
Notification sent. และมีข้อความเข้าช่องแชต (รัน npm test มาก่อนแล้ว เพื่อให้มีไฟล์ผลเทส)
git init git add . git commit -m "feat: add weekend QA suite" git branch -M main git remote add origin https://github.com/<user>/<repo>.git git push -u origin main
WEBHOOK_URL, Secret: URL จากหัวข้อ 04)Webhook คือ URL ที่ใครก็ตามที่มี URL นี้ ส่งข้อความเข้าช่องแชตได้ สคริปต์ของเราส่งทั้งฟิลด์
content (Discord) และ text (Slack) จึงใช้ได้ทั้งสองที่โดยไม่ต้องแก้โค้ด
QA Bot เลือกช่องhttps://discord.com/api/webhooks/…)https://hooks.slack.com/services/…)LINE Notify ปิดบริการไปแล้ว ถ้าจะใช้ LINE ต้องใช้ LINE Messaging API ซึ่งรูปแบบการส่งต่างจาก webhook ข้างต้น
และต้องแก้ scripts/notify.mjs เพิ่ม (โปรเจกต์นี้ยังไม่ได้ทำ)
เวลาถูกกำหนดในไฟล์ .github/workflows/weekend-e2e.yml บรรทัด cron
ซึ่ง GitHub ใช้เวลา UTC เสมอ (ไทย = UTC+7) เลยต้องแปลงก่อน ลองใช้ตัวช่วยนี้:
นาที ชั่วโมง วันที่ เดือน วันในสัปดาห์ (0 = อาทิตย์ … 6 = เสาร์)main)*/10 * * * * แล้ว push รอดูว่าข้อความเข้า
แล้ว เปลี่ยนกลับทันที ไม่เช่นนั้นจะรันทุก 10 นาทีflaky = เคสที่พังก่อนแต่ผ่านตอนลองใหม่ ถ้าขึ้นบ่อยควรตามแก้
กดลิงก์แล้วโหลด artifact playwright-report เพื่อดู screenshot, video, trace ของเคสที่พัง
| อาการ | ตรวจอะไร |
|---|---|
| workflow รันแต่ไม่มีข้อความเข้า | ยังไม่ตั้ง secret WEBHOOK_URL หรือชื่อผิด (log จะเขียน skipping send) |
Webhook responded 404 | webhook ถูกลบหรือ URL ผิด สร้างใหม่แล้วอัปเดต secret |
Webhook responded 429 | ส่งถี่เกินไป ลดความถี่ cron |
| ไม่รันตามเวลาเลย | ยังไม่ push ไป main / schedule ถูกปิดหลัง 60 วันไม่มีกิจกรรม |
| รันผิดวัน | ลืมแปลง UTC ใช้ตัวช่วยหัวข้อ 05 |
| พังเฉพาะบน GitHub | ดู trace ใน artifact แล้ว npx playwright show-trace <ไฟล์> |
รายละเอียดเพิ่มเติมอยู่ใน README.md