I recently purchased a compact tower server to run at home for various personal projects of mine and I decided to test the network card and its throughput. I had installed headless Ubuntu 18.04.4 LTS therefore, I had no access to web version of Speedtest. The first thing anyone would do is to check if there’s any packages available in official and accessible repository and luckily there is one called speedtest-cli.

Installation was as simple as anyone can ask for, no problem there. If we roam around its help section, it has many switches and parameters it accepts. The installed speedtest-cli can be accessible with speedtest alone.

usage: speedtest-cli [-h] [--no-download] [--no-upload] [--bytes] [--share]
                     [--simple] [--csv] [--csv-delimiter CSV_DELIMITER]
                     [--csv-header] [--json] [--list] [--server SERVER]
                     [--exclude EXCLUDE] [--mini MINI] [--source SOURCE]
                     [--timeout TIMEOUT] [--secure] [--no-pre-allocate]

Command line interface for testing internet bandwidth using speedtest.net.

optional arguments:
  -h, --help            show this help message and exit
  --no-download         Do not perform download test
  --no-upload           Do not perform upload test
  --bytes               Display values in bytes instead of bits. Does not
                        affect the image generated by --share, nor output from
                        --json or --csv
  --share               Generate and provide a URL to the speedtest.net share
                        results image, not displayed with --csv
  --simple              Suppress verbose output, only show basic information
  --csv                 Suppress verbose output, only show basic information
                        in CSV format. Speeds listed in bit/s and not affected
                        by --bytes
  --csv-delimiter CSV_DELIMITER
                        Single character delimiter to use in CSV output.
                        Default ","
  --csv-header          Print CSV headers
  --json                Suppress verbose output, only show basic information
                        in JSON format. Speeds listed in bit/s and not
                        affected by --bytes
  --list                Display a list of speedtest.net servers sorted by
  --server SERVER       Specify a server ID to test against. Can be supplied
                        multiple times
  --exclude EXCLUDE     Exclude a server from selection. Can be supplied
                        multiple times
  --mini MINI           URL of the Speedtest Mini server
  --source SOURCE       Source IP address to bind to
  --timeout TIMEOUT     HTTP timeout in seconds. Default 10
  --secure              Use HTTPS instead of HTTP when communicating with
                        speedtest.net operated servers
  --no-pre-allocate     Do not pre allocate upload data. Pre allocation is
                        enabled by default to improve upload performance. To
                        support systems with insufficient memory, use this
                        option to avoid a MemoryError
  --version             Show the version number and exit

I ran speedtest --simple --share for a quick speed test but the result was as follows.​ :rage:

Ping: 9.415 ms
Download: 96.96 Mbit/s
Upload: 3.97 Mbit/s
Share results: http://www.speedtest.net/result/9318023497.png

Faulty Speedtest Package

That was unexpected, considering the upload speed is way too low, I decided to give the source a visit. If we look at the Github repository. we can notice a shorter and more quicker way to install and run the script. Use wget or curl method to get the script, give it the permission to execute using chmod +x speedtest-cli parameter.

Running it using ./speedtest-cli --simple --share gave the result I expected.

Ping: 9.657 ms
Download: 96.37 Mbit/s
Upload: 115.51 Mbit/s
Share results: http://www.speedtest.net/result/9318056559.png

Speedtest script from the source.

I remove the pre-packaged speedtest-cli from my server and kept the standalone script version. We can create a symbolic link for the script we downloaded from the speedtest-cli repository.

sudo ln -s ~/Documents/speedtest-cli /usr/local/bin/testspeed

The script should be accessible and executable from anywhere in the system using testspeed command.

Enjoy! :tada: