Convert Figma logo to code with AI

sivel logospeedtest-cli

Command line interface for testing internet bandwidth using speedtest.net

13,863
1,923
13,863
71

Top Related Projects

13,285

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

13,285

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 Figma logo designs to code with AI

Visual Copilot

Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.

Try Visual Copilot

README

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:

  1. Speedtest.net has migrated to using pure socket tests instead of HTTP based tests
  2. This application is written in Python
  3. Different versions of Python will execute certain parts of the code faster than others
  4. 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.