Skip to content

Latest commit

 

History

History
114 lines (77 loc) · 3.59 KB

README.rst

File metadata and controls

114 lines (77 loc) · 3.59 KB

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 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}

}

}