CI में खराब नेटवर्क का सिमुलेशन
विंडो वैकल्पिक है। वही एक्ज़ीक्यूटेबल कमांड-लाइन टूल की तरह चलता है, तय समय बाद खुद खत्म हो जाता है, और जो हुआ उसे ऐसे ढंग से बताता है जिसे पाइपलाइन पढ़ सके।
एक चरण का रूप
टेस्ट की अवधि भर बिगाड़ें, फिर उसे अपने आप रुकने दें। सफ़ाई का कोई चरण नहीं जिसे भूला जा सके:
BeanNetworkTester.exe --loss 10 --latency 200 --target myapp.exe --duration 60
GitHub Actions जॉब में, सेल्फ़-होस्टेड Windows रनर पर:
- 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 मशीन का काम है।
हर अंत का एक एग्ज़िट कोड है
कोई भी अंत ट्रेसबैक के साथ नहीं होता। रन खत्म होने के हर तरीके का एक नंबर है, इसलिए पाइपलाइन “आपका ऐप विफल हुआ” को “टूल शुरू नहीं हो सका” से अलग पहचान सकती है:
| कोड | मतलब |
|---|---|
| 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 पूरा इंजन नकली ट्रैफ़िक पर चलाता है, बिना ड्राइवर लोड किए और बिना नेटवर्क को छुए। दोनों उस बिल्ड में काम आते हैं जो अपनी ही मशीन को नहीं बिगाड़ सकता।