| Getting Started | |
| =============== | |
| Installing wptrunner | |
| -------------------- | |
| The easiest way to install wptrunner is into a virtualenv, using pip:: | |
| virtualenv wptrunner | |
| cd wptrunner | |
| source bin/activate | |
| pip install wptrunner | |
| This will install the base dependencies for wptrunner, but not any | |
| extra dependencies required to test against specific browsers. In | |
| order to do this you must use use the extra requirements files in | |
| ``$VIRTUAL_ENV/requirements/requirements_browser.txt``. For example, | |
| in order to test against Firefox you would have to run:: | |
| pip install -r requirements/requirements_firefox.txt | |
| If you intend to work on the code, the ``-e`` option to pip should be | |
| used in combination with a source checkout i.e. inside a virtual | |
| environment created as above:: | |
| git clone https://github.com/w3c/wptrunner.git | |
| cd wptrunner | |
| pip install -e ./ | |
| In addition to the dependencies installed by pip, wptrunner requires | |
| a copy of the web-platform-tests repository. This can be located | |
| anywhere on the filesystem, but the easiest option is to put it | |
| under the same parent directory as the wptrunner checkout:: | |
| git clone https://github.com/w3c/web-platform-tests.git | |
| It is also necessary to generate a web-platform-tests ``MANIFEST.json`` | |
| file. It's recommended to also put that under the same parent directory as | |
| the wptrunner checkout, in a directory named ``meta``:: | |
| mkdir meta | |
| cd web-platform-tests | |
| python manifest --path ../meta/MANIFEST.json | |
| The ``MANIFEST.json`` file needs to be regenerated each time the | |
| web-platform-tests checkout is updated. To aid with the update process | |
| there is a tool called ``wptupdate``, which is described in | |
| :ref:`wptupdate-label`. | |
| Running the Tests | |
| ----------------- | |
| A test run is started using the ``wptrunner`` command. The command | |
| takes multiple options, of which the following are most significant: | |
| ``--product`` (defaults to `firefox`) | |
| The product to test against: `b2g`, `chrome`, `firefox`, or `servo`. | |
| ``--binary`` (required if product is `firefox` or `servo`) | |
| The path to a binary file for the product (browser) to test against. | |
| ``--webdriver-binary`` (required if product is `chrome`) | |
| The path to a `*driver` binary; e.g., a `chromedriver` binary. | |
| ``--certutil-binary`` (required if product is `firefox` [#]_) | |
| The path to a `certutil` binary (for tests that must be run over https). | |
| ``--metadata`` (required only when not `using default paths`_) | |
| The path to a directory containing test metadata. [#]_ | |
| ``--tests`` (required only when not `using default paths`_) | |
| The path to a directory containing a web-platform-tests checkout. | |
| ``--prefs-root`` (required only when testing a Firefox binary) | |
| The path to a directory containing Firefox test-harness preferences. [#]_ | |
| ``--config`` (should default to `wptrunner.default.ini`) | |
| The path to the config (ini) file. | |
| .. [#] The ``--certutil-binary`` option is required when the product is | |
| ``firefox`` unless ``--ssl-type=none`` is specified. | |
| .. [#] The ``--metadata`` path is to a directory that contains: | |
| * a ``MANIFEST.json`` file (the web-platform-tests documentation has | |
| instructions on generating this file) | |
| * (optionally) any expectation files (see :ref:`wptupdate-label`) | |
| .. [#] Example ``--prefs-root`` value: ``~/mozilla-central/testing/profiles``. | |
| There are also a variety of other command-line options available; use | |
| ``--help`` to list them. | |
| The following examples show how to start wptrunner with various options. | |
| ------------------ | |
| Starting wptrunner | |
| ------------------ | |
| The examples below assume the following directory layout, | |
| though no specific folder structure is required:: | |
| ~/testtwf/wptrunner # wptrunner checkout | |
| ~/testtwf/web-platform-tests # web-platform-tests checkout | |
| ~/testtwf/meta # metadata | |
| To test a Firefox Nightly build in an OS X environment, you might start | |
| wptrunner using something similar to the following example:: | |
| wptrunner --metadata=~/testtwf/meta/ --tests=~/testtwf/web-platform-tests/ \ | |
| --binary=~/mozilla-central/obj-x86_64-apple-darwin14.3.0/dist/Nightly.app/Contents/MacOS/firefox \ | |
| --certutil-binary=~/mozilla-central/obj-x86_64-apple-darwin14.3.0/security/nss/cmd/certutil/certutil \ | |
| --prefs-root=~/mozilla-central/testing/profiles | |
| And to test a Chromium build in an OS X environment, you might start | |
| wptrunner using something similar to the following example:: | |
| wptrunner --metadata=~/testtwf/meta/ --tests=~/testtwf/web-platform-tests/ \ | |
| --binary=~/chromium/src/out/Release/Chromium.app/Contents/MacOS/Chromium \ | |
| --webdriver-binary=/usr/local/bin/chromedriver --product=chrome | |
| -------------------- | |
| Running test subsets | |
| -------------------- | |
| To restrict a test run just to tests in a particular web-platform-tests | |
| subdirectory, specify the directory name in the positional arguments after | |
| the options; for example, run just the tests in the `dom` subdirectory:: | |
| wptrunner --metadata=~/testtwf/meta --tests=~/testtwf/web-platform-tests/ \ | |
| --binary=/path/to/firefox --certutil-binary=/path/to/certutil \ | |
| --prefs-root=/path/to/testing/profiles \ | |
| dom | |
| ------------------- | |
| Running in parallel | |
| ------------------- | |
| To speed up the testing process, use the ``--processes`` option to have | |
| wptrunner run multiple browser instances in parallel. For example, to | |
| have wptrunner attempt to run tests against with six browser instances | |
| in parallel, specify ``--processes=6``. But note that behaviour in this | |
| mode is necessarily less deterministic than with ``--processes=1`` (the | |
| default), so there may be more noise in the test results. | |
| ------------------- | |
| Using default paths | |
| ------------------- | |
| The (otherwise-required) ``--tests`` and ``--metadata`` command-line | |
| options/flags be omitted if any configuration file is found that | |
| contains a section specifying the ``tests`` and ``metadata`` keys. | |
| See the `Configuration File`_ section for more information about | |
| configuration files, including information about their expected | |
| locations. | |
| The content of the ``wptrunner.default.ini`` default configuration file | |
| makes wptrunner look for tests (that is, a web-platform-tests checkout) | |
| as a subdirectory of the current directory named ``tests``, and for | |
| metadata files in a subdirectory of the current directory named ``meta``. | |
| Output | |
| ------ | |
| wptrunner uses the :py:mod:`mozlog` package for output. This | |
| structures events such as test results or log messages as JSON objects | |
| that can then be fed to other tools for interpretation. More details | |
| about the message format are given in the | |
| :py:mod:`mozlog` documentation. | |
| By default the raw JSON messages are dumped to stdout. This is | |
| convenient for piping into other tools, but not ideal for humans | |
| reading the output. :py:mod:`mozlog` comes with several other | |
| formatters, which are accessible through command line options. The | |
| general format of these options is ``--log-name=dest``, where ``name`` | |
| is the name of the format and ``dest`` is a path to a destination | |
| file, or ``-`` for stdout. The raw JSON data is written by the ``raw`` | |
| formatter so, the default setup corresponds to ``--log-raw=-``. | |
| A reasonable output format for humans is provided as ``mach``. So in | |
| order to output the full raw log to a file and a human-readable | |
| summary to stdout, one might pass the options:: | |
| --log-raw=output.log --log-mach=- | |
| Configuration File | |
| ------------------ | |
| wptrunner uses a ``.ini`` file to control some configuration | |
| sections. The file has three sections; ``[products]``, | |
| ``[manifest:default]`` and ``[web-platform-tests]``. | |
| ``[products]`` is used to | |
| define the set of available products. By default this section is empty | |
| which means that all the products distributed with wptrunner are | |
| enabled (although their dependencies may not be installed). The set | |
| of enabled products can be set by using the product name as the | |
| key. For built in products the value is empty. It is also possible to | |
| provide the path to a script implementing the browser functionality | |
| e.g.:: | |
| [products] | |
| chrome = | |
| netscape4 = path/to/netscape.py | |
| ``[manifest:default]`` specifies the default paths for the tests and metadata, | |
| relative to the config file. For example:: | |
| [manifest:default] | |
| tests = ~/testtwf/web-platform-tests | |
| metadata = ~/testtwf/meta | |
| ``[web-platform-tests]`` is used to set the properties of the upstream | |
| repository when updating the paths. ``remote_url`` specifies the git | |
| url to pull from; ``branch`` the branch to sync against and | |
| ``sync_path`` the local path, relative to the configuration file, to | |
| use when checking out the tests e.g.:: | |
| [web-platform-tests] | |
| remote_url = https://github.com/w3c/web-platform-tests.git | |
| branch = master | |
| sync_path = sync | |
| A configuration file must contain all the above fields; falling back | |
| to the default values for unspecified fields is not yet supported. | |
| The ``wptrunner`` and ``wptupdate`` commands will use configuration | |
| files in the following order: | |
| * Any path supplied with a ``--config`` flag to the command. | |
| * A file called ``wptrunner.ini`` in the current directory | |
| * The default configuration file (``wptrunner.default.ini`` in the | |
| source directory) |