Source code

Revision control

Copy as Markdown

Other Tools

# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this file,
# You can obtain one at http://mozilla.org/MPL/2.0/.
import argparse
import os
import six
from mozlog.commandline import add_logging_group
class _StopAction(argparse.Action):
def __init__(
self,
option_strings,
dest=argparse.SUPPRESS,
default=argparse.SUPPRESS,
help=None,
):
super(_StopAction, self).__init__(
option_strings=option_strings,
dest=dest,
default=default,
nargs=0,
help=help,
)
class _ListTests(_StopAction):
def __call__(self, parser, namespace, values, option_string=None):
from talos import test
print("Available tests:")
print("================\n")
test_class_names = [
(test_class.name(), test_class.description())
for test_class in six.itervalues(test.test_dict())
]
test_class_names.sort()
for name, description in test_class_names:
print(name)
print("-" * len(name))
print(description)
print() # Appends a single blank line to the end
parser.exit()
class _ListSuite(_StopAction):
def __call__(self, parser, namespace, values, option_string=None):
from talos.config import suites_conf
print("Available suites:")
conf = suites_conf()
max_suite_name = max([len(s) for s in conf])
pattern = " %%-%ds (%%s)" % max_suite_name
for name in conf:
print(pattern % (name, ":".join(conf[name]["tests"])))
print()
parser.exit()
def create_parser(mach_interface=False):
parser = argparse.ArgumentParser()
add_arg = parser.add_argument
if not mach_interface:
add_arg(
"-e",
"--executablePath",
required=True,
dest="browser_path",
help="path to executable we are testing",
)
add_arg("-t", "--title", default="qm-pxp01", help="Title of the test run")
add_arg(
"--browserWait",
dest="browser_wait",
default=5,
type=int,
help="Amount of time allowed for the browser to cleanly close",
)
add_arg(
"-a",
"--activeTests",
help="List of tests to run, separated by ':' (ex. damp:tart)",
)
add_arg("--suite", help="Suite to use (instead of --activeTests)")
add_arg("--subtests", help="Name of the subtest(s) to run (works only on DAMP)")
add_arg(
"--mainthread",
action="store_true",
help="Collect mainthread IO data from the browser by setting"
" an environment variable",
)
add_arg(
"--mozAfterPaint",
action="store_true",
dest="tpmozafterpaint",
help="wait for MozAfterPaint event before recording the time",
)
add_arg(
"--firstPaint",
action="store_true",
dest="firstpaint",
help="Also report the first paint value in supported tests",
)
add_arg(
"--useHero",
action="store_true",
dest="tphero",
help="use Hero elementtiming attribute to record the time",
)
add_arg(
"--userReady",
action="store_true",
dest="userready",
help="Also report the user ready value in supported tests",
)
add_arg(
"--spsProfile",
action="store_true",
dest="gecko_profile",
help="(Deprecated - Use --gecko-profile instead.) Profile the "
"run and output the results in $MOZ_UPLOAD_DIR.",
)
add_arg(
"--spsProfileInterval",
dest="gecko_profile_interval",
type=float,
help="(Deprecated - Use --gecko-profile-interval instead.) How "
"frequently to take samples (ms)",
)
add_arg(
"--spsProfileEntries",
dest="gecko_profile_entries",
type=int,
help="(Deprecated - Use --gecko-profile-entries instead.) How "
"many samples to take with the profiler",
)
add_arg(
"--gecko-profile",
action="store_true",
dest="gecko_profile",
help="Profile the run and output the results in $MOZ_UPLOAD_DIR. "
"After talos is finished, profiler.firefox.com will be launched in "
"Firefox so you can analyze the local profiles. To disable "
"auto-launching of profiler.firefox.com set the "
"DISABLE_PROFILE_LAUNCH=1 env var.",
)
add_arg(
"--gecko-profile-interval",
dest="gecko_profile_interval",
type=float,
help="How frequently to take samples (ms)",
)
add_arg(
"--gecko-profile-entries",
dest="gecko_profile_entries",
type=int,
help="How many samples to take with the profiler",
)
add_arg(
"--gecko-profile-features",
dest="gecko_profile_features",
type=str,
help="Comma-separated list of features to enable in the profiler",
)
add_arg(
"--gecko-profile-threads",
dest="gecko_profile_threads",
type=str,
help="Comma-separated list of threads to sample",
)
add_arg(
"--gecko-profile-extra-threads",
dest="gecko_profile_extra_threads",
type=str,
help="Comma-separated list of extra threads to add to the default list of threads to profile.",
)
add_arg(
"--extension",
dest="extensions",
action="append",
default=["${talos}/talos-powers"],
help="Extension to install while running",
)
add_arg("--fast", action="store_true", help="Run tp tests as tp_fast")
add_arg(
"--symbolsPath",
dest="symbols_path",
help="Path to the symbols for the build we are testing",
)
add_arg("--xperf_path", help="Path to windows performance tool xperf.exe")
add_arg(
"--test_timeout",
type=int,
default=1200,
help="Time to wait for the browser to output to the log file",
)
add_arg(
"--errorFile",
dest="error_filename",
default=os.path.abspath("browser_failures.txt"),
help="Filename to store the errors found during the test."
" Currently used for xperf only.",
)
add_arg(
"--setpref",
action="append",
default=[],
dest="extraPrefs",
metavar="PREF=VALUE",
help="Set a browser preference. May be used multiple times.",
)
add_arg(
"--firstNonBlankPaint",
action="store_true",
dest="fnbpaint",
help="Wait for firstNonBlankPaint event before recording the time",
)
add_arg(
"--pdfPaint",
action="store_true",
dest="pdfpaint",
help="Wait for the first page of a PDF to be rendered",
)
add_arg(
"--pdfPaintChunk",
type=int,
default=None,
dest="pdfpaint_chunk",
help=(
"Chunk of the pdfpaint test to run (each chunk runs at most 100 pdfs). "
"Defaults to None to run all the pdfs at the same time."
),
)
add_arg(
"--pdfPaintName",
type=str,
default=None,
dest="pdfpaint_name",
help=(
"Name of a pdfpaint test to run (e.g. xfa_imm5257e.pdf). Chunking will be "
"ignored/disabled if this option is used."
),
)
add_arg("--webServer", dest="webserver", help="DEPRECATED")
if not mach_interface:
add_arg(
"--develop",
action="store_true",
default=False,
help="useful for running tests on a developer machine."
" Doesn't upload to the graph servers.",
)
add_arg("--cycles", type=int, help="number of browser cycles to run")
add_arg("--tpmanifest", help="manifest file to test")
add_arg("--tpcycles", type=int, help="number of pageloader cycles to run")
add_arg(
"--tptimeout",
type=int,
help="number of milliseconds to wait for a load event after"
" calling loadURI before timing out",
)
add_arg(
"--tppagecycles",
type=int,
help="number of pageloader cycles to run for each page in" " the manifest",
)
add_arg(
"--no-download",
action="store_true",
dest="no_download",
help="Do not download the talos test pagesets",
)
add_arg(
"--sourcestamp",
help="Specify the hg revision or sourcestamp for the changeset"
" we are testing. This will use the value found in"
" application.ini if it is not specified.",
)
add_arg(
"--repository",
help="Specify the url for the repository we are testing. "
"This will use the value found in application.ini if"
" it is not specified.",
)
add_arg(
"--framework",
help="Will post to the specified framework for Perfherder. "
'Default "talos". Used primarily for experiments on '
"new platforms",
)
add_arg("--print-tests", action=_ListTests, help="print available tests")
add_arg("--print-suites", action=_ListSuite, help="list available suites")
add_arg(
"--no-upload-results",
action="store_true",
dest="no_upload_results",
help="If given, it disables uploading of talos results.",
)
add_arg(
"--profile",
type=str,
default=None,
help="Downloads a profile from TaskCluster and uses it",
)
debug_options = parser.add_argument_group("Command Arguments for debugging")
debug_options.add_argument(
"--debug",
action="store_true",
help="Enable the debugger. Not specifying a --debugger option will"
"result in the default debugger being used.",
)
debug_options.add_argument(
"--debugger", default=None, help="Name of debugger to use."
)
debug_options.add_argument(
"--debugger-args",
default=None,
metavar="params",
help="Command-line arguments to pass to the debugger itself; split"
"as the Bourne shell would.",
)
add_arg(
"--code-coverage",
action="store_true",
dest="code_coverage",
help="Remove any existing ccov gcda output files after browser"
" initialization but before starting the tests. NOTE:"
" Currently only supported in production.",
)
add_arg(
"--disable-fission",
action="store_false",
dest="fission",
default=True,
help="Disable Fission (site isolation) in Gecko.",
)
add_arg(
"--project",
type=str,
default="mozilla-central",
help="The project branch we're running tests on. Used for "
"disabling/skipping tests.",
)
add_arg(
"--screenshot-on-failure",
action="store_true",
dest="screenshot_on_failure",
default=False,
help="Take a screenshot when the test fails.",
)
add_logging_group(parser)
return parser
def parse_args(argv=None):
parser = create_parser()
return parser.parse_args(argv)