# Running Tests from the Local System
The tests are designed to be run from your local computer.
## System Setup
Running the tests requires `python`, `pip` and `virtualenv`, as well as updating
the system `hosts` file.
Note that Python 2.7 is required. Using Python 3 is not supported.
The required setup is different depending on your operating system.
### Linux Setup
If not already present, use the system package manager to install `python`,
`pip` and `virtualenv`.
On Debian or Ubuntu:
```bash
sudo apt-get install python python-pip virtualenv
```
### macOS Setup
The system-provided Python can be used, while `pip` and `virtualenv` can be
installed for the user only:
```bash
python -m ensurepip --user
export PATH="$PATH:$HOME/Library/Python/2.7/bin"
pip install --user virtualenv
```
To make the `PATH` change persistent, add it to your `~/.bash_profile` file or
wherever you currently set your PATH.
See also [additional setup required to run Safari](safari.md).
### Windows Setup
**Note:** In general, Windows Subsystem for Linux will provide the smoothest
user experience for running web-platform-tests on Windows, where installation
and usage are similar to Linux.
Download and install [Python 2.7](https://www.python.org/downloads). The
installer includes `pip` by default.
Add `C:\Python27` and `C:\Python27\Scripts` to your `%Path%`
[environment variable](http://www.computerhope.com/issues/ch000549.htm).
Finally, install `virtualenv`:
```bash
pip install virtualenv
```
The standard Windows shell requires that all `wpt` commands are prefixed
by the Python binary i.e. assuming `python` is on your path the server is
started using:
```bash
python wpt serve
```
### `hosts` File Setup
To get the tests running, you need to set up the test domains in your
[`hosts` file](http://en.wikipedia.org/wiki/Hosts_%28file%29%23Location_in_the_file_system).
On Linux, macOS or other UNIX-like system:
```bash
./wpt make-hosts-file | sudo tee -a /etc/hosts
```
And on Windows (this must be run in a PowerShell session with Administrator privileges):
```bash
python wpt make-hosts-file | Out-File %SystemRoot%\System32\drivers\etc\hosts -Encoding ascii -Append
```
If you are behind a proxy, you also need to make sure the domains above are
excluded from your proxy lookups.
## Via the browser
The test environment can then be started using
./wpt serve
This will start HTTP servers on two ports and a websockets server on
one port. By default the web servers start on ports 8000 and 8443 and the other
ports are randomly-chosen free ports. Tests must be loaded from the
*first* HTTP server in the output. To change the ports,
create a `config.json` file in the wpt root directory, and add
port definitions of your choice e.g.:
```
{
"ports": {
"http": [1234, "auto"],
"https":[5678]
}
}
```
After your `hosts` file is configured, the servers will be locally accessible at:
http://web-platform.test:8000/
https://web-platform.test:8443/ *
To use the web-based runner point your browser to:
http://web-platform.test:8000/tools/runner/index.html
https://web-platform.test:8443/tools/runner/index.html *
This server has all the capabilities of the publicly-deployed version--see
[Running the Tests from the Web](from-web).
\**See [Trusting Root CA](../tools/certs/README.md)*
## Via the command line
Many tests can be automatically executed in a new browser instance using
./wpt run [browsername] [tests]
This will automatically load the tests in the chosen browser and extract the
test results. For example to run the `dom/historical.html` tests in a local
copy of Chrome:
./wpt run chrome dom/historical.html
Or to run in a specified copy of Firefox:
./wpt run --binary ~/local/firefox/firefox firefox dom/historical.html
For details on the supported products and a large number of other options for
customising the test run:
./wpt run --help
[A complete listing of the command-line arguments is available
here](command-line-arguments).
```eval_rst
.. toctree::
:hidden:
command-line-arguments
```
Additional browser-specific documentation:
```eval_rst
.. toctree::
chrome
chrome_android
android_webview
safari
webkitgtk_minibrowser
```
For use in continuous integration systems, and other scenarios where regression
tracking is required, the command-line interface supports storing and loading
the expected result of each test in a test run. See [Expectations
Data](../../tools/wptrunner/docs/expectation) for more information on creating
and maintaining these files.