GithubHelp home page GithubHelp logo

wifi-testing's Introduction

Linux WiFi Performance and Reliability Testing

Scripts for testing USB WiFi devices on Linux

Note that the scripts in this repo are designed for Ubuntu only. Read the Notes section below for more details.

This project is a sloppy collection of scripts. Files are here for documentation, but do not expect the best quality. I would not recommend adapting or forking this repository for your own needs, as I expect the scripts to change drastically over time. I am not an expert and I offer no guarantees or assurances and I do not take any liability whatsoever.

Setup

Clone this repo to your test machine.

git clone https://github.com/williamhaley/wifi-testing

Install required software and configure the host as necessary.

sudo ./setup.sh

Set up an iperf3 server on a separate machine on the same network. You may want to daemonize this or run it in something like tmux.

/usr/bin/iperf3 --server

Note the IP address of the test server as the client will need that for testing.

Test

The test scripts will automatically choose whatever USB WiFi device they find. A TODO is to be able to pass the name of an explicit wireless interface.

You should disconnect/disable all other networking devices to avoid any confusion.

Run tests against your single USB WiFi device by passing the IP of your iperf server and arguments so that the host can connect to the network (which is simpler than having the container do so).

./test.sh <iperf.server.ip.address> <name for test run> <SSID> <Password>

Analyze the results.

./bin/analyze.py <path/to/results-file.txt> --scale-max 100

Notes

Tests are intended to be run from within Docker for convenience and consistency. Docker uses the host kernel. Testing in Docker should be almost identical to testing directly on the host OS (there may be some slight overhead, but I believe it should be minimal and inconsequential).

For the sake of consistency, I recommend always testing with the same host OS and host hardware. Ideally, boot to a live Ubuntu USB or CD-ROM on your test machine to guarantee the same results every time. If any of those parameters changes, I typically re-test all of my devices to guarantee reliable and consistent comparisons. You should not do anything else on the host machine while running tests. No web browsing, tinkering, etc. Ideally, all testing should be done on an entirely independent WiFi network in order to totally isolate traffic.

At the lowest level, the tests are performed using iperf3. I cannot vouch for the reliability or superiority or inferiority of iperf3 as opposed to other network performance testing software, but I found that it was comparable to tests I performed with netcat.

I use Ubuntu for the host OS and the test OS due to its popularity. The goal is to test WiFi devices in a way that would apply to most Linux users. I use an ethernet-wired Raspberry Pi for the iperf3 server on my local network. The iperf3 server is wired directly to the router to eliminate any overhead and variables. The goal of this repo is to test the USB WiFI connection from the test machine to the router. Ideally, that is the only variable, and every other aspect of the test should be as consistent and reliable as possible.

Citations

wifi-testing's People

Contributors

williamhaley avatar

Stargazers

TonyHo avatar Nick Willemse avatar

Watchers

James Cloos avatar  avatar

Forkers

allwill90

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.