Chromium Code Reviews| Index: tools/telemetry/telemetry/page_test_runner.py |
| diff --git a/tools/telemetry/telemetry/page_test_runner.py b/tools/telemetry/telemetry/page_test_runner.py |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..4dcb31167ccc2a35ba3d03e28cdddd9709ff3701 |
| --- /dev/null |
| +++ b/tools/telemetry/telemetry/page_test_runner.py |
| @@ -0,0 +1,74 @@ |
| +# Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| +# Use of this source code is governed by a BSD-style license that can be |
| +# found in the LICENSE file. |
| +import logging |
| +import os |
| +import sys |
| + |
| +from telemetry import browser_finder |
| +from telemetry import browser_options |
| +from telemetry import discover |
| +from telemetry import page_test |
| +from telemetry import page_runner |
| +from telemetry import page_set |
| + |
| +def Main(test_dir): |
| + """Turns a PageTest into a command-line program. |
| + |
| + Args: |
| + test_dir: Path to directory containing PageTests. |
| + """ |
| + tests = discover.Discover(test_dir, '', |
| + page_test.PageTest) |
| + |
| + # Naively find the test. If we use the browser options parser, we run |
| + # the risk of failing to parse if we use a test-specific parameter. |
| + test_name = None |
| + for arg in sys.argv: |
| + if arg in tests: |
| + test_name = arg |
| + |
| + options = browser_options.BrowserOptions() |
| + parser = options.CreateParser('%prog [options] <test> <page_set>') |
| + |
| + page_runner.PageRunner.AddCommandLineOptions(parser) |
| + |
| + test = None |
| + if test_name is not None: |
| + test = tests[test_name]() |
|
dtu
2013/02/13 23:54:23
Print a "test not found" message instead of crashi
|
| + test.AddCommandLineOptions(parser) |
| + |
| + _, args = parser.parse_args() |
| + |
| + if test is None or len(args) != 2: |
| + parser.print_usage() |
| + import page_sets # pylint: disable=F0401 |
|
dtu
2013/02/13 23:54:23
How does this import work? Also, tools/telemetry s
|
| + print >> sys.stderr, 'Available tests:\n%s\n' % ',\n'.join( |
| + sorted(tests.keys())) |
| + print >> sys.stderr, 'Available page_sets:\n%s\n' % ',\n'.join( |
| + sorted([os.path.relpath(f) |
| + for f in page_sets.GetAllPageSetFilenames()])) |
| + sys.exit(1) |
| + |
| + ps = page_set.PageSet.FromFile(args[1]) |
| + |
| + test.CustomizeBrowserOptions(options) |
| + possible_browser = browser_finder.FindBrowser(options) |
| + if not possible_browser: |
| + print >> sys.stderr, """No browser found.\n |
| +Use --browser=list to figure out which are available.\n""" |
| + sys.exit(1) |
| + |
| + results = page_test.PageTestResults() |
| + with page_runner.PageRunner(ps) as runner: |
| + runner.Run(options, possible_browser, test, results) |
| + |
| + sys.stdout.write('%i pages succeed\n' % len(results.page_successes)) |
|
dtu
2013/02/13 23:54:23
print
|
| + if len(results.page_failures): |
| + logging.warning('Failed pages: %s', '\n'.join( |
| + [failure['page'].url for failure in results.page_failures])) |
| + |
| + if len(results.skipped_pages): |
| + logging.warning('Skipped pages: %s', '\n'.join( |
| + [skipped['page'].url for skipped in results.skipped_pages])) |
| + return min(255, len(results.page_failures)) |