เปลี่ยนสภาพเครือข่ายตามเวลา
การสูญหาย 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 แล้วลำดับทั้งหมด รวมถึงการสูญหายแบบสุ่มภายใน จะซ้ำได้เป๊ะ