समय के साथ नेटवर्क की स्थितियाँ बदलें
10% का स्थिर पैकेट लॉस प्रयोगशाला की स्थिति है। असली कनेक्शन बिगड़ते हैं, सँभलते हैं, चार सेकंड अटकते हैं और लौट आते हैं, और जिस बग को आप खोज रहे हैं वह आमतौर पर बदलाव में रहता है, स्थिर अवस्था में नहीं।
सिनेरियो एक टाइमलाइन है
एक JSON फ़ाइल। हर चरण कहता है इस सेकंड पर, ये सेटिंग, और जिसका आप ज़िक्र नहीं करते वह अपना मान रखता है:
{
"loop": true,
"steps": [
{"at": 0, "settings": {"latency": 20, "jitter": 15, "down": 4096}},
{"at": 20, "settings": {"loss": 8, "latency": 180}},
{"at": 45, "settings": {"block_ip": "203.0.113.0/24"}},
{"at": 65, "settings": {"block_ip": "", "loss": 0, "latency": 20}}
]
}
समय रन की शुरुआत से सेकंड हैं, चरणों के बीच के अंतर नहीं। "loop": true के साथ टाइमलाइन खत्म होने पर फिर शुरू हो जाती है, जो लंबे सोक टेस्ट के लिए चाहिए: इसे चलता छोड़ दें और ऐप इस्तेमाल करें।
BeanNetworkTester.exe --scenario cafe-wifi.json --target myapp.exe
प्रोग्राम में तैयार सिनेरियो: 8
एक्ज़ीक्यूटेबल के बगल वाले scenarios फ़ोल्डर में। इन्हीं फ़ाइलों से पढ़ा गया, इसलिए आपके पास असल में यही है:
| फ़ाइल | चरण | अवधि | दोहराव |
|---|---|---|---|
blocked-endpoint.json | 4 | 65 s | हाँ |
cafe-wifi.json | 5 | 85 s | हाँ |
congested-vpn.json | 4 | 70 s | हाँ |
failing-dns.json | 6 | 85 s | हाँ |
mobile-lte-to-3g.json | 7 | 85 s | हाँ |
overloaded-game-server.json | 5 | 72 s | हाँ |
same-loss-in-runs.json | 5 | 100 s | हाँ |
upload-drop-midway.json | 7 | 75 s | नहीं |
वे साधारण टेक्स्ट फ़ाइलें हैं: एक खोलें, कोई संख्या बदलें, सहेजें। नाम बताते हैं कि वे क्या दोहराती हैं: भीड़ वाला कैफ़े, LTE से 3G पर गिरता मोबाइल कनेक्शन, बीच में मर जाने वाला अपलोड, ओवरलोड हुआ सर्वर, जवाब देना बंद करने वाला DNS।
बदलाव पाने के दो आसान तरीके
सिनेरियो तब लिखने लायक है जब क्रम मायने रखता है। जब नहीं रखता, तो दो सेटिंग खुद बदलती हैं:
- लिंक चालू और बंद: चक्र की लंबाई और उसका कितना हिस्सा बंद रहेगा। दस सेकंड के चक्र, चार सेकंड बंद, हमेशा के लिए।
- स्पीड शेड्यूल: स्पीडों की एक श्रृंखला जिससे सीमा गुज़रती है, ताकि कनेक्शन बिना फ़ाइल के बिगड़े और सँभले।
BeanNetworkTester.exe --flap-period 10 --flap-down 40 --target myapp.exe
ऐप चलते समय यह क्यों काम करता है
सिनेरियो जिस भी सेटिंग को छूता है वह पहले से चल रहे सत्र पर लाइव लागू होती है: ऐप को रीस्टार्ट करने की ज़रूरत नहीं और टूल को भी नहीं। इवेंट लॉग हर चरण को होते ही दर्ज करता है, इसलिए कुछ टूटे तो आप देख सकते हैं कि वह किस बदलाव के बाद टूटा। इसे seed के साथ जोड़ें और पूरा क्रम, उसके भीतर के यादृच्छिक पैकेट लॉस समेत, हूबहू दोहराया जाता है।