วิธีสร้างไฟล์ทดสอบในไปป์ไลน์ CI
ฟิกซ์เจอร์ไบนารีในรีโพซิทอรีจะค้างอยู่ในประวัติตลอดไป รีวิวใน diff ไม่ได้ และเป็นไปไม่ได้เลยเมื่อไฟล์ใหญ่ ให้สร้างไฟล์ในไปป์ไลน์จากสูตรแทน สูตรเป็นข้อความ ไบต์ออกมาเหมือนกันทุกครั้ง และขั้นสุดท้ายพิสูจน์ว่าไม่มีอะไรขยับ
คำตอบสั้นๆ
ติดตั้ง tfg รัน tfg generate fixtures.yaml --out ./fixtures ก่อนการทดสอบ
และ tfg verify ./fixtures/manifest.json หลังการทดสอบ
ทั้งสองขั้นทำให้บิลด์ล้มเหลวได้เอง พร้อมรหัสออกที่บอกเหตุผล
ทำไมไม่คอมมิต
ทำไมฟิกซ์เจอร์ไม่ควรอยู่ในรีโพซิทอรี
- มันค้างอยู่ในประวัติ การลบไฟล์ไบนารีทีหลังไม่ได้ทำให้โคลนเล็กลง เพราะทุกเวอร์ชันของมันยังอยู่ตรงนั้น
- diff ไม่แสดงว่าอะไรเปลี่ยน ผู้รีวิวเห็นแค่ว่า PDF ต่างไป ไม่มีอะไรมากกว่านั้น ส่วนสูตรเปลี่ยนแค่บรรทัดเดียว
- ไฟล์ใหญ่ไม่พอดี GitHub ปฏิเสธการพุชที่มีไฟล์ใหญ่กว่า 100 MB การทดสอบขีดจำกัดอัปโหลด 500 MB จึงไม่มีอะไรให้คอมมิต
สิ่งที่ควรคอมมิตคือสูตร สูตรเดียวกันกับซีดเดียวกันเขียนไบต์เดียวกันบนทุกเครื่อง ไฟล์ที่สร้างในไปป์ไลน์จึงเป็นไฟล์เดียวกับที่คุณมีบนแล็ปท็อป
สูตร
สูตรที่อยู่ข้างๆ การทดสอบ
สูตรนี้เขียนใบแจ้งหนี้ยี่สิบห้าใบที่ควรถูกรับ และรูปสองรูปที่เกินขีดจำกัดซึ่งควรถูกปฏิเสธ และแมนิเฟสต์บันทึกสิ่งที่คาดหวังทั้งสองอย่าง:
version: 1
seed: 7741
targets:
- id: invoices
format: pdf
count: 25
size: 300kb
expected: accept
- id: over_the_limit
format: png
count: 2
size: 12mb
expected:
outcome: reject
reason: size_limit
tfg validate fixtures.yaml ตรวจสูตรโดยไม่เขียนอะไร และบอกทุกปัญหาในครั้งเดียว
GitHub Actions
เวิร์กโฟลว์ที่ติดตั้งเครื่องมือและสร้างฟิกซ์เจอร์
jobs:
test:
runs-on: ubuntu-latest
env:
TFG_VERSION: "0.4.0"
steps:
- uses: actions/checkout@v4
- name: install tfg
run: |
base=https://github.com/donislawdev/TestingFilesGenerator/releases/download/v$TFG_VERSION
curl -fsSLO "$base/tfg_${TFG_VERSION}_linux_amd64.tar.gz"
curl -fsSLO "$base/verify-SHA256SUMS.txt"
sha256sum --check --ignore-missing verify-SHA256SUMS.txt
tar -xzf "tfg_${TFG_VERSION}_linux_amd64.tar.gz" ./tfg
sudo mv tfg /usr/local/bin/
- name: build the fixtures
run: tfg generate fixtures.yaml --out ./fixtures
- name: run the tests
run: pytest tests/
- name: nothing moved
run: tfg verify ./fixtures/manifest.json
บรรทัดผลรวมตรวจสอบเทียบไฟล์เก็บถาวรกับ verify-SHA256SUMS.txt จากรุ่นเดียวกัน
เวอร์ชันถูกตรึงไว้ รุ่นใหม่จึงไม่มีวันเปลี่ยนบิลด์ที่คุณไม่ได้แตะ
GitLab CI
เรื่องเดียวกันในรูปแบบงานของ GitLab
fixtures:
image: ubuntu:24.04
variables:
TFG_VERSION: "0.4.0"
script:
- apt-get update -qq && apt-get install -y -qq curl ca-certificates
- base=https://github.com/donislawdev/TestingFilesGenerator/releases/download/v$TFG_VERSION
- curl -fsSLO "$base/tfg_${TFG_VERSION}_linux_amd64.tar.gz"
- curl -fsSLO "$base/verify-SHA256SUMS.txt"
- sha256sum --check --ignore-missing verify-SHA256SUMS.txt
- tar -xzf "tfg_${TFG_VERSION}_linux_amd64.tar.gz" ./tfg
- ./tfg generate fixtures.yaml --out ./fixtures
- pytest tests/
- ./tfg verify ./fixtures/manifest.json
เมื่อกลายเป็นสีแดง
อะไรทำให้ขั้นหนึ่งล้มเหลว และเพราะอะไร
ทุกการจบมีรหัสออกของตัวเอง ขั้นจึงล้มเหลวได้เอง และล็อกบอกว่าเป็นรหัสไหน รหัสที่ไปป์ไลน์พบ:
3- สูตรไม่ถูกต้อง ไม่มีอะไรถูกเขียน และทุกปัญหามีชื่อบอก4- รูปแบบทำสิ่งที่ขอไม่ได้ เช่น ขนาดต่ำกว่าขนาดเล็กสุดของมัน6- พื้นที่ดิสก์ไม่พอ7-tfg verifyพบไฟล์ที่ไม่ตรงกับแมนิเฟสต์ของมัน8- การรันจบแล้ว แต่ไม่ได้สร้างครบทุกอย่าง
การรันที่ล้มเหลวไม่พิมพ์อะไรออกทางเอาต์พุตมาตรฐาน ตัวแยกวิเคราะห์ล็อกจึงไม่มีวันเข้าใจผิดว่าข้อผิดพลาดเป็นข้อมูล ตารางทั้งหมดอยู่ในหน้าเอกสาร
PowerShell
สคริปต์ PowerShell ต้องการอีกหนึ่งบรรทัด
PowerShell ไม่นำรหัสออกของโปรแกรมออกมานอกไฟล์ .ps1 รันสคริปต์ด้วย -File
แล้วสคริปต์จะตอบ 0 แม้เครื่องมือข้างในปฏิเสธงาน
ทำให้บิลด์ที่ควรเป็นสีแดงกลายเป็นสีเขียว บรรทัดสุดท้ายคือวิธีแก้ทั้งหมด:
tfg generate fixtures.yaml --out ./fixtures
exit $LASTEXITCODE
นี่คือวิธีที่ PowerShell ทำงาน ไม่ใช่เรื่องของเครื่องมือนี้ cmd bash และ
zsh ไม่ต้องการอะไรเพิ่ม
หลายงาน
แบ่งปันฟิกซ์เจอร์ระหว่างงาน
โดยปกติไม่จำเป็นต้องอัปโหลด เพราะสูตรเดียวกันเขียนไบต์เดียวกัน แต่ละงานจึงรัน tfg
generate ของตัวเองได้ ซึ่งเร็วกว่าการอัปโหลดแล้วดาวน์โหลด
เมื่องานหนึ่งต้องรับไฟล์จากอีกงานหนึ่ง ให้รัน tfg verify กับแมนิเฟสต์หลังการถ่ายโอน
แล้วมันจะบอกว่าสิ่งที่มาถึงตรงกับที่เขียนไว้หรือไม่
ถัดไป
จากตรงนี้ไปไหนต่อ
- ไฟล์ทดสอบที่เสียหาย เพิ่มไฟล์ที่ตั้งใจทำให้เสียลงในสูตรเดียวกัน
- กรณีการใช้งาน แสดงว่าการรันในไปป์ไลน์ตรวจอะไรได้อีก
- เอกสาร มีทุกคำสั่ง ทุกคีย์ของสูตร และทุกรหัสออก