| 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/web-platform-tests/wpt.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: `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/web-platform-tests/wpt.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) |