There are so many variable's with speedtest's it is really hard to pin down exactly what is causing them.
Right at the top of the list is server load. A server has only so much bandwidth, and your internet connection will be as fast as the slowest point on the network. If the server is overloaded, then you will get slow speeds.
Next is something called contention. The way modern broadband works, you are sharing your connection with other people (here in the UK on a home connection it is 50, may vary where you are). The reason you don't notice is that usually, all 50 people aren't online at the same time. This is why your internet slow's down in the evenings and weekends. If you test on the same server several times in succession and get wildly variable results I would say it's probably contention.
Next thing to consider is that speedtest.net is flash based. Now while speedtest.net is usually quite reliable, flash based test's CAN be maniplulated. My old ISP had a big problem with oversubscribing, and rather than fixing the problem, they gave speed tests higher priority to make it look like they had fixed it. Java based test's on the other hand, are usually much more reliable. There is a java based test here: Speed Test : upload and download | DSLReports.com, ISP Information
that has US servers.