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.

Mit Speedtest.net lässt sich die Leistung der eigenen Internetverbindung testen.
Mit Speedtest.net lässt sich die Leistung der eigenen Internetverbindung testen.
speedtest-cli führt den Leistungstest von speedtest.net auch ohne einen Browser aus.
speedtest-cli führt den Leistungstest von speedtest.net auch ohne einen Browser aus.

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,

speedtest-cli führt den Leistungstest von speedtest.net auch ohne einen Browser aus.
speedtest-cli führt den Leistungstest von speedtest.net auch ohne einen Browser aus.
Abonnieren
Benachrichtigungen:
guest
22 Kommentare
älteste
neuste
Inline Feedbacks
Zeige alle Kommentare
Thomas

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

Alois Graf

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

Jürgen

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

Marco

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.

Patrik

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

Christian

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?

Christian

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 ;-).

Marco
echo "$(date +"%s %S %M %H %d %m %y") --> $(./speedtest-cli --simple | tr '\n' ' ')" | tee -a speedtest.log
Jona

Hi,
mich würde auch interessieren ob möglich ist ein gezieltes Interface anzusteuern!
Hat da mittlerweile jemand eine Lösung gefunden?

LG
Jona

Jona

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

Andi

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

Dennis

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 🙂

Kevin

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)?

Akecheta

warum sollte das nicht gehen?

mit

./speedtest-cli –share | grep Share | awk ‚{ print $3 }‘

hast die URL nun musst die nur noch an wget übergeben

Matthias Storck

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

Marco

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.

Helge

The file speedtest_cli.py has been deprecated in favor of speedtest.py
and is available for download at:

https://raw.githubusercontent.com/sivel/speedtest-cli/master/speedtest.py

Servar

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?