gecko-dev/testing/condprofile
Gregory Mierzwinski cab117c6f9 Bug 1756863 - Pass the external test root found in raptor to condprof. r=perftest-reviewers,AlexandruIonescu
This patch modifies condprof to accept an optional `remote_test_root` argument so that we can change where the profile gets created and pulled from. Then we pass the external test root through this parameter from raptor to condprof. This fixes an issue on the Samsung A51 device as it can't store the profiles in the default location.

Differential Revision: https://phabricator.services.mozilla.com/D139517
2022-03-11 13:14:50 +00:00
..
condprof Bug 1756863 - Pass the external test root found in raptor to condprof. r=perftest-reviewers,AlexandruIonescu 2022-03-11 13:14:50 +00:00
requirements Bug 1718630 - Use mozversion to get the version of the browser r=perftest-reviewers,davehunt 2021-08-20 12:05:38 +00:00
Makefile
README.rst Bug 1753413 - fx doc: Remove whitespaces, trailing lines & windows CR r=andi,perftest-reviewers,sparky 2022-02-03 18:34:58 +00:00
mach_commands.py Bug 1696251: Allow mach commands as stand-alone functions and adapt existing commands. r=mhentges,webdriver-reviewers,perftest-reviewers,sparky,whimboo 2021-09-27 18:12:51 +00:00
moz.build
setup.py Bug 1710452 - Enable browsertime YTP tests r=perftest-reviewers,Bebe 2021-06-30 13:35:35 +00:00
tox.ini

README.rst

Conditioned Profile
===================

This project provides a command-line tool that is used to generate and maintain
a collection of Gecko profiles.

Unlike testing/profiles, the **conditioned profiles** are a collection of full
Gecko profiles that are dynamically updated every day.

Each profile is created or updated using a **scenario** and a
**customization**, and eventually uploaded as an artifact in TaskCluster.

The goal of the project is to build a collection of profiles that we can use in
our performance or functional tests instead of the empty profile that we
usually create on the fly with **mozprofile**.

Having a collection of realistic profiles we can use when running some tests
gives us the ability to check the impact of user profiles on page loads or
other tests.

A full cycle of how this tool is used in Taskcluster looks like this:

For each combination of scenario, customization and platform:

- grabs an existing profile in Taskcluster
- browses the web using the scenario, via the WebDriver client
- recreates a tarball with the updated profile
- uploads it as an index artifact into TaskCluster - maintains a changelog of each change

It's based on the Arsenic webdriver client https://github.com/HDE/arsenic

The project provides two **Mach** commands to interact with the conditioned
profile:

- **fetch-condprofile**: downloads a conditioned profile and deecompress it
- **run-condprofile**: runs on or all conditioned profiles scenarii locally

How to download a conditioned profile
=====================================

From your mozilla-central root, run:

::

    $ ./mach fetch-condprofile

This will grab the latest conditioned profile for your platform. But
you can also grab a specific profile built from any scenario or platform.

You can look at all the options with --help

How to run a conditioned profile
================================

If you want to play a scenario locally to modify it, run for example:

::

    $ ./mach run-condprofile --scenario settled --visible /path/to/generated/profile

The project will run a webdriver session against Firefox and generate the profile.
You can look at all the options with --help

Architecture
============

The conditioned profile project is organized into webdriver **scenarii** and
**customization** files.

Scenarii
--------

Scenarii are coroutines registered under a unique name in condprof/scenarii/__init__.py.

They get a **session** object and some **options**.

The scenario can do whatever it wants with the browser, through the webdriver session
instance.

See Arsenic's `API documentation <https://arsenic.readthedocs.io/en/latest/reference/session.html>`_ for the session class.

Adding a new scenario is done by adding a module in condprof/scenarii/
and register it in condprof/scenarii/__init__.py


Customization
-------------

A customization is a configuration file that can be used to set some
prefs in the browser and install some webextensions.

Customizations are JSON files registered into condprof/customizations,
and they provide four keys:

- **name**: the name of the customization
- **addons**: a mapping of add-ons to install.
- **prefs**: a mapping of prefs to set
- **scenario**: a mapping of options to pass to a specific scenario

In the example below, we install uBlock, set a pref, and pass the
**max_urls** option to the **heavy** scenario.

  {
      "name": "intermediate",
      "addons":{
         "uBlock":"https://addons.mozilla.org/firefox/downloads/file/3361355/ublock_origin-1.21.2-an+fx.xpi"
      },
      "prefs":{
         "accessibility.tabfocus": 9
      },
      "scenario": {
         "heavy": {"max_urls": 10}
      }
   }