Mô phỏng mạng kém trong CI
Cửa sổ là tùy chọn. Cùng tệp thực thi chạy như một công cụ dòng lệnh, tự kết thúc sau một khoảng thời gian đặt trước và báo những gì đã xảy ra theo cách pipeline đọc được.
Hình dạng của một bước
Làm suy giảm trong suốt bài kiểm tra, rồi để nó tự dừng. Không có bước dọn dẹp nào để quên:
BeanNetworkTester.exe --loss 10 --latency 200 --target myapp.exe --duration 60
Trong một job GitHub Actions, trên runner Windows tự lưu trữ (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
Hai điều về runner: bắt lưu lượng cần quyền quản trị, và runner được lưu trữ sẵn sẽ không cấp cho bạn quyền đó, nên việc này thuộc về một máy Windows tự lưu trữ.
Mỗi kết thúc đều có mã thoát
Không có gì kết thúc bằng một traceback. Mỗi cách một lần chạy có thể kết thúc đều có một con số, nên pipeline phân biệt được “ứng dụng của bạn thất bại” với “công cụ không khởi động được”:
| Mã | Ý nghĩa |
|---|---|
| 0 | Hoàn tất như yêu cầu. |
| 1 | Có lỗi xảy ra khi đang chạy. |
| 2 | Dòng lệnh sai. |
| 3 | Một thiết lập hoặc một giá trị không hợp lệ. |
| 4 | Một tệp kịch bản bị từ chối. |
| 5 | Không đọc hoặc ghi được một tệp. |
| 6 | Một khẳng định về lần chạy không đúng. |
| 7 | Không có quyền quản trị nên không nạp được trình điều khiển. |
| 130 | Bị ngắt, thường bằng Ctrl+C. |
| 143 | Bị chấm dứt từ bên ngoài. |
Đầu ra máy đọc được
--format json ghi một đối tượng JSON mỗi dòng, gồm các mẫu trong lúc chạy và bản tóm tắt ở cuối, để bước sau có thể kiểm tra khẳng định trên đó:
BeanNetworkTester.exe --loss 5 --duration 30 --format json > run.ndjson
Dòng nhật ký đi tới lỗi chuẩn và dữ liệu đi tới đầu ra chuẩn, nên chuyển hướng dữ liệu không bao giờ trộn lẫn hai thứ. --seed khiến lần chạy lặp lại được, điều một bài kiểm tra chập chờn (flaky) cần trước khi ai đó có thể tranh luận về nó.
Chạy thử không đụng đến gì
Hai cờ giúp nối nó vào an toàn trước khi bạn tin nó: --dry-run báo các thiết lập sẽ làm gì rồi thoát, và --simulate chạy toàn bộ bộ máy trên lưu lượng giả lập, không nạp trình điều khiển và không đụng đến mạng. Cả hai đều hữu ích trong một bản build không được phép làm suy giảm máy đang chạy nó.