I no longer have time to actively develop this code. There are currently multiple speed issues that i don't have time to track down. It appears that Ookla is working on a beta site that will completely change the interface which woudl require a pretty much complete rewrite. For the moment i will accept and patches but i wont be actively doing any development.
The Unofficial Speedtest CLI is a command-line program to test bandwidth in situations where you don't have access to a full GUI environment and web browser.
In 2013 I was feeling guilty about using Open Source software for most of my life without giving anything back in return. I decided to create this project to my part to help the IT community.
A lot of the initial algorithms here are based on different scripts I found when I was studying how speedtest.net works. Mainly, @sivel's speedtest-cli, thanks for your work!
Licensed under GPLv3 (See COPYING and LICENSE)
- Github (Windows/Linux/Mac) - https://github.com/zpeters/speedtest/releases
- Mirror (Windows/Linux/Mac) - http://media.thehelpfulhacker.net/index.php?dir=speedtest/
See the wiki
See github issues tracker - https://github.com/zpeters/speedtest/issues
speedtest.exe -- normal run, will automatically select the closests/fastest server to test against
$ bin/speedtest.exe
Finding fastest server..
1752 | 5NINES (Madison, WI, United States)
Testing download speed......
Testing upload speed......
Ping: 53.613233ms | Download: 13.34 Mbps | Upload: 3.89 Mbps
speedtest.exe -l -- List servers
$ bin/speedtest.ext -l
1724 | CityNet (Zaporizhzhya, Ukraine)
2966 | FUSION MEDIA Kft. (Budapest, Hungary)
3634 | Paul Bunyan Communications (Bemidji, MN, United States
...
speedtest.exe -s 1724 -- Run against a specific server
$ bin/speedtest.exe -s 1724
1724 | CityNet (Zaporizhzhya, Ukraine)
Testing latency...
Testing download speed......
Testing upload speed......
Ping: 982.913566ms | Download: 0.91 Mbps | Upload: 1.25 Mbps
speedtest.exe -b 1234 -b 5678 -- Run the test blacklisting servers 1234 and 5678 speedtest.exe -r -- Runs speedtest in "reporting" mode (useful for Labtec, Excel spreadsheets, etc) speedtest.exe -r -rc="," -- Use a different separator (default is '|') Report Fields: Server ID, Server Name (Location), Ping time in ms, Download speed in kbps, Upload speed in kbps
1752|5NINES(Madison, WI,United States)|36.18|19452|4053
COMMANDS:
GLOBAL OPTIONS:
--algo value, -a value Specify the measurement method to use ('max', 'avg')
--debug, -d Turn on debugging
--list, -l List available servers
--update, -u Check for a new version of speedtest
--ping, -p Ping only mode
--quiet, -q Quiet mode
--report, -r Reporting mode output, minimal output with '|' for separators, use '--rc'
to change separator characters. Reports the following: Server ID,
Server Name (Location), Ping time in ms, Download speed in kbps, Upload speed in kbps
--downloadonly, --do Only perform download test
--uploadonly, --uo Only perform upload test
--reportchar value, --rc value Set the report separator. Example: --rc=','
--server value, -s value Use a specific server
--blacklist value, -b value Blacklist a server. Use this multiple times for more than one server
--mini value, -m value URL of speedtest mini server
--numclosest value, --nc value Number of 'closest' servers to find (default: 3)
--numlatency value, --nl value Number of latency tests to perform (default: 5)
--interface value, -I value Source IP address or name of an interface
--help, -h show help
--version, -v print the version
Contact [email protected] for general feedback
For Bug reports please use the Github issue tracker for this project
To contribute please see CONTRIBUTING.md
- Jacob McDonald - jmc734 - Cleaned up printing and formatting. Added parameter passing to run.sh - zpeters#4
- Cory Lievers - Testing and feedback. Suggestions for formatting to make this more useful for labtec - zpeters#9
- Paul Baker (Network Manager - BMS Telecorp) - Located a bug in the speedtest.net server list generation and found the correct 'static' url
- Graham Roach (Contact Info?) - Extensive user testing to help determine issues with latency and accuracy of upload and download speeds - #11 (and others)
- @larray - slightly obscure issues with http caches interfering with test results - #20
- Noric - reporting and help with testing issues with report formatting - #32
- @jannson - submitting patch to reduce memory usage on download test - #37
- @vendion - teaching me how to import packages the corret way - #67
- @invalid-email-address - various formatting
- @l2dy - cleaned up README and broken links
- @m01 - speed test mini support
- @pra85 - fixed types in README
- @schweikert - for adding the interface selection code
The calculation that is used for testing download speeds is literally measuring the amount of data we are downloading (we request a "random" image and count how many bytes are received) and how long it takes to download. We multiply by the correct factors to get from bytes to megabits. I consider this to be an honest and accurate measurement.
In speedtest.net's reference documentation they describe doing a lot of manipulation to the results to return an "ideal" measurement (https://support.speedtest.net/entries/20862782-How-does-the-test-itself-work-How-is-the-result-calculated-). This, to me, is trading accuracy for speed and not what I'm looking for out of a testing tool.
For confirmation that my download calculations are correct I have tested against a few other speed testing sites, specifically http://testmy.net ("What makes TestMy.net better") who appear to use an "unfiltered" method of calculating bandwidth speeds. These results typically match up with speedtest.net cli
- how does it work - https://support.speedtest.net/entries/20862782-How-does-the-test-itself-work-How-is-the-result-calculated-
- why actual speedtest.net results may be inaccurate - http://testmy.net/