def UpdateFromParseResults(self, finder_options): """Copies our options from finder_options""" browser_options_list = [ 'extra_browser_args_as_string', 'extra_wpr_args_as_string', 'netsim', 'profile_dir', 'profile_type', 'show_stdout', 'synthetic_gesture_source_type', 'use_devtools_active_port', ] for o in browser_options_list: a = getattr(finder_options, o, None) if a is not None: setattr(self, o, a) delattr(finder_options, o) self.browser_type = finder_options.browser_type if hasattr(self, 'extra_browser_args_as_string'): # pylint: disable=E1101 tmp = shlex.split(self.extra_browser_args_as_string) # pylint: disable=E1101 self.AppendExtraBrowserArgs(tmp) delattr(self, 'extra_browser_args_as_string') if hasattr(self, 'extra_wpr_args_as_string'): # pylint: disable=E1101 tmp = shlex.split(self.extra_wpr_args_as_string) # pylint: disable=E1101 self.extra_wpr_args.extend(tmp) delattr(self, 'extra_wpr_args_as_string') if self.profile_type == 'default': self.dont_override_profile = True if self.profile_dir and self.profile_type != 'clean': logging.critical( "It's illegal to specify both --profile-type and --profile-dir.\n" "For more information see: http://goo.gl/ngdGD5") sys.exit(1) if self.profile_dir and not os.path.isdir(self.profile_dir): logging.critical( "Directory specified by --profile-dir (%s) doesn't exist " "or isn't a directory.\n" "For more information see: http://goo.gl/ngdGD5" % self.profile_dir) sys.exit(1) if not self.profile_dir: self.profile_dir = profile_types.GetProfileDir(self.profile_type) # This deferred import is necessary because browser_options is imported in # telemetry/telemetry/__init__.py. from telemetry.core.backends.chrome import chrome_browser_options finder_options.browser_options = ( chrome_browser_options.CreateChromeBrowserOptions(self))
def UpdateFromParseResults(self, finder_options): """Copies our options from finder_options""" browser_options_list = [ 'extra_browser_args_as_string', 'extra_wpr_args_as_string', 'netsim', 'profile_dir', 'profile_type', 'show_stdout', ] for o in browser_options_list: a = getattr(finder_options, o, None) if a is not None: setattr(self, o, a) delattr(finder_options, o) self.browser_type = finder_options.browser_type if hasattr(self, 'extra_browser_args_as_string'): # pylint: disable=E1101 tmp = shlex.split( self.extra_browser_args_as_string) # pylint: disable=E1101 self.AppendExtraBrowserArgs(tmp) delattr(self, 'extra_browser_args_as_string') if hasattr(self, 'extra_wpr_args_as_string'): # pylint: disable=E1101 tmp = shlex.split( self.extra_wpr_args_as_string) # pylint: disable=E1101 self.extra_wpr_args.extend(tmp) delattr(self, 'extra_wpr_args_as_string') if self.profile_type == 'default': self.dont_override_profile = True if self.profile_dir and self.profile_type != 'clean': raise Exception("It's illegal to specify both --profile-type and" " --profile-dir.") if self.profile_dir and not os.path.isdir(self.profile_dir): raise Exception("Directory specified by --profile-dir (%s) doesn't" " exist or isn't a directory." % (self.profile_dir)) if not self.profile_dir: self.profile_dir = profile_types.GetProfileDir(self.profile_type) # This deferred import is necessary because browser_options is imported in # telemetry/telemetry/__init__.py. from telemetry.core.backends.chrome import chrome_browser_options finder_options.browser_options = ( chrome_browser_options.CreateChromeBrowserOptions(self))
def ParseArgs(args=None): defaults = parser.get_default_values() for k, v in defaults.__dict__.items(): if k in self.__dict__ and self.__dict__[k] != None: continue self.__dict__[k] = v ret = real_parse(args, self) # pylint: disable=E1121 if self.verbosity >= 2: logging.basicConfig(level=logging.DEBUG) elif self.verbosity: logging.basicConfig(level=logging.INFO) else: logging.basicConfig(level=logging.WARNING) if self.browser_executable and not self.browser_type: self.browser_type = 'exact' if not self.browser_executable and not self.browser_type: sys.stderr.write('Must provide --browser=<type>. ' + 'Use --browser=list for valid options.\n') sys.exit(1) if self.browser_type == 'list': types = browser_finder.GetAllAvailableBrowserTypes(self) sys.stderr.write('Available browsers:\n') sys.stdout.write(' %s\n' % '\n '.join(types)) sys.exit(1) if self.extra_browser_args_as_string: # pylint: disable=E1101 tmp = shlex.split(self.extra_browser_args_as_string) # pylint: disable=E1101 self.extra_browser_args.extend(tmp) delattr(self, 'extra_browser_args_as_string') if self.extra_wpr_args_as_string: # pylint: disable=E1101 tmp = shlex.split(self.extra_wpr_args_as_string) # pylint: disable=E1101 self.extra_wpr_args.extend(tmp) delattr(self, 'extra_wpr_args_as_string') if self.profile_type == 'default': self.dont_override_profile = True elif self.profile_type != 'clean': self.profile_dir = profile_types.GetProfileDir( self.profile_type) delattr(self, 'profile_type') return ret
def CreateParser(self, *args, **kwargs): parser = optparse.OptionParser(*args, **kwargs) # Selection group group = optparse.OptionGroup(parser, 'Which browser to use') group.add_option('--browser', dest='browser_type', default=None, help='Browser type to run, ' 'in order of priority. Supported values: list,%s' % browser_finder.ALL_BROWSER_TYPES) group.add_option('--browser-executable', dest='browser_executable', help='The exact browser to run.') group.add_option('--chrome-root', dest='chrome_root', help='Where to look for chrome builds.' 'Defaults to searching parent dirs by default.') group.add_option('--device', dest='android_device', help='The android device ID to use' 'If not specified, only 0 or 1 connected devcies are supported.') group.add_option('--keep_test_server_ports', action='store_true', help='Indicates the test server ports must be ' 'kept. When this is run via a sharder ' 'the test server ports should be kept and ' 'should not be reset.') group.add_option( '--remote', dest='cros_remote', help='The IP address of a remote ChromeOS device to use.') identity = None testing_rsa = os.path.join( util.GetChromiumSrcDir(), 'third_party', 'chromite', 'ssh_keys', 'testing_rsa') if os.path.exists(testing_rsa): identity = testing_rsa group.add_option('--identity', dest='cros_ssh_identity', default=identity, help='The identity file to use when ssh\'ing into the ChromeOS device') parser.add_option_group(group) # Browser options group = optparse.OptionGroup(parser, 'Browser options') profile_choices = profile_types.GetProfileTypes() group.add_option('--profile-type', dest='profile_type', type='choice', default='clean', choices=profile_choices, help=('The user profile to use. A clean profile is used by default. ' 'Supported values: ' + ', '.join(profile_choices))) group.add_option('--profile-dir', dest='profile_dir', help='Profile directory to launch the browser with. ' 'A clean profile is used by default') group.add_option('--extra-browser-args', dest='extra_browser_args_as_string', help='Additional arguments to pass to the browser when it starts') group.add_option('--extra-wpr-args', dest='extra_wpr_args_as_string', help=('Additional arguments to pass to Web Page Replay. ' 'See third_party/webpagereplay/replay.py for usage.')) group.add_option('--show-stdout', action='store_true', help='When possible, will display the stdout of the process') parser.add_option_group(group) # Page set options group = optparse.OptionGroup(parser, 'Page set options') group.add_option('--pageset-shuffle', action='store_true', dest='pageset_shuffle', help='Shuffle the order of pages within a pageset.') group.add_option('--pageset-shuffle-order-file', dest='pageset_shuffle_order_file', default=None, help='Filename of an output of a previously run test on the current ' + 'pageset. The tests will run in the same order again, overriding ' + 'what is specified by --page-repeat and --pageset-repeat.') parser.add_option_group(group) group = optparse.OptionGroup(parser, 'Web Page Replay options') group.add_option('--allow-live-sites', dest='allow_live_sites', action='store_true', help='Run against live sites if the Web Page Replay archives don\'t ' 'exist. Without this flag, the test will just fail instead ' 'of running against live sites.') parser.add_option_group(group) # Debugging options group = optparse.OptionGroup(parser, 'When things go wrong') profiler_choices = profiler_finder.GetAllAvailableProfilers(None) group.add_option( '--profiler', default=None, type='choice', choices=profiler_choices, help=('Record profiling data using this tool. Supported values: ' + ', '.join(profiler_choices))) group.add_option( '-v', '--verbose', action='count', dest='verbosity', help='Increase verbosity level (repeat as needed)') group.add_option('--print-bootstrap-deps', action='store_true', help='Output bootstrap deps list.') parser.add_option_group(group) # Platform options group = optparse.OptionGroup(parser, 'Platform options') group.add_option('--no-performance-mode', action='store_true', help='Some platforms run on "full performance mode" where the ' 'test is executed at maximum CPU speed in order to minimize noise ' '(specially important for dashboards / continuous builds). ' 'This option prevents Telemetry from tweaking such platform settings.') parser.add_option_group(group) # Repeat options repeat_options.RepeatOptions.AddCommandLineOptions(parser) real_parse = parser.parse_args def ParseArgs(args=None): defaults = parser.get_default_values() for k, v in defaults.__dict__.items(): if k in self.__dict__ and self.__dict__[k] != None: continue self.__dict__[k] = v ret = real_parse(args, self) # pylint: disable=E1121 if self.verbosity >= 2: logging.basicConfig(level=logging.DEBUG) elif self.verbosity: logging.basicConfig(level=logging.INFO) else: logging.basicConfig(level=logging.WARNING) if self.browser_executable and not self.browser_type: self.browser_type = 'exact' if self.browser_type == 'list': try: types = browser_finder.GetAllAvailableBrowserTypes(self) except browser_finder.BrowserFinderException, ex: sys.stderr.write('ERROR: ' + str(ex)) sys.exit(1) sys.stdout.write('Available browsers:\n') sys.stdout.write(' %s\n' % '\n '.join(types)) sys.exit(0) if self.extra_browser_args_as_string: # pylint: disable=E1101 tmp = shlex.split( self.extra_browser_args_as_string) # pylint: disable=E1101 self.extra_browser_args.extend(tmp) delattr(self, 'extra_browser_args_as_string') if self.extra_wpr_args_as_string: # pylint: disable=E1101 tmp = shlex.split( self.extra_wpr_args_as_string) # pylint: disable=E1101 self.extra_wpr_args.extend(tmp) delattr(self, 'extra_wpr_args_as_string') if self.profile_type == 'default': self.dont_override_profile = True if ((hasattr(self, 'output_format') and self.output_format == 'html') and (not hasattr(self, 'output_file') or not self.output_file)): self.output_file = os.path.join(util.GetBaseDir(), 'results.html') # Parse repeat options self.repeat_options.UpdateFromParseResults(self, parser) # TODO(jeremy): I'm in the process of adding explicit knowledge of profile # directories to Telemetry. As part of this work profile_type needs to be # reworked to not override profile_dir. if not self.profile_dir: self.profile_dir = profile_types.GetProfileDir(self.profile_type) return ret
def testGetProfileDir(self): self.assertFalse(profile_types.GetProfileDir('typical_user') is None)