def check_test_loader_with_class(self): """Check test discovery with discover class syntax.""" loader = TestLoader(self.SESSION_CONTEXT) tests = loader.discover([os.path.join(discover_dir(), "test_b.py::TestBB")]) assert len(tests) == 2 # Sanity check, test that it discovers two test class & 3 tests if it searches the whole module tests = loader.discover([os.path.join(discover_dir(), "test_b.py")]) assert len(tests) == 3
def check_test_loader_multiple_files(self): loader = TestLoader(self.SESSION_CONTEXT) file_a = os.path.join(discover_dir(), "test_a.py") file_b = os.path.join(discover_dir(), "test_b.py") tests = loader.discover([file_a, file_b]) assert len(tests) == num_tests_in_file(file_a) + num_tests_in_file(file_b)
def check_test_loader_multiple_files(self): loader = TestLoader(self.SESSION_CONTEXT) tests = loader.discover([ os.path.join(discover_dir(), "test_a.py"), os.path.join(discover_dir(), "test_b.py") ]) assert len(tests) == 4
def check_test_loader_with_file(self): """Check discovery on a file. """ loader = TestLoader(self.SESSION_CONTEXT) module_path = os.path.join(discover_dir(), "test_a.py") tests = loader.discover([module_path]) assert len(tests) == num_tests_in_file(module_path)
def _collect_test_context(self, directory, file_name, cls_name, method_name, injected_args): loader = TestLoader(self.session_context, self.logger, injected_args=injected_args, cluster=self.cluster) loaded_context_list = loader.discover(directory, file_name, cls_name, method_name) assert len(loaded_context_list) == 1 test_context = loaded_context_list[0] test_context.cluster = self.cluster return test_context
def main(): """Ducktape entry point. This contains top level logic for ducktape command-line program which does the following: Discover tests Initialize cluster for distributed services Run tests Report a summary of all results """ args = parse_args() # Make .ducktape directory where metadata such as the last used session_id is stored if not os.path.isdir(ConsoleConfig.METADATA_DIR): os.makedirs(ConsoleConfig.METADATA_DIR) # Generate a shared 'global' identifier for this test run and create the directory # in which all test results will be stored session_id = generate_session_id(ConsoleConfig.SESSION_ID_FILE) results_dir = generate_results_dir(session_id) setup_results_directory(results_dir, session_id) session_context = SessionContext(session_id, results_dir, cluster=None, args=args) # Discover and load tests to be run extend_import_paths(args.test_path) loader = TestLoader(session_context) try: test_classes = loader.discover(args.test_path) except LoaderException as e: print "Failed while trying to discover tests: {}".format(e) sys.exit(1) if args.collect_only: print test_classes sys.exit(0) # Initializing the cluster is slow, so do so only if # tests are sure to be run session_context.cluster = VagrantCluster() # Run the tests runner = SerialTestRunner(session_context, test_classes) test_results = runner.run_all_tests() # Report results # TODO command-line hook for type of reporter reporter = SimpleStdoutReporter(test_results) reporter.report() reporter = SimpleFileReporter(test_results) reporter.report() # Generate HTML reporter reporter = HTMLReporter(test_results) reporter.report() if not test_results.get_aggregate_success(): sys.exit(1)
def _collect_test_context(self, directory, file_name, cls_name, method_name, injected_args): loader = TestLoader(self.session_context, self.logger, injected_args=injected_args, cluster=self.cluster) # TODO: deal with this in a more graceful fashion. # In an unlikely even that discover either raises the exception or fails to find exactly one test # we should probably continue trying other tests rather than killing this process loaded_context_list = loader.discover(directory, file_name, cls_name, method_name) assert len(loaded_context_list) == 1 test_context = loaded_context_list[0] test_context.cluster = self.cluster return test_context
def check_test_loader_with_injected_args(self): """When the --parameters command-line option is used, the loader behaves a little bit differently: each test method annotated with @parametrize or @matrix should only expand to a single discovered test, and the injected args should be those passed in from command-line. """ parameters = {"x": 1, "y": -1} loader = TestLoader(self.SESSION_CONTEXT, test_parameters=parameters) file = os.path.join(discover_dir(), "test_decorated.py") tests = loader.discover([file]) assert len(tests) == 4 for t in tests: assert t.injected_args == parameters
def check_test_loader_with_nonexistent_file(self): """Check discovery on a starting path that doesn't exist throws an""" with pytest.raises(LoaderException): loader = TestLoader(self.SESSION_CONTEXT) tests = loader.discover([os.path.join(discover_dir(), "file_that_does_not_exist.py")])
def check_test_loader_with_file(self): """Check discovery on a file. """ loader = TestLoader(self.SESSION_CONTEXT) tests = loader.discover([os.path.join(discover_dir(), "test_a.py")]) assert len(tests) == 1
def main(): """Ducktape entry point. This contains top level logic for ducktape command-line program which does the following: Discover tests Initialize cluster for distributed services Run tests Report a summary of all results """ args = parse_args() if args.version: print ducktape_version() sys.exit(0) # Make .ducktape directory where metadata such as the last used session_id is stored if not os.path.isdir(ConsoleConfig.METADATA_DIR): os.makedirs(ConsoleConfig.METADATA_DIR) # Generate a shared 'global' identifier for this test run and create the directory # in which all test results will be stored session_id = generate_session_id(ConsoleConfig.SESSION_ID_FILE) results_dir = generate_results_dir(args.results_root, session_id) setup_results_directory(args.results_root, results_dir) session_context = SessionContext(session_id, results_dir, cluster=None, args=args) for k, v in vars(args).iteritems(): session_context.logger.debug("Configuration: %s=%s", k, v) # Discover and load tests to be run extend_import_paths(args.test_path) loader = TestLoader(session_context) try: tests = loader.discover(args.test_path) except LoaderException as e: print "Failed while trying to discover tests: {}".format(e) sys.exit(1) if args.collect_only: print "Collected %d tests:" % len(tests) for test in tests: print " " + str(test) sys.exit(0) # Initializing the cluster is slow, so do so only if # tests are sure to be run try: (cluster_mod_name, cluster_class_name) = args.cluster.rsplit('.', 1) cluster_mod = importlib.import_module(cluster_mod_name) cluster_class = getattr(cluster_mod, cluster_class_name) session_context.cluster = cluster_class() except: print "Failed to load cluster: ", str(sys.exc_info()[0]) print traceback.format_exc(limit=16) sys.exit(1) # Run the tests runner = SerialTestRunner(session_context, tests) test_results = runner.run_all_tests() # Report results # TODO command-line hook for type of reporter reporter = SimpleStdoutSummaryReporter(test_results) reporter.report() reporter = SimpleFileSummaryReporter(test_results) reporter.report() # Generate HTML reporter reporter = HTMLSummaryReporter(test_results) reporter.report() if not test_results.get_aggregate_success(): sys.exit(1)
def check_test_loader_with_directory(self): """Check discovery on a directory.""" loader = TestLoader(self.SESSION_CONTEXT) tests = loader.discover([discover_dir()]) assert len(tests) == 5
def check_test_loader_with_nonexistent_file(self): """Check discovery on a starting path that doesn't exist throws an""" with pytest.raises(LoaderException): loader = TestLoader(self.SESSION_CONTEXT) tests = loader.discover( [os.path.join(discover_dir(), "file_that_does_not_exist.py")])
def main(): """Ducktape entry point. This contains top level logic for ducktape command-line program which does the following: Discover tests Initialize cluster for distributed services Run tests Report a summary of all results """ args_dict = parse_args(sys.argv[1:]) parameters = None if args_dict["parameters"]: try: parameters = json.loads(args_dict["parameters"]) except ValueError as e: print "parameters are not valid json: " + str(e.message) sys.exit(1) args_dict["globals"] = get_user_defined_globals(args_dict.get("globals")) # Make .ducktape directory where metadata such as the last used session_id is stored if not os.path.isdir(ConsoleDefaults.METADATA_DIR): os.makedirs(ConsoleDefaults.METADATA_DIR) # Generate a shared 'global' identifier for this test run and create the directory # in which all test results will be stored session_id = generate_session_id(ConsoleDefaults.SESSION_ID_FILE) results_dir = generate_results_dir(args_dict["results_root"], session_id) setup_results_directory(results_dir) session_context = SessionContext(session_id=session_id, results_dir=results_dir, **args_dict) for k, v in args_dict.iteritems(): session_context.logger.debug("Configuration: %s=%s", k, v) # Discover and load tests to be run extend_import_paths(args_dict["test_path"]) loader = TestLoader(session_context, parameters) try: tests = loader.discover(args_dict["test_path"]) except LoaderException as e: print "Failed while trying to discover tests: {}".format(e) sys.exit(1) if args_dict["collect_only"]: print "Collected %d tests:" % len(tests) for test in tests: print " " + str(test) sys.exit(0) # Initializing the cluster is slow, so do so only if # tests are sure to be run try: (cluster_mod_name, cluster_class_name) = args_dict["cluster"].rsplit('.', 1) cluster_mod = importlib.import_module(cluster_mod_name) cluster_class = getattr(cluster_mod, cluster_class_name) session_context.cluster = cluster_class( cluster_file=args_dict["cluster_file"]) except: print "Failed to load cluster: ", str(sys.exc_info()[0]) print traceback.format_exc(limit=16) sys.exit(1) # Run the tests runner = SerialTestRunner(session_context, tests) test_results = runner.run_all_tests() # Report results reporter = SimpleStdoutSummaryReporter(test_results) reporter.report() reporter = SimpleFileSummaryReporter(test_results) reporter.report() # Generate HTML reporter reporter = HTMLSummaryReporter(test_results) reporter.report() update_latest_symlink(args_dict["results_root"], results_dir) if not test_results.get_aggregate_success(): sys.exit(1)
def main(): """Ducktape entry point. This contains top level logic for ducktape command-line program which does the following: Discover tests Initialize cluster for distributed services Run tests Report a summary of all results """ args_dict = parse_args(sys.argv[1:]) parameters = None if args_dict["parameters"]: try: parameters = json.loads(args_dict["parameters"]) except ValueError as e: print "parameters are not valid json: " + str(e.message) sys.exit(1) args_dict["globals"] = get_user_defined_globals(args_dict.get("globals")) # Make .ducktape directory where metadata such as the last used session_id is stored if not os.path.isdir(ConsoleDefaults.METADATA_DIR): os.makedirs(ConsoleDefaults.METADATA_DIR) # Generate a shared 'global' identifier for this test run and create the directory # in which all test results will be stored session_id = generate_session_id(ConsoleDefaults.SESSION_ID_FILE) results_dir = generate_results_dir(args_dict["results_root"], session_id) setup_results_directory(results_dir) session_context = SessionContext(session_id=session_id, results_dir=results_dir, **args_dict) for k, v in args_dict.iteritems(): session_context.logger.debug("Configuration: %s=%s", k, v) # Discover and load tests to be run extend_import_paths(args_dict["test_path"]) loader = TestLoader(session_context, parameters) try: tests = loader.discover(args_dict["test_path"]) except LoaderException as e: print "Failed while trying to discover tests: {}".format(e) sys.exit(1) if args_dict["collect_only"]: print "Collected %d tests:" % len(tests) for test in tests: print " " + str(test) sys.exit(0) # Initializing the cluster is slow, so do so only if # tests are sure to be run try: (cluster_mod_name, cluster_class_name) = args_dict["cluster"].rsplit('.', 1) cluster_mod = importlib.import_module(cluster_mod_name) cluster_class = getattr(cluster_mod, cluster_class_name) session_context.cluster = cluster_class(cluster_file=args_dict["cluster_file"]) except: print "Failed to load cluster: ", str(sys.exc_info()[0]) print traceback.format_exc(limit=16) sys.exit(1) # Run the tests runner = SerialTestRunner(session_context, tests) test_results = runner.run_all_tests() # Report results reporter = SimpleStdoutSummaryReporter(test_results) reporter.report() reporter = SimpleFileSummaryReporter(test_results) reporter.report() # Generate HTML reporter reporter = HTMLSummaryReporter(test_results) reporter.report() update_latest_symlink(args_dict["results_root"], results_dir) if not test_results.get_aggregate_success(): sys.exit(1)