Ich teste eine Android-Anwendung und muss verstehen, wie sich die App bei unterschiedlichen Internetgeschwindigkeiten verhält. Ein Beispiel für einen Testfall ist: 1. Stellen Sie die maximale Bandbreite auf 20 KBit / s ein und überprüfen Sie, wie es funktioniert. 2. Stellen Sie die maximale Bandbreite auf 50 KBit / s ein und überprüfen Sie, wie es funktioniert ... usw.
Das Problem ist - ich habe keine Ahnung, wie ich den Verkehr begrenzen soll.
Ich benutze WiFi und Charles Proxy . Ich benutze Charles, um zu überprüfen, wie die App reagiert. Leider kann ich mit Charles nicht drosseln - aus irgendeinem Grund wirken sich die Charles-Grenzwerte überhaupt nicht auf meine App aus.
Kann mir jemand bei diesem Problem helfen? Haben Sie Ideen, wie Sie die Bandbreite begrenzen können?
Danke im Voraus.
Antworten:
FÜR ROOTED DEVICE (kopiert von Mansours Antwort auf diesen Beitrag )
Edit # 1:
Erläuterung:
Daten werden in kleine Teile unterteilt, die als Pakete bezeichnet werden und über das Netzwerk übertragen werden sollen.
Es kann mit TCP (Transmission Control Protocol) oder UDP (User Datagram Protocol) übertragen werden.
Nehmen wir ein Beispiel:
Angenommen, Sie sind der Server und ich bin der Host, und ich möchte eine Datei herunterladen. Daher sende ich Ihnen zuerst eine Anfrage, die Sie bearbeiten. Statt die gesamte Datei zu senden, teilen Sie die große Datei in auf kleine Pakete.
Jetzt enthält jedes erstellte Paket Informationen wie die Quell-IP (Ihre) und die Ziel-IP (meine) sowie einige zusätzliche Daten (Sequenznummer, Datengröße, Lebensdauer usw.).
Sie werden diese Pakete senden und sie können mich über Router erreichen. Es ist nicht erforderlich, dass alle Pakete auf demselben Weg zu mir kommen. Sie können über verschiedene verfügbare Routen zu mir kommen.
Wenn sie mich erreichen, kommt TCP / UDP ins Bild.
Wenn Sie TCP für die Übertragung verwendet haben und ein Paket mich erreicht, wird eine Bestätigung an Sie zurückgesendet, dass das Paket mich erreicht hat.
Diese Funktion fehlt in UDP. Wenn Sie im Gegensatz zu TCP UDP verwendet haben, werden Ihnen keine Bestätigungen gesendet. Das bedeutet, dass Sie als Server keine Ahnung haben, ob Pakete mich erreichen oder nicht. Falls es bei der Übertragung verloren geht, ist es für immer verloren.
Pakete verwerfen
Das Verwerfen von Paketen bedeutet das Verwerfen von Paketen. Wenn ich also das von Ihnen gesendete Paket verwerfe, wird Ihnen (im Fall von TCP) eine Bestätigung gesendet, dass das Paket bei der Übertragung verloren gegangen ist, sodass Sie es erneut senden müssen.
Auf diese Weise wird Datenverkehr verschwendet und die Geschwindigkeit begrenzt, während ich die gesamte Datei erhalte.
Wenn ich UDP-Pakete verwerfe, erhalte ich nicht die gesamte Datei. Aus diesem Grund steuert die App den UDP-Verkehr nicht.
Und ja, Root-Rechte sind ein Muss, da auf iptable nur mit Superuser-Zugriff zugegriffen werden kann.
quelle
Wenn Sie unter Mac OS X sind, können Sie "Network Link Conditioner" verwenden.
Sie können es in xcode installieren von:
Xcode> Entwicklertool öffnen> Weitere Entwicklertools
Es wird eine Ressourcen-Webseite von Apple geöffnet (möglicherweise müssen Sie sich anmelden). Suchen Sie in der Ressourcenliste nach den neuesten "Hardware-E / A-Tools" und laden Sie sie herunter. Installieren Sie dann "Network Link Conditioner". Es wird eine Option in Ihrem Mac-Einstellungsbereich hinzugefügt.
Die Idee ist, Ihren Mac auf Ethernet zu bringen. Teilen Sie die Verbindung über WLAN. Begrenzen Sie den Datenverkehr mit Network Link Conditionner. Und verbinden Sie Ihr Android auf Ihrem Mac WiFi.
Bearbeiten: Es scheint, dass Squid-Cache die Netzwerkdrosselung unterstützt. http://www.tldp.org/HOWTO/Bandwidth-Limiting-HOWTO/index.html
quelle
Sie können die Bandbreite mit Ihrem Router steuern (sofern dieser dies unterstützt).
quelle