Mypal/testing/talos/talos/cmdline.py
2019-03-11 13:26:37 +03:00

154 lines
6.6 KiB
Python

# 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
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 test.test_dict().itervalues()
]
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('--branchName', dest="branch_name", default='',
help="Name of the branch we are testing on")
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:cart)")
add_arg('--suite',
help="Suite to use (instead of --activeTests)")
add_arg('--disable-e10s', dest='e10s',
action='store_false', default=True,
help="disable e10s")
add_arg('--noChrome', action='store_true',
help="do not run tests as chrome")
add_arg('--rss', action='store_true',
help="Collect RSS counters from pageloader instead of the"
" operating system")
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('--spsProfile', action="store_true", dest="sps_profile",
help="Profile the run and output the results in $MOZ_UPLOAD_DIR")
add_arg('--spsProfileInterval', dest='sps_profile_interval', type=int,
help="How frequently to take samples (ms)")
add_arg('--spsProfileEntries', dest="sps_profile_entries", type=int,
help="How many samples to take with the profiler")
add_arg('--extension', dest='extensions', action='append',
default=['${talos}/talos-powers/talos-powers-signed.xpi',
'${talos}/pageloader/pageloader-signed.xpi'],
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('--noShutdown', dest='shutdown', action='store_true',
help="Record time browser takes to shutdown after testing")
add_arg('--setpref', action='append', default=[], dest="extraPrefs",
metavar="PREF=VALUE",
help="defines an extra user preference")
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('--tpdelay', type=int,
help="length of the pageloader delay")
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_logging_group(parser)
return parser
def parse_args(argv=None):
parser = create_parser()
return parser.parse_args(argv)