จำลองเครือข่ายแย่ใน CI
หน้าต่างเป็นทางเลือก ไฟล์ปฏิบัติการเดียวกันรันเป็นเครื่องมือบรรทัดคำสั่ง จบเองเมื่อครบเวลาที่ตั้ง และรายงานสิ่งที่เกิดขึ้นในรูปแบบที่ไปป์ไลน์อ่านได้
หน้าตาของหนึ่งขั้นตอน
ทำให้เครือข่ายแย่ตลอดช่วงทดสอบ แล้วปล่อยให้มันหยุดเอง ไม่มีขั้นตอนล้างข้อมูลที่ลืมได้:
BeanNetworkTester.exe --loss 10 --latency 200 --target myapp.exe --duration 60
ในงาน GitHub Actions บนรันเนอร์ Windows ที่โฮสต์เอง (self-hosted):
- name: Test the app on a poor connection
shell: pwsh
run: |
Start-Process -FilePath BeanNetworkTester.exe `
-ArgumentList '--loss 10 --latency 200 --target myapp.exe --duration 90'
npm test
สองข้อเกี่ยวกับรันเนอร์ การดักจับทราฟฟิกต้องใช้สิทธิ์ผู้ดูแลระบบ และรันเนอร์ที่โฮสต์ให้จะไม่ให้สิทธิ์นั้น จึงต้องใช้เครื่อง Windows ที่โฮสต์เอง
ทุกการจบมีรหัสออก
ไม่มีอะไรจบด้วย traceback ทุกวิธีที่การรันจบได้มีหมายเลข ไปป์ไลน์จึงแยก “แอปของคุณล้มเหลว” ออกจาก “เครื่องมือเริ่มไม่ได้” ได้:
| รหัส | ความหมาย |
|---|---|
| 0 | เสร็จสิ้นตามที่ขอ |
| 1 | มีบางอย่างล้มเหลวระหว่างรัน |
| 2 | บรรทัดคำสั่งไม่ถูกต้อง |
| 3 | การตั้งค่าหรือค่าที่ระบุไม่ถูกต้อง |
| 4 | ไฟล์สถานการณ์จำลองถูกปฏิเสธ |
| 5 | อ่านหรือเขียนไฟล์ไม่ได้ |
| 6 | การตรวจสอบเกี่ยวกับการรันไม่เป็นจริง |
| 7 | ไม่มีสิทธิ์ผู้ดูแลระบบ จึงโหลดไดรเวอร์ไม่ได้ |
| 130 | ถูกขัดจังหวะ โดยมากจากการกด Ctrl+C |
| 143 | ถูกยุติจากภายนอก |
เอาต์พุตที่เครื่องอ่านได้
--format json เขียนออบเจ็กต์ JSON หนึ่งตัวต่อบรรทัด คือตัวอย่างระหว่างรันและสรุปตอนท้าย เพื่อให้ขั้นตอนถัดไปตรวจสอบกับมันได้:
BeanNetworkTester.exe --loss 5 --duration 30 --format json > run.ndjson
บรรทัดล็อกไปที่ข้อผิดพลาดมาตรฐานและข้อมูลไปที่เอาต์พุตมาตรฐาน การเปลี่ยนเส้นทางข้อมูลจึงไม่ปนกันสองอย่าง --seed ทำให้การรันซ้ำได้ ซึ่งเป็นสิ่งที่เทสต์ที่ไม่เสถียร (flaky) ต้องมีก่อนที่ใครจะเถียงเรื่องมันได้
รันทดลองที่ไม่แตะอะไรเลย
แฟลกสองตัวทำให้ต่อเข้าได้อย่างปลอดภัยก่อนที่คุณจะไว้ใจ: --dry-run รายงานว่าการตั้งค่าจะทำอะไรแล้วออก และ --simulate รันเอนจินทั้งหมดกับทราฟฟิกสังเคราะห์ โดยไม่โหลดไดรเวอร์และไม่แตะเครือข่าย ทั้งสองมีประโยชน์ในบิลด์ที่ห้ามทำให้เครื่องที่รันอยู่แย่ลง