1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
|
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}
}
}
|