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.

21 KOMMENTARE

  1. 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.

      $ speedtest-cli --simple
      Ping: 2.942 ms
      Download: 90.01 Mbit/s
      Upload: 45.55 Mbit/s

      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

      $ wget https://raw.githubusercontent.com/rsvp/speedtest-linux/master/speedtest
      $ chmod +x speedtest
      $ ./speedtest --log
      $ cat ~/var/log/net/speedtest.log 
      2015-05-07, 17:32, 2.636, 89.78, 54.29
      2015-05-07, 17:34, 2.914, 89.05, 51.38

      Das Ergebnis lässt sich dann schön weiterverarbeiten.

      Grüße
      Christoph

  2. 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

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

  3. 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 🙂

  4. 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