speedtest-cli
Command line interface for testing internet bandwidth using speedtest.net
Top Related Projects
Self-hosted Speed Test for HTML5 and more. Easy setup, examples, configurable, mobile friendly. Supports PHP, Node, Multiple servers, and more
Test your internet connection speed and ping using speedtest.net from the CLI
Quick Overview
speedtest-cli is a command-line interface for testing internet bandwidth using speedtest.net. It allows users to measure their download and upload speeds, as well as ping, directly from the terminal without needing to use a web browser.
Pros
- Easy to use and install
- Can be integrated into scripts for automated testing
- Provides accurate results comparable to the web-based speedtest.net
- Lightweight and doesn't require a graphical interface
Cons
- May be affected by network conditions and server selection
- Results can vary between tests due to various factors
- Limited customization options compared to some other speed testing tools
- Depends on the availability and reliability of speedtest.net servers
Code Examples
# Basic speed test
import speedtest
s = speedtest.Speedtest()
s.get_best_server()
s.download()
s.upload()
s.results.share()
results_dict = s.results.dict()
print(f"Download: {results_dict['download'] / 1_000_000:.2f} Mbps")
print(f"Upload: {results_dict['upload'] / 1_000_000:.2f} Mbps")
print(f"Ping: {results_dict['ping']:.2f} ms")
# Custom server selection
import speedtest
s = speedtest.Speedtest()
servers = s.get_servers([1234]) # List of server IDs
s.get_best_server(servers)
s.download()
s.upload()
print(s.results.share())
# Asynchronous speed test
import asyncio
import speedtest_cli
async def run_speedtest():
s = await speedtest_cli.Speedtest()
await s.get_best_server()
download_speed = await s.download()
upload_speed = await s.upload()
print(f"Download: {download_speed / 1_000_000:.2f} Mbps")
print(f"Upload: {upload_speed / 1_000_000:.2f} Mbps")
asyncio.run(run_speedtest())
Getting Started
To use speedtest-cli, first install it using pip:
pip install speedtest-cli
Then, you can run a basic speed test from the command line:
speedtest-cli
Or import it in your Python script:
import speedtest
s = speedtest.Speedtest()
s.get_best_server()
print(f"Download: {s.download() / 1_000_000:.2f} Mbps")
print(f"Upload: {s.upload() / 1_000_000:.2f} Mbps")
This will perform a speed test and print the results in Mbps.
Competitor Comparisons
Self-hosted Speed Test for HTML5 and more. Easy setup, examples, configurable, mobile friendly. Supports PHP, Node, Multiple servers, and more
Pros of speedtest
- Self-hosted solution, offering more control over data and privacy
- Supports multiple server locations for more accurate testing
- Provides a web-based interface for easy access and usage
Cons of speedtest
- Requires server setup and maintenance
- May have less consistent results across different network environments
- Limited to testing against self-hosted servers, potentially affecting global accuracy
Code Comparison
speedtest-cli (Python):
def download(self, files, quiet=False):
def producer(q, files):
for file in files:
thread = HTTPDownloader(file, start, self.config['length']['download'])
thread.start()
q.put(thread, True)
speedtest (JavaScript):
function downloadTest(done) {
var xhr = new XMLHttpRequest();
xhr.onload = function() {
testState = 1;
dlProgress = 0;
dlSize = 0;
startT = new Date().getTime();
bonusT = 0;
// ... (additional code)
};
}
Both projects aim to measure internet speed, but they differ in implementation and target use cases. speedtest-cli is a command-line tool written in Python, while speedtest is a web-based solution implemented in JavaScript. The code snippets show different approaches to handling download tests, with speedtest-cli using a multi-threaded approach and speedtest utilizing XMLHttpRequest for web-based testing.
Test your internet connection speed and ping using speedtest.net from the CLI
Pros of speed-test
- Written in JavaScript, making it more accessible for web developers
- Simpler installation process using npm
- Cleaner and more modern command-line interface
Cons of speed-test
- Less comprehensive feature set compared to speedtest-cli
- May have lower accuracy due to using a different speed testing methodology
- Limited to Node.js environments, whereas speedtest-cli is Python-based
Code Comparison
speedtest-cli:
def get_best_server(servers):
results = {}
for server in servers:
latency = ping(server)
if latency:
results[latency] = server
return results[min(results.keys())]
speed-test:
const getServer = async () => {
const servers = await getServers();
const fastest = servers.reduce((fastest, server) => {
return server.bestPing < fastest.bestPing ? server : fastest;
});
return fastest;
};
Both projects aim to provide command-line speed testing functionality, but they differ in implementation language and approach. speedtest-cli offers a more comprehensive set of features and potentially higher accuracy, while speed-test provides a simpler interface and easier installation for JavaScript developers. The code comparison shows different approaches to server selection, with speedtest-cli using a more detailed ping-based method and speed-test utilizing a reduce function to find the fastest server.
Convert
designs to code with AI
Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.
Try Visual CopilotREADME
speedtest-cli
Command line interface for testing internet bandwidth using speedtest.net
.. image:: https://img.shields.io/pypi/v/speedtest-cli.svg :target: https://pypi.python.org/pypi/speedtest-cli/ :alt: Latest Version .. image:: https://img.shields.io/travis/sivel/speedtest-cli.svg :target: https://pypi.python.org/pypi/speedtest-cli/ :alt: Travis .. image:: https://img.shields.io/pypi/l/speedtest-cli.svg :target: https://pypi.python.org/pypi/speedtest-cli/ :alt: License
Versions
speedtest-cli works with Python 2.4-3.7
.. image:: https://img.shields.io/pypi/pyversions/speedtest-cli.svg :target: https://pypi.python.org/pypi/speedtest-cli/ :alt: Versions
Installation
pip / easy_install
::
pip install speedtest-cli
or
::
easy_install speedtest-cli
Github
~~~~~~
::
pip install git+https://github.com/sivel/speedtest-cli.git
or
::
git clone https://github.com/sivel/speedtest-cli.git
cd speedtest-cli
python setup.py install
Just download (Like the way it used to be)
::
wget -O speedtest-cli https://raw.githubusercontent.com/sivel/speedtest-cli/master/speedtest.py
chmod +x speedtest-cli
or
::
curl -Lo speedtest-cli https://raw.githubusercontent.com/sivel/speedtest-cli/master/speedtest.py
chmod +x speedtest-cli
Usage
::
$ speedtest-cli -h
usage: speedtest-cli [-h] [--no-download] [--no-upload] [--single] [--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] [--version]
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
--no-download Do not perform download test
--no-upload Do not perform upload test
--single Only use a single connection instead of multiple. This
simulates a typical file transfer.
--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
distance
--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
Python API
See the wiki <https://github.com/sivel/speedtest-cli/wiki>
_.
Inconsistency
It is not a goal of this application to be a reliable latency reporting tool.
Latency reported by this tool should not be relied on as a value indicative of ICMP style latency. It is a relative value used for determining the lowest latency server for performing the actual speed test against.
There is the potential for this tool to report results inconsistent with Speedtest.net. There are several concepts to be aware of that factor into the potential inconsistency:
- Speedtest.net has migrated to using pure socket tests instead of HTTP based tests
- This application is written in Python
- Different versions of Python will execute certain parts of the code faster than others
- CPU and Memory capacity and speed will play a large part in inconsistency between Speedtest.net and even other machines on the same network
Issues relating to inconsistencies will be closed as wontfix and without additional reason or context.
Top Related Projects
Self-hosted Speed Test for HTML5 and more. Easy setup, examples, configurable, mobile friendly. Supports PHP, Node, Multiple servers, and more
Test your internet connection speed and ping using speedtest.net from the CLI
Convert
designs to code with AI
Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.
Try Visual Copilot