From d301d95cc4ac3064bcf72022bd450dfe20aeb39a Mon Sep 17 00:00:00 2001 From: George Gelashvili and Tira Odhner Date: Wed, 8 Feb 2017 13:55:36 -0500 Subject: [PATCH] PATCH-IN-FLIGHT Add --exclude parameter for tests - it can take multiple packages as comma-separated list --- web/pgadmin/utils/route.py | 30 +++++++++++++----------------- web/regression/README | 8 ++++++++ web/regression/runtests.py | 14 ++++++++++++-- 3 files changed, 33 insertions(+), 19 deletions(-) diff --git a/web/pgadmin/utils/route.py b/web/pgadmin/utils/route.py index f18d2c18..996892a6 100644 --- a/web/pgadmin/utils/route.py +++ b/web/pgadmin/utils/route.py @@ -54,27 +54,23 @@ class TestsGeneratorRegistry(ABCMeta): ABCMeta.__init__(cls, name, bases, d) @classmethod - def load_generators(cls, pkg): + def load_generators(cls, pkg_root, exclude_pkgs): cls.registry = dict() + all_modules = [] + + all_modules += find_modules(pkg_root, False, True) + # Check for SERVER mode - if config.SERVER_MODE: - for module_name in find_modules(pkg, False, True): - try: - if "tests." in str(module_name): - import_module(module_name) - except ImportError: - traceback.print_exc(file=sys.stderr) - else: - for module_name in find_modules(pkg, False, True): - try: - # Exclude the test cases in browser node if SERVER_MODE - # is False - if "pgadmin.browser.tests" not in module_name: - import_module(module_name) - except ImportError: - traceback.print_exc(file=sys.stderr) + for module_name in all_modules: + try: + if "tests." in str(module_name) and not any( + str(module_name).startswith('pgadmin.' + str(exclude_pkg)) for exclude_pkg in exclude_pkgs + ): + import_module(module_name) + except ImportError: + traceback.print_exc(file=sys.stderr) import six diff --git a/web/regression/README b/web/regression/README index cfd467d2..3bab1114 100644 --- a/web/regression/README +++ b/web/regression/README @@ -130,3 +130,11 @@ Execution: Example 2) Run test framework for 'database' node run 'python runtests.py --pkg browser.server_groups.servers.databases.tests' + +- Exclude a package and its subpackages when running tests: + + Example: exclude acceptance tests but run all others: + run 'python runtests.py --exclude acceptance' + + Example: exclude multiple packages: + run 'python runtests.py --exclude browser.server_groups.servers.databases,browser.server_groups.servers.tablespaces' diff --git a/web/regression/runtests.py b/web/regression/runtests.py index a64c738b..f387b9c2 100644 --- a/web/regression/runtests.py +++ b/web/regression/runtests.py @@ -138,12 +138,20 @@ def get_test_modules(arguments): from pgadmin.utils.route import TestsGeneratorRegistry + exclude_pkgs = [] + + if not config.SERVER_MODE: + exclude_pkgs.append("browser.tests") + if arguments['exclude'] is not None: + exclude_pkgs += arguments['exclude'].split(',') + # Load the test modules which are in given package(i.e. in arguments.pkg) if arguments['pkg'] is None or arguments['pkg'] == "all": - TestsGeneratorRegistry.load_generators('pgadmin') + TestsGeneratorRegistry.load_generators('pgadmin', exclude_pkgs) else: TestsGeneratorRegistry.load_generators('pgadmin.%s' % - arguments['pkg']) + arguments['pkg'], + exclude_pkgs) # Sort module list so that test suite executes the test cases sequentially module_list = TestsGeneratorRegistry.registry.items() @@ -164,6 +172,8 @@ def add_arguments(): parser = argparse.ArgumentParser(description='Test suite for pgAdmin4') parser.add_argument('--pkg', help='Executes the test cases of particular' ' package and subpackages') + parser.add_argument('--exclude', help='Skips execution of the test ' + 'cases of particular package and sub-packages') arg = parser.parse_args() return arg -- 2.11.0