Does your internet feel slower in the evenings or on weekends? This Python script downloads a 3MB file every 5 minutes to log your download speed in a CSV file. You can change the frequency or choose a different file by editing the script.

### Internet speed test script for Python 2.6+
### 
### This runs continuously downloading the test file every 5 minutes to generate 
### a csv file that you can use to generate a scatter chart in Excel.
###

from __future__ import print_function
from time import time, sleep
from datetime import datetime
from os.path import exists, expanduser, join

try:
    from urllib.request import urlopen # Python 3
except ImportError:
    from urllib2 import urlopen # Python 2

output_file = join(expanduser("~"),"internet_speed.csv")

### CONFIGURATION

repeat_minutes = 5

download_file = "http://home.exetel.com.au/speedtest/storm_3mb.jpg"

file_bytes = 3062059 # This must be the exact size of the download file in bytes if you want accurate results!

###

if not exists(output_file):
    try:
        with open(output_file, "w") as f:
            f.write("Time,Speed (MB/s)\n")
    except IOError:
        print ("Please edit the configuration. Output file location does not exist.")
        input()
        exit()
        
while True:
    start_time = time()
    urlopen(download_file).read()
    seconds_taken = time() - start_time
    mbytes_per_second = str( round(file_bytes / seconds_taken / 1024 / 1024, 2) )
    print (mbytes_per_second," MB/s")
    with open(output_file, "a") as f:
        f.write(datetime.now().strftime("%Y-%m-%d %H:%M:00")+','+mbytes_per_second+'\n')
    print ("Waiting ",repeat_minutes," minutes.")
    sleep((repeat_minutes * 60) - (time() - start_time))

Download speedtest.py

You will find the output file in C:\users\username on Windows, or in /home/username on Linux. It should look like this:

Time,Speed (MB/s)
2014-11-03 23:00:22,0.161
2014-11-03 23:05:36,0.96.5
2014-11-03 23:10:17,0.217
2014-11-03 23:15:23,0.149
2014-11-03 23:20:29,0.152

Import the file in Excel or Gnumeric and make a chart!

speedchart
You can clearly see my internet speed dropping every evening, probably due to congestion at the local phone exchange.
isp_change
This shows a significant improvement in internet speed after I changed my service provider from Exetel (an Optus re-seller) to TPG.