def SetUpCycler(self, args, setup_memory_module=False): cycler = page_cycler.PageCycler() options = browser_options.BrowserFinderOptions() options.browser_options.platform = FakePlatform() parser = options.CreateParser() page_runner.AddCommandLineArgs(parser) cycler.AddCommandLineArgs(parser) cycler.SetArgumentDefaults(parser) parser.parse_args(args) page_runner.ProcessCommandLineArgs(parser, options) cycler.ProcessCommandLineArgs(parser, options) cycler.CustomizeBrowserOptions(options.browser_options) if setup_memory_module: # Mock out memory metrics; the real ones require a real browser. mock_memory_metric = MockMemoryMetric() mock_memory_module = simple_mock.MockObject() mock_memory_module.ExpectCall('MemoryMetric').WithArgs( simple_mock.DONT_CARE).WillReturn(mock_memory_metric) real_memory_module = page_cycler.memory try: page_cycler.memory = mock_memory_module browser = FakeBrowser() cycler.WillStartBrowser(options.browser_options.platform) cycler.DidStartBrowser(browser) finally: page_cycler.memory = real_memory_module return cycler
def RunMeasurement(self, measurement, ps, expectations=test_expectations.TestExpectations(), options=None): """Runs a measurement against a pageset, returning the rows its outputs.""" if options is None: options = options_for_unittests.GetCopy() assert options temp_parser = options.CreateParser() page_runner.AddCommandLineArgs(temp_parser) measurement.AddCommandLineArgs(temp_parser) measurement.SetArgumentDefaults(temp_parser) defaults = temp_parser.get_default_values() for k, v in defaults.__dict__.items(): if hasattr(options, k): continue setattr(options, k, v) measurement.CustomizeBrowserOptions(options) options.output_file = None options.output_format = 'none' options.output_trace_tag = None page_runner.ProcessCommandLineArgs(temp_parser, options) measurement.ProcessCommandLineArgs(temp_parser, options) return page_runner.Run(measurement, ps, expectations, options)
def AddCommandLineArgs(parser): page_runner.AddCommandLineArgs(parser) profile_creators = _DiscoverProfileCreatorClasses().keys() legal_profile_creators = '|'.join(profile_creators) group = optparse.OptionGroup(parser, 'Profile generation options') group.add_option('--profile-type-to-generate', dest='profile_type_to_generate', default=None, help='Type of profile to generate. ' 'Supported values: %s' % legal_profile_creators) group.add_option('--output-dir', dest='output_dir', help='Generated profile is placed in this directory.') parser.add_option_group(group)
def ParseCommandLine(self, args, env): self._options = browser_options.BrowserFinderOptions() self._parser = self._options.CreateParser( '%%prog [options] %s page_set' % self.test_class_name) test_constructors = self.FindTestConstructors(env.base_paths) test_name = self.FindTestName(test_constructors, args) test = None if test_name: test = test_constructors[test_name]() if isinstance(test, test_module.Test): page_test = test.test() test.AddCommandLineArgs(self._parser) else: page_test = test page_test.AddCommandLineArgs(self._parser) page_runner.AddCommandLineArgs(self._parser) _, self._args = self._parser.parse_args() if len(self._args) < 1: error_message = 'No %s specified.\nAvailable %ss:\n' % ( self.test_class_name, self.test_class_name) test_list_string = ',\n'.join(sorted(test_constructors.keys())) self.PrintParseError(error_message + test_list_string) if not test: error_message = 'No %s named %s.\nAvailable %ss:\n' % ( self.test_class_name, self._args[0], self.test_class_name) test_list_string = ',\n'.join(sorted(test_constructors.keys())) self.PrintParseError(error_message + test_list_string) if isinstance(test, test_module.Test): ps = test.CreatePageSet(self._options) expectations = test.CreateExpectations(ps) test.ProcessCommandLineArgs(self._parser, self._options) else: ps = self.GetPageSet(env) expectations = test.CreateExpectations(ps) page_test.ProcessCommandLineArgs(self._parser, self._options) page_runner.ProcessCommandLineArgs(self._parser, self._options) if len(self._args) > 2: self.PrintParseError('Too many arguments.') return page_test, ps, expectations
def SetUpPageRunnerArguments(options): parser = options.CreateParser() page_runner.AddCommandLineArgs(parser) options.MergeDefaultValues(parser.get_default_values()) page_runner.ProcessCommandLineArgs(parser, options)
def Main(base_dir): measurements = { n: cls for n, cls in discover.DiscoverClasses( base_dir, base_dir, page_measurement.PageMeasurement).items() # Filter out unneeded ProfileCreators (crbug.com/319573). if not issubclass(cls, profile_creator.ProfileCreator) } tests = discover.DiscoverClasses(base_dir, base_dir, test.Test, index_by_class_name=True) options = browser_options.BrowserFinderOptions() parser = options.CreateParser('%prog <PageSet|Test|URL>') page_runner.AddCommandLineArgs(parser) recorder = RecordPage(measurements) recorder.AddCommandLineArgs(parser) quick_args = [a for a in sys.argv[1:] if not a.startswith('-')] if len(quick_args) != 1: parser.print_usage() sys.exit(1) target = quick_args[0] if target in tests: recorder.test = tests[target]().test() recorder.test.AddCommandLineArgs(parser) recorder.test.SetArgumentDefaults(parser) parser.parse_args() recorder.test.ProcessCommandLineArgs(parser, options) ps = tests[target]().CreatePageSet(options) elif discover.IsPageSetFile(target): parser.parse_args() ps = page_set.PageSet.FromFile(target) else: parser.print_usage() sys.exit(1) page_runner.ProcessCommandLineArgs(parser, options) recorder.ProcessCommandLineArgs(parser, options) expectations = test_expectations.TestExpectations() # Set the archive path to something temporary. temp_target_wpr_file_path = tempfile.mkstemp()[1] ps.wpr_archive_info.AddNewTemporaryRecording(temp_target_wpr_file_path) # Do the actual recording. options.browser_options.wpr_mode = wpr_modes.WPR_RECORD options.browser_options.no_proxy_server = True recorder.CustomizeBrowserOptions(options) results = page_runner.Run(recorder, ps, expectations, options) if results.errors or results.failures: logging.warning( 'Some pages failed. The recording has not been updated for ' 'these pages.') logging.warning('Failed pages:\n%s', '\n'.join(zip(*results.errors + results.failures)[0])) if results.skipped: logging.warning('Some pages were skipped. The recording has not been ' 'updated for these pages.') logging.warning('Skipped pages:\n%s', '\n'.join(zip(*results.skipped)[0])) if results.successes: # Update the metadata for the pages which were recorded. ps.wpr_archive_info.AddRecordedPages(results.successes) else: os.remove(temp_target_wpr_file_path) return min(255, len(results.failures))
def _AddCommandLineArgs(self): page_runner.AddCommandLineArgs(self._parser) if self._benchmark is not None: self._benchmark.AddCommandLineArgs(self._parser) self._benchmark.SetArgumentDefaults(self._parser) self._SetArgumentDefaults()
def AddCommandLineArgs(parser): page_runner.AddCommandLineArgs(parser)