Doing a speedtest is very easy and straightforward for you — just go to the “Test” tab, press “Test”, and wait for the results. But a lot is happening behind the scenes!
When you run a speedtest, our app will do three different things. It will first try to send a very small piece of data to get a response from your network (if it doesn't get any, it means your internet isn’t working). This is what we call a latency or ping test. Secondly, the app will try to open a large file via the internet — that is, to download it to your phone. Finally, it will do exactly the opposite: try to move a large file from your phone to the internet, or upload it.
For the latency test we run a series of 3 ICMP ping requests and 3 HTTP HEAD requests to assess the availability of the data network. These tests are run on popular servers such as google.com in order to emulate real world usage and to remove any geographical bias, whilst not over-engineering tests to use an artificially close server. To determine the download speed, we attempt to download a large file of known size from a remote server for a fixed period of time over a standard TCP/IP connection. The download speed is calculated by looking at the amount of data successfully downloaded in the test interval. The same is done in reverse for the upload throughput tests and the measurement of upload speed.
Our tests are especially designed to measure a user’s average experience as closely as possible. Unlike other testing methodologies, we do not optimise anything related to the testing scenario, but keep conditions as close to normal usage as possible. To deliver the file we use a series of popular CDNs to emulate as closely as possible what users would generally experience when downloading files from the internet. In the same vein, multiple HTTP connections are opened, as this is what modern browsers and applications do when downloading files.