Application for Internet speed test using pyspeedtest in Python

We can create a Python application using the speedtest-cli library to assess and evaluate the efficiency of our internet connection. This application allows us to perform instantaneous speed tests with minimal code, offering valuable information regarding our download and upload speeds.

In this article, we will delve into the process of constructing an internet speed test application using Python.

About speedtest-cli

The speedtest-cli is a Python library that facilitates internet speed testing. It provides a convenient way to measure the download and upload speeds of an internet connection programmatically. With speedtest-cli, developers can incorporate speed testing capabilities into their Python applications or scripts.

The library utilizes the speedtest.net servers to conduct speed tests. It establishes a connection with the nearest speedtest.net server and performs the download and upload tests in real-time. The library measures the time taken to download and upload data, allowing for accurate speed calculations.

Using speedtest-cli, developers can retrieve detailed information about the internet connection, including download and upload speeds, latency, and server information. This information can be used for various purposes, such as network troubleshooting, monitoring internet performance, or optimizing bandwidth usage.

Installation

You need to install the speedtest-cli library to perform internet speed tests. You can install it using pip ?

pip install speedtest-cli

Basic Speed Test Implementation

Here's how to create a simple internet speed test application ?

import speedtest

def perform_speed_test():
    st = speedtest.Speedtest()
    
    print("Finding best server...")
    st.get_best_server()
    
    print("Testing download speed...")
    download_speed = st.download() / 1000000  # Convert to Mbps
    
    print("Testing upload speed...")
    upload_speed = st.upload() / 1000000  # Convert to Mbps
    
    return download_speed, upload_speed

# Execute the speed test
download_speed, upload_speed = perform_speed_test()
print(f"Download Speed: {download_speed:.2f} Mbps")
print(f"Upload Speed: {upload_speed:.2f} Mbps")
Finding best server...
Testing download speed...
Testing upload speed...
Download Speed: 85.42 Mbps
Upload Speed: 42.18 Mbps

Enhanced Speed Test with Server Information

This example includes additional server details and ping measurements ?

import speedtest

def detailed_speed_test():
    st = speedtest.Speedtest()
    
    # Get best server
    best_server = st.get_best_server()
    
    # Display server information
    print(f"Server: {best_server['sponsor']} ({best_server['name']})")
    print(f"Distance: {best_server['d']:.2f} km")
    
    # Perform tests
    print("\nTesting ping...")
    ping = st.results.ping
    
    print("Testing download speed...")
    download_speed = st.download() / 1000000
    
    print("Testing upload speed...")
    upload_speed = st.upload() / 1000000
    
    return {
        'ping': ping,
        'download': download_speed,
        'upload': upload_speed,
        'server': best_server['sponsor']
    }

# Run detailed test
results = detailed_speed_test()
print(f"\nResults:")
print(f"Ping: {results['ping']:.2f} ms")
print(f"Download: {results['download']:.2f} Mbps")
print(f"Upload: {results['upload']:.2f} Mbps")
print(f"Server: {results['server']}")
Server: Local ISP (City Name)
Distance: 15.42 km

Testing ping...
Testing download speed...
Testing upload speed...

Results:
Ping: 12.45 ms
Download: 95.67 Mbps
Upload: 48.32 Mbps
Server: Local ISP

Speed Test with Error Handling

This robust implementation includes proper error handling for network issues ?

import speedtest
import sys

def safe_speed_test():
    try:
        st = speedtest.Speedtest()
        print("Initializing speed test...")
        
        # Configure speedtest
        st.get_best_server()
        
        # Test download speed
        print("Testing download speed...")
        download_speed = st.download() / 1000000
        
        # Test upload speed
        print("Testing upload speed...")
        upload_speed = st.upload() / 1000000
        
        # Get ping
        ping = st.results.ping
        
        return {
            'success': True,
            'download': download_speed,
            'upload': upload_speed,
            'ping': ping
        }
        
    except speedtest.ConfigRetrievalError:
        return {'success': False, 'error': 'Cannot retrieve speedtest configuration'}
    except speedtest.NoMatchedServers:
        return {'success': False, 'error': 'No speedtest servers found'}
    except Exception as e:
        return {'success': False, 'error': f'Speed test failed: {str(e)}'}

# Run safe speed test
result = safe_speed_test()

if result['success']:
    print(f"\nSpeed Test Results:")
    print(f"Download: {result['download']:.2f} Mbps")
    print(f"Upload: {result['upload']:.2f} Mbps") 
    print(f"Ping: {result['ping']:.2f} ms")
else:
    print(f"Error: {result['error']}")
Initializing speed test...
Testing download speed...
Testing upload speed...

Speed Test Results:
Download: 78.45 Mbps
Upload: 35.21 Mbps
Ping: 18.67 ms

Key Features

Feature Description Method
Download Speed Measures download bandwidth st.download()
Upload Speed Measures upload bandwidth st.upload()
Ping/Latency Measures connection latency st.results.ping
Best Server Finds optimal test server st.get_best_server()

Important Notes

Factors Affecting Results: Internet speed tests can be affected by network congestion, server performance, and background applications. Results may vary between runs.

Units: The library returns speeds in bits per second (bps). Divide by 1,000,000 to convert to Mbps (megabits per second).

Network Usage: Speed tests consume bandwidth and may count toward data caps on metered connections.

Conclusion

The speedtest-cli library provides a simple yet powerful way to measure internet connection performance programmatically. With proper error handling and detailed reporting, you can create robust applications for monitoring network performance and diagnosing connectivity issues.

Updated on: 2026-03-27T07:43:41+05:30

6K+ Views

Kickstart Your Career

Get certified by completing the course

Get Started
Advertisements