Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(13)

Unified Diff: tools/telemetry/telemetry/unittest/run_tests.py

Issue 228073002: [telemetry] Refactor run_tests to remove old cruft. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: tools/telemetry/telemetry/unittest/run_tests.py
diff --git a/tools/telemetry/telemetry/unittest/run_tests.py b/tools/telemetry/telemetry/unittest/run_tests.py
index 2605f342b2b5530cdfa9b90d0fece005cedfcdf2..352134140922d58ae0a25823d8f7227495eb3d00 100644
--- a/tools/telemetry/telemetry/unittest/run_tests.py
+++ b/tools/telemetry/telemetry/unittest/run_tests.py
@@ -6,70 +6,80 @@ import logging
import unittest
from telemetry import decorators
+from telemetry.core import browser_finder
from telemetry.core import browser_options
+from telemetry.core import command_line
from telemetry.core import discover
-from telemetry.core import util
-from telemetry.unittest import gtest_testrunner
-from telemetry.unittest import options_for_unittests
+from telemetry.unittest import gtest_unittest_results
+
+
+class Environment(object):
+ def __init__(self, top_level_dir, test_dirs):
+ self._top_level_dir = top_level_dir
+ self._test_dirs = tuple(test_dirs)
+
+ @property
+ def top_level_dir(self):
+ return self._top_level_dir
+
+ @property
+ def test_dirs(self):
+ return self._test_dirs
def Discover(start_dir, top_level_dir=None, pattern='test*.py'):
loader = unittest.defaultTestLoader
- loader.suiteClass = gtest_testrunner.GTestTestSuite
- subsuites = []
+ loader.suiteClass = gtest_unittest_results.GTestTestSuite
+ test_suites = []
modules = discover.DiscoverModules(start_dir, top_level_dir, pattern)
for module in modules:
if hasattr(module, 'suite'):
- new_suite = module.suite()
+ suite = module.suite()
else:
- new_suite = loader.loadTestsFromModule(module)
- if new_suite.countTestCases():
- subsuites.append(new_suite)
- return gtest_testrunner.GTestTestSuite(subsuites)
+ suite = loader.loadTestsFromModule(module)
+ if suite.countTestCases():
+ test_suites.append(suite)
+ return test_suites
def FilterSuite(suite, predicate):
new_suite = suite.__class__()
- for x in suite:
- if isinstance(x, unittest.TestSuite):
- subsuite = FilterSuite(x, predicate)
- if subsuite.countTestCases() == 0:
- continue
-
- new_suite.addTest(subsuite)
- continue
-
- assert isinstance(x, unittest.TestCase)
- if predicate(x):
- new_suite.addTest(x)
+ for test in suite:
+ if isinstance(test, unittest.TestSuite):
+ subsuite = FilterSuite(test, predicate)
+ if subsuite.countTestCases():
+ new_suite.addTest(subsuite)
+ else:
+ assert isinstance(test, unittest.TestCase)
+ if predicate(test):
+ new_suite.addTest(test)
return new_suite
-def DiscoverAndRunTests(dir_name, args, top_level_dir, possible_browser,
- default_options, runner):
- if not runner:
- runner = gtest_testrunner.GTestTestRunner(print_result_after_run=True)
- suite = Discover(dir_name, top_level_dir, '*_unittest.py')
+def DiscoverTests(search_dirs, top_level_dir, possible_browser,
+ selected_tests=None, run_disabled_tests=False):
def IsTestSelected(test):
- if len(args) != 0:
+ if selected_tests:
found = False
- for name in args:
+ for name in selected_tests:
if name in test.id():
found = True
if not found:
return False
- if default_options.run_disabled_tests:
+ if run_disabled_tests:
return True
# pylint: disable=W0212
if not hasattr(test, '_testMethodName'):
return True
method = getattr(test, test._testMethodName)
return decorators.IsEnabled(method, possible_browser)
- filtered_suite = FilterSuite(suite, IsTestSelected)
- test_result = runner.run(filtered_suite)
- return test_result
+
+ wrapper_suite = gtest_unittest_results.GTestTestSuite()
+ for search_dir in search_dirs:
+ wrapper_suite.addTests(Discover(search_dir, top_level_dir, '*_unittest.py'))
+ return FilterSuite(wrapper_suite, IsTestSelected)
def RestoreLoggingLevel(func):
@@ -87,53 +97,51 @@ def RestoreLoggingLevel(func):
return _LoggingRestoreWrapper
-@RestoreLoggingLevel
-def Main(args, start_dir, top_level_dir, runner=None):
- """Unit test suite that collects all test cases for telemetry."""
- # Add unittest_data to the path so we can import packages from it.
- util.AddDirToPythonPath(util.GetUnittestDataDir())
-
- default_options = browser_options.BrowserFinderOptions()
- default_options.browser_type = 'any'
-
- parser = default_options.CreateParser('run_tests [options] [test names]')
- parser.add_option('--repeat-count', dest='run_test_repeat_count',
- type='int', default=1,
- help='Repeats each a provided number of times.')
- parser.add_option('-d', '--also-run-disabled-tests',
- dest='run_disabled_tests',
- action='store_true', default=False,
- help='Ignore @Disabled and @Enabled restrictions.')
-
- _, args = parser.parse_args(args)
-
- if default_options.verbosity == 0:
- logging.getLogger().setLevel(logging.WARN)
-
- from telemetry.core import browser_finder
- try:
- browser_to_create = browser_finder.FindBrowser(default_options)
- except browser_finder.BrowserFinderException, ex:
- logging.error(str(ex))
- return 1
-
- if browser_to_create == None:
- logging.error('No browser found of type %s. Cannot run tests.',
- default_options.browser_type)
- logging.error('Re-run with --browser=list to see available browser types.')
- return 1
-
- options_for_unittests.Set(default_options,
- browser_to_create.browser_type)
- try:
- success = True
- for _ in xrange(default_options.run_test_repeat_count):
- success = success and DiscoverAndRunTests(
- start_dir, args, top_level_dir, browser_to_create, default_options,
- runner)
- if success:
- return 0
- finally:
- options_for_unittests.Set(None, None)
-
- return 1
+environment = None
+
+
+class RunTestsCommand(command_line.OptparseCommand):
+ """Run unit tests"""
+
+ usage = '[test_name ...] [<options>]'
+
+ @classmethod
+ def CreateParser(cls):
+ options = browser_options.BrowserFinderOptions()
+ options.browser_type = 'any'
+ parser = options.CreateParser('%%prog %s' % cls.usage)
+ return parser
+
+ @classmethod
+ def AddCommandLineArgs(cls, parser):
+ parser.add_option('--repeat-count', type='int', default=1,
+ help='Repeats each a provided number of times.')
+ parser.add_option('-d', '--also-run-disabled-tests',
+ dest='run_disabled_tests',
+ action='store_true', default=False,
+ help='Ignore @Disabled and @Enabled restrictions.')
+
+ @classmethod
+ def ProcessCommandLineArgs(cls, parser, args):
+ if args.verbosity == 0:
+ logging.getLogger().setLevel(logging.WARN)
+
+ try:
+ possible_browser = browser_finder.FindBrowser(args)
+ except browser_finder.BrowserFinderException, ex:
+ parser.error(ex)
+
+ if not possible_browser:
+ parser.error('No browser found of type %s. Cannot run tests.\n'
+ 'Re-run with --browser=list to see '
+ 'available browser types.' % args.browser_type)
+
+ @RestoreLoggingLevel
+ def Run(self, args):
+ possible_browser = browser_finder.FindBrowser(args)
+ test_suite = DiscoverTests(
+ environment.test_dirs, environment.top_level_dir, possible_browser,
+ args.positional_args, args.run_disabled_tests)
+ runner = gtest_unittest_results.GTestTestRunner()
+ result = runner.run(test_suite, args.repeat_count, args)
+ return len(result.failures_and_errors)
« no previous file with comments | « tools/telemetry/telemetry/unittest/options_for_unittests.py ('k') | tools/telemetry/telemetry/unittest/run_tests_unittest.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698