Run Tests (รันชุดทดสอบซอฟต์แวร์)
รันชุดทดสอบ (test suite) รองรับทุกภาษาและเฟรมเวิร์ก เช่น npm, pytest, go test และ make
การอ้างอิง (Reference): loha/run-tests@v1
หมวดหมู่: Test & Lint (การทดสอบและตรวจโค้ด)
รันไทม์ (Runtime): alpine:3.19 (รันแบบ non-root, ตรึงด้วย digest)
สัญญาอนุญาต (License): Apache-2.0
ควรใช้เมื่อ
ใช้สำหรับรันชุดทดสอบของโปรเจกต์ โดยกำหนดคำสั่งใน TEST_COMMAND ให้ตรงกับเครื่องมือทดสอบที่คุณใช้ สำหรับการตรวจ lint และ type check แนะนำให้แยกไปใช้ task เฉพาะทางเพื่อความชัดเจนของผลลัพธ์
พารามิเตอร์
| พารามิเตอร์ | ชนิด | ค่าเริ่มต้น | จำเป็น | คำอธิบาย |
|---|---|---|---|---|
TEST_COMMAND | string | make test | ไม่ | คำสั่งที่ใช้ในการรันชุดทดสอบ (test suite) |
WORKING_DIRECTORY | string | . | ไม่ | ไดเรกทอรีทำงานของ task โดยคิดเทียบจาก root ของ workspace |
TEST_IMAGE | string | alpine@sha256:6baf43584bcb78f2e5847d1de515f23499913ac9f12bdf834811a3145eb11ca1 | ไม่ | คอนเทนเนอร์อิมเมจที่มีเครื่องมือและ dependency พร้อมสำหรับการรัน tests |
COVERAGE | string | false | ไม่ | เปิดใช้งานการเก็บและรายงานผล code coverage |
TIMEOUT | string | 600 | ไม่ | ระยะเวลาสูงสุดที่อนุญาตให้รัน test (หน่วยเป็นวินาที) |
FAIL_ON_ERROR | string | true | ไม่ | กำหนดให้ task ล้มเหลวเมื่อคำสั่งพบข้อผิดพลาด; หากตั้งเป็น false จะเป็นโหมดรายงานผลอย่างเดียว |
พื้นที่ทำงาน (Workspaces)
source(จำเป็น): เชื่อมโยงจาก pipeline workspacesourcetest-results(ไม่บังคับ): เชื่อมโยงจาก pipeline workspacetest-results
ผลลัพธ์ (Results)
| ผลลัพธ์ (Result) | คำอธิบาย |
|---|---|
TEST_RESULT | ผลลัพธ์การทดสอบ: PASS (ผ่าน) หรือ FAIL (ไม่ผ่าน) |
TEST_OUTPUT | เส้นทางของไฟล์ที่บันทึกผลลัพธ์การรัน tests |
การทำงาน
เริ่มรันคอนเทนเนอร์จาก TEST_IMAGE (ค่าเริ่มต้นคือ Alpine) เปลี่ยนไดเรกทอรีไปยัง WORKING_DIRECTORY แล้วสั่งรัน TEST_COMMAND ภายใต้ระยะเวลาที่กำหนดใน TIMEOUT จากนั้นระบบจะบันทึก exit code และเก็บผลการทดสอบไว้ใน workspace test-results หาก pipeline มีการ mount ไว้อยู่
ตัวอย่าง
รันชุดทดสอบสำหรับ Node.js
steps:
- name: test
uses: loha/run-tests@v1
with:
TEST_COMMAND: 'pnpm test:unit'
TEST_IMAGE: 'node:20-alpine'
รันชุดทดสอบ Python พร้อมเก็บ Coverage
steps:
- name: test
uses: loha/run-tests@v1
with:
TEST_COMMAND: 'pytest --cov=src --cov-report=xml'
TEST_IMAGE: 'python:3.12-slim'
COVERAGE: 'true'
TIMEOUT: '900'
การแก้ปัญหา
ปัญหา: รัน tests บนเครื่องตนเองผ่าน แต่ task รายงานสถานะ FAIL โดยไม่แสดง error ที่ชัดเจน
วิธีแก้: ตรวจสอบค่า TIMEOUT เนื่องจากการทดสอบแบบ integration test ที่ใช้เวลานานอาจเกินค่าเริ่มต้น 600 วินาที ให้ปรับเพิ่มค่าเวลาให้เหมาะสมกับโปรเจกต์