Viele von euch werden wahrscheinlich schon einmal Speedtest.net im Browser genutzt haben. So lässt sich sehr einfach prüfen, ob der Internetanbieter auch wirklich die versprochene Geschwindigkeit über die Datenleitung bringt, oder ob das Internet nur langsam in den Rechner tröpfelt. Neben der Browser-Variante des Dienstes, gibt es das Ganze auch schon eine ganze Weile als App fürs Handy. „Normale“ PCs und Handys sind so gut abgedeckt, aber wenn man die Anbindung eines kleinen Servers oder eines Raspberry Pis ohne eine graphische Oberfläche testen möchte, muss man zu anderen Mitteln greifen… oder man fährt Speedtest.net per Skript.
Als Kommandozeilentool braucht speedtest-cli keine graphische Umgebung, das Skript lässt sich auch auf einfachen Systemen wie eben dem Raspberry Pi mit etwa Raspbian ausführen. speedtest-cli muss auch nicht zwingend installiert werden, das Skript kann man direkt von Github laden und ausführen. Arch-Linux-User finden speedtest-cli jedoch auch im AUR, so dass sich das Skript ohne weiteren Umstand auf den Rechner laden lässt
$ wget -O speedtest-cli https://raw.github.com/sivel/speedtest-cli/master/speedtest_cli.py $ chmod +x speedtest-cli $ ./speedtest-cli
Wer speedtest-cli öfters braucht, der schiebt das Skript nach ~/bin
oder mit Root-Rechten nach /usr/local/bin
, so dass es im $PATH steht und von jedem Verzeichnis aus aufrufbar ist — bei der Installation unter Arch landet das Skript sowieso ordentlich im Dateisystem, so dass man sich darum keine Gedanken machen muss.
speedtest-cli kennt neben dem einfachen Aufruf ohne Optionen auch noch eine Reihe von Schaltern. So lässt sich mit etwa mit speedtest-cli --share
der Pfad zur Imagedatei mit den Ergebnissen des Leitungstests ausgeben. Oder man ruft mit speedtest-cli --list
die Liste der Speedtest-Server ab, so dass man mit speedtest-cli --server SERVER
einen Testserver gezielt anwählen kann.
$ speedtest-cli --help usage: speedtest-cli [-h] [--share] [--simple] [--list] [--server SERVER] Command line interface for testing internet bandwidth using speedtest.net. -------------------------------------------------------------------------- https://github.com/sivel/speedtest-cli optional arguments: -h, --help show this help message and exit --share Generate and provide a URL to the speedtest.net share results image --simple Suppress verbose output, only show basic information --list Display a list of speedtest.net servers sorted by distance --server SERVER Specify a server ID to test against
Insgesamt funktioniert speedtest-cli ähnlich gut wie Speedtest.net, allerdings beobachten einige User doch recht schwankende Ergebnisse des Kommandozeilentools. Auch bei mir spuckte speedtest-cli öfters mal Werte aus, die eigentlich nicht sein konnten. Kommen einem die Werte komisch vor, dann sollte man also lieber noch einmal den Test wiederholen, nicht dass man umsonst die Verkabelung nochmal neu macht,
Danke für den Tipp! Nach so etwas habe ich gesucht.
Bei mir waren die Ergebnisse zu Beginn auch ziemlich krass. Teils 300 MBit/s
Nach ~ dem 8. Test hat sich die Transferrate auf realistische 50 MBit/s eingependelt.
LG Thomas
Hallo Christoph
Ich möchte mit folgendem Aufruf per cronjob eine längerfristige Logdatei erzeugen:
date && speedtest-cli –server 1746 >> speedtest.log
In der Logdatei soll dann nur folgendes stehen:
Do 7. Mai 06:10:01 CEST 2015
Download: 29.12 Mbit/s
Do 7. Mai 06:25:01 CEST 2015
Download: 25.82 Mbit/s
oder noch besser:
Do 7. Mai 06:10:01 CEST 2015 Download: 29.12 Mbit/s
Do 7. Mai 06:25:01 CEST 2015 Download: 25.82 Mbit/s
u.s.w.
Daraus möchte ich dann per Excel eine Kurve machen.
Ich habe leider von Scriptsprachen keine Ahnung.
Was muss ich in der speedtest-cli ändern, dass es funktioniert?
Grüße
Alois
Das wollte ich auch schonmal automatisieren. Schau mal mit
speedtest-cli
in die Hilfe. Mit der Option--simple
bekommst du eine Ausgabe, die sich etwas leichter weitervearbeiten lässt.Bevor du dir aber die Mühe machst, das alles selber zu Skripten, schau lieber mal bei Github vorbei. Dort bin ich auf speedtest-linux gestoßen, das einen Wrapper um speedtest-cli baut. In der Standardeinstellung schreibt speedtest das Log nach ~/var/log/net/speedtest.log, das lässt sich bei Bedarf aber auch anpassen
Das Ergebnis lässt sich dann schön weiterverarbeiten.
Grüße
Christoph
Danke für den Tipp.
Habe jetzt einen raspberry pi, um an der Fritzbox regelmäßig und permanent zu messen, ob mich mein Anbieter (wie ich meine) nicht bescheißt
Du könntest auch einfach das flag –csv nutzen, dann bekommst du die Werte im CSV-Format und kannst die dann direkt in eine entsprechende Datei appenden. Damit sollten das Thema recht einfach erledigt sein.
Ist es möglich den Speedtest auch über ein bestimmtes Interface laufen zu lassen bzw. über eine andere Routingtabelle. Ich habe einen VPN Tunnel über den eine Internetverbindung getunnelt wird, diese möchte ich gerne regelmäßig checken.
Viele Grüße
Patrik
Hallo, ich würde speedtest-cli gerne auf Android im Cronjob laufen lassen.
Leider ist das Skript hier (trotz root) nicht ausführbar.
Gibt es dazu einen Workaround?
Hmmmm, Android basiert zwar auf dem Linux-Kernel, doch das System ist nicht wirklich mit einem Linux zu vergleichen. Speedtest-cli ist zwar als Python-Programm prinzipiell portabel, aber das muss nicht heißen, dass es funktioniert. Ich würde mal direkt den Entwickler des Programms ansprechen. Grüße, Christoph.
Hi, ich habe es jetzt vor einem Monat selfmade via shellscript gelöst und bin mit dem Ergebnis bis jetzt zufrieden.
Dazu waren einige Vorbereitungen nötig.
Android rooten
Busybox + Terminal Emulator installieren
Init.d nachrüsten
Cronjob nachrüsten
Skript finden, modifizieren und einrichten.
Den Vorgang (ohne Android Stress) habe ich mal kurz hier beschrieben.
Auswertungen habe ich auch schon, Beschreibung folgt noch.
http://c-falke.de/automatischer-speedtest-selbst-gebaut/
Ein ausgedientes Smartphone ist ideal für solche Messungen. Warum wird in unserer Gesellschaft denn nur immer alles closed-sourced und nach Nutzung weggeworfen ;-).
Hi,
mich würde auch interessieren ob möglich ist ein gezieltes Interface anzusteuern!
Hat da mittlerweile jemand eine Lösung gefunden?
LG
Jona
Hi Jona, wie meinst du das genau? Grüße, Christoph.
Ich habe an einem Server zwei Netzwerkinterfaces. Beide Karten haben jeweils eine eigene Internetanbindung.
Würde gerne das zweite Interface ansprechen um so regelmäßig die Backup Anbindung zu testen…
Viele Grüße
Jona
Ich habe genau die gleiche Problemstellung. Wäre schon, wenn es eine Lösung geben würde.
….
Edit:
ich hätte früher im nachschauen sollen. Es gibt einen source-Parameter: ./speedtest-cli –server 1746 –source 88.xxx.21.yyy
Ich muss dazu sagen, dass ich bereits sourcerouting eingerichtet habe, so dass ich je nach source-ip eine andere Default-route nehme. z.B. auch für mtr. Das geht dann auch mit speedtest-cli
Die verschiedene Ergebnisse bei der Auswertung, da darf man eins nicht vergessen;
Die Auslastung der eigenen Server, des anderen Server’s und das Netzwerk Allgemein !
Wenn im RZ, die Anbindung und das Interne Netzwerk „Voll“ ist, schlägt sich das auch bei solch test nieder, daher ist es wichtig, es mehrmals zu wiederholen um nen Durchschnitt zu bekommen 🙂
Hallo ist es möglich das script so anzupassen das es nach dem ausführen des tests das erzeugte .png bild direkt auf den eigenen server herunter läd (wget)?
warum sollte das nicht gehen?
mit
hast die URL nun musst die nur noch an wget übergeben
Ein mySql Datenbank mit folgenden Feldern anlegen :
Datenbank ltespeed
Tabellenstruktur für Tabelle lte1
Spalte Typ Null Standard Verweise Kommentare MIME-Typ
id bigint(20) Nein
serverid int(11) Nein
sponsor text Nein
server text Nein
timestamp timestamp Nein CURRENT_TIMESTAMP
distance float Nein
ping float Nein
dlrate float Nein
uplrate float Nein
danach ein Python script „speedtest.py“ anlegen:
#####################################################
import os
import MySQLdb
def adddata( ):
try:
db = MySQLdb.connect(„synologynas“, „root“, „raspberry“, „ltespeed“)
curs=db.cursor()
f = os.popen(„speedtest-cli –csv –csv-delimiter ‚;'“ )
d1 = f.read()
d2=d1.rstrip(‚\n‘)
d3=d2.split(„;“)
dbstring=“““INSERT INTO `lte1` ( `serverid` , `sponsor` , `server` , `distance` , `ping` , `dlrate` , `uplrate` ) VALUES ( ‚{:6}‘, ‚{:30}‘ , ‚{:30}‘, ‚{:10}‘, ‚{:5}‘, ‚{:25}‘, ‚{:25}‘ )“““.format( d3[0], d3[1], d3[2], d3[4], d3[5], d3[6] ,d3[7])
curs.execute( dbstring )
db.commit()
db.close()
except:
print „Error: the database is being rolled back“
db.rollback()
return adddata
adddata()
###############################################################
Danach das python script per crontab laufen lassen z.B.
# m h dom mon dow command
*/10 * * * * sudo python speedtest.py
——————————————————————————————————————
Das Ganze schreibt alle 10 min einen Eintrag in die MySql Datenbank der den Output aus dem Speedtest enthält
Vielen Dank dafür! Habe ich das entsprechend übernommen und werde das demnächst mal umbauen auf eine REST-API und dann in meinem Blog veröffentlichen! Dank dir für die Idee mit dem Parsen des Outputs, hat mir sehr geholfen!
From the command line get ping/download/upload stats: https://git.io/speed
Basically designed for logs — script in Bash runs on all POSIX and Linux systems.
Hallo ich habe eine Frage für einen Bekannten, der sich abmüht, um die Geschwindigkeitsmessungen an seine Bedürfnisse anzupassen. Kannst du mir hier Infos geben: Wie die Einheit der Geschwindigkeitsmessungen in speedtest-cli geändert werden kann?