page_test_runner.py revision 2a99a7e74a7f215066514fe81d2bfa6639d9eddd
1# Copyright (c) 2012 The Chromium Authors. All rights reserved. 2# Use of this source code is governed by a BSD-style license that can be 3# found in the LICENSE file. 4import logging 5import os 6import sys 7 8from telemetry.core import browser_finder 9from telemetry.core import browser_options 10from telemetry.page import page_test 11from telemetry.page import page_runner 12from telemetry.page import page_set 13from telemetry.test import discover 14 15def Main(test_dir, page_set_filenames): 16 """Turns a PageTest into a command-line program. 17 18 Args: 19 test_dir: Path to directory containing PageTests. 20 """ 21 tests = discover.DiscoverClasses(test_dir, 22 os.path.join(test_dir, '..'), 23 page_test.PageTest) 24 25 # Naively find the test. If we use the browser options parser, we run 26 # the risk of failing to parse if we use a test-specific parameter. 27 test_name = None 28 for arg in sys.argv: 29 if arg in tests: 30 test_name = arg 31 32 options = browser_options.BrowserOptions() 33 parser = options.CreateParser('%prog [options] <test> <page_set>') 34 35 page_runner.PageRunner.AddCommandLineOptions(parser) 36 37 test = None 38 if test_name is not None: 39 if test_name not in tests: 40 sys.stderr.write('No test name %s found' % test_name) 41 sys.exit(1) 42 test = tests[test_name]() 43 test.AddCommandLineOptions(parser) 44 45 _, args = parser.parse_args() 46 47 if test is None or len(args) != 2: 48 parser.print_usage() 49 print >> sys.stderr, 'Available tests:\n%s\n' % ',\n'.join( 50 sorted(tests.keys())) 51 print >> sys.stderr, 'Available page_sets:\n%s\n' % ',\n'.join( 52 sorted([os.path.relpath(f) 53 for f in page_set_filenames])) 54 sys.exit(1) 55 56 ps = page_set.PageSet.FromFile(args[1]) 57 results = page_test.PageTestResults() 58 59 return RunTestOnPageSet(options, ps, test, results) 60 61def RunTestOnPageSet(options, ps, test, results): 62 test.CustomizeBrowserOptions(options) 63 possible_browser = browser_finder.FindBrowser(options) 64 if not possible_browser: 65 print >> sys.stderr, """No browser found.\n 66Use --browser=list to figure out which are available.\n""" 67 sys.exit(1) 68 69 with page_runner.PageRunner(ps) as runner: 70 runner.Run(options, possible_browser, test, results) 71 72 print '%i pages succeed\n' % len(results.page_successes) 73 if len(results.page_failures): 74 logging.warning('Failed pages: %s', '\n'.join( 75 [failure['page'].url for failure in results.page_failures])) 76 77 if len(results.skipped_pages): 78 logging.warning('Skipped pages: %s', '\n'.join( 79 [skipped['page'].url for skipped in results.skipped_pages])) 80 return min(255, len(results.page_failures)) 81