Dieser Artikel ist der Artikel zum 13. Tag des JSL \ (Nippon System Giken ) Adventskalenders 2019.
Vor kurzem hatte ich das Gefühl, dass es einen Zeitpunkt gab, an dem sich das WLAN in der Firma verlangsamte, aber ich wusste nicht quantitativ, wie langsam es war, und schrieb ein Skript, um regelmäßig einen Geschwindigkeitstest durchzuführen.
-Ich habe ein Programm in Python geschrieben, um die Geschwindigkeit von internem WLAN mithilfe von Speedtest CLI \ -Internet-Verbindungsmessung für Entwickler zu messen.
Zunächst wollte ich es regelmäßig mit Cron usw. ausführen, also dachte ich darüber nach, einen Geschwindigkeitstest mit CUI durchzuführen
In meinem Bild wurde der Geschwindigkeitstest wie folgt gemessen: Suchen → Ausführen….
Ich habe versucht, die Mittel zum Messen der Netzwerkleitungsgeschwindigkeit unter Linux | Developers \ .IO zu organisieren ) Es scheint, dass speedtest.net
die CLI bereitstellt, als ich beim Betrachten des Artikels usw. nachgeforscht habe.
Die Speedtest-CLI bietet auch ein Python-Paket:
ich fand heraus
Ich habe eine Umgebung mit pipenv erstellt
$ mkdir wifi_speedtest
$ cd $_
#Wenn pipenv nicht installiert ist
# brew install pipenv
#Erstellen Sie eine virtuelle Umgebung
$ pipenv --python 3.7
#Paketinstallation
$ pipenv install speedtest-cli
#Virtuelle Umgebung aktivieren
$ pipenv shell
#Testen Sie den Befehl speedtest
(.venv) $ speedtest --version
speedtest-cli 2.1.2
Python 3.7.4 (default, Oct 12 2019, 18:55:28) [Clang 11.0.0 (clang-1100.0.33.8)]
Sie können eine Liste der Verbindungszielserver erhalten, die von Freiwilligen mit speedtest --list
bereitgestellt werden. Entscheiden Sie sich also für einen und notieren Sie sich die Nummer.
(.venv) $ speedtest --list | grep Tokyo
15047) OPEN Project (via 20G SINET) (Tokyo, Japan) [6.34 km]
24333) Rakuten Mobile , Inc (Tokyo, Japan) [6.34 km]
28910) fdcservers.net (Tokyo, Japan) [6.34 km]
18516) GIAM PING VIETPN.COM (Tokyo, Japan) [6.34 km]
22247) Tokyonet (Castro, Brazil) [18486.74 km]
Wenn Sie Folgendes angeben, wird der Geschwindigkeitstest immer auf dem angegebenen Server ausgeführt. Für einen von Rakuten Mobile, Inc bereitgestellten Server wäre die Nummer beispielsweise 24333.
#Geschwindigkeitstest ausführen
(.venv) $ speedtest --server 24333
Retrieving speedtest.net configuration...
Testing from XXX (xx.xx.xx.xx)...
Retrieving speedtest.net server list...
Retrieving information for the selected server...
Hosted by Rakuten Mobile , Inc (Tokyo) [6.34 km]: 200.123 ms
Testing download speed................................................................................
Download: 16.08 Mbit/s
Testing upload speed......................................................................................................
Upload: 31.96 Mbit/s
Ich konnte sicher messen (einige Kundeninformationen sind versteckt)
Dies ist jedoch im Programm schwierig zu handhaben. Fügen Sie daher "--json" hinzu und versuchen Sie, das Ergebnis im JSON-Format zu erhalten.
(.venv) $ speedtest --server 24333 --json
Ergebnis
{"download": 20208058.464686207, "upload": 54426180.687909536, "ping": 48.215, "server": {"url": "http://ookla.mbspeed.net:8080/speedtest/upload.php", "lat": "35.6833", "lon": "139.6833", "name": "Tokyo", "country": "Japan", "cc": "JP", "sponsor": "Rakuten Mobile , Inc", "id": "24333", "host": "ookla.mbspeed.net:8080", "d": 6.336536019993832, "latency": 48.215}, "timestamp": "2019-12-23T07:23:16.316637Z", "bytes_sent": 68534272, "bytes_received": 25353712, "share": null, "client": {"ip": "xx.xx.xx.xx", "lat": "xx.xxxx", "lon": "xxx.xxxx", "isp": "XXX", "isprating": "3.7", "rating": "0", "ispdlavg": "0", "ispulavg": "0", "loggedin": "0", "country": "JP"}}
Betrachten Sie dies in Python
Da es als Python-Paket bereitgestellt wird, habe ich darüber nachgedacht, einen Geschwindigkeitstest in Python steckbar auszuführen, aber dieses Mal habe ich darüber nachgedacht, das Ausführungsergebnis in CUI so zu behandeln, wie es ist, also Geschwindigkeitstest mit "Subprozessmodul" Beschlossen, den Befehl auszuführen
Subprozess \ - \ - \ - Subprozessverwaltung - Python 3 \ .8 \ .1 Dokumentation
wifi_speedtest.py
def get_speedtest_result():
process = subprocess.run(['speedtest', '--server', '24333', '--json'], capture_output=True)
return json.loads(process.stdout)
def bit_to_mbit(bit):
"""
Ein Gefühl machen, das sich nicht um Fehler kümmert
"""
return bit / 1024 / 1024
result = get_speedtest_result()
print(bit_to_mbit(result["download"]), bit_to_mbit(result["upload"]))
Ergebnis
13.46394215 50.48002296
Es gibt verschiedene Möglichkeiten, einen Befehl mit "subprocess" auszuführen, aber dieses Mal habe ich die Standardausgabe mit "run ()" + "capture_output = True" erhalten, die im Verwendungsbeispiel offiziell erwähnt wird.
Dieses Mal habe ich die SpreadSheet-API gedrückt, um sie aufzuzeichnen (Details werden unten weggelassen).
Sie können es zu Slack überspringen und es beliebig aufnehmen.
Abgesehen davon war die Verwendung der Pipenv-Skripte praktisch, da die virtuelle Umgebung bei der Ausführung von cron nicht aktiviert werden musste (Prozesse, die über pipenv run ausgeführt werden, werden genauso behandelt wie die Ausführung in einer virtuellen Umgebung).
Pipfile
[scripts]
dev = 'python wifi_speedtest.py'
Recommended Posts