def handle(self, *test_labels, **options): from django.conf import settings from django.test.utils import get_runner from djhudson.runners import HudsonTestSuiteRunner from djhudson.plugins import trigger_plugin_signal verbosity = int(options.get("verbosity", 1)) interactive = options.get("interactive", False) failfast = options.get("failfast", False) trigger_plugin_signal("configure", settings, options) # Lookup can import modules, so give coverage-like plugins a chance, # to do something before it. TestRunner = get_runner(settings) if not issubclass(TestRunner, HudsonTestSuiteRunner): TestRunner = type("DynamicHudsonRunner", (HudsonTestSuiteRunner, TestRunner), {}) test_runner = TestRunner( verbosity=verbosity, interactive=interactive, failfast=failfast, excludes=getattr(settings, "TEST_EXCLUDES", []), ) # filter test labels result = test_runner.run_tests(test_labels) result._doc.write(options["xml_report_file"], encoding="utf-8") trigger_plugin_signal("report", result, test_labels) if len(result.failures) + len(result.errors): sys.exit(1)
def build_suite(self, test_labels, extra_tests=None, **kwargs): trigger_plugin_signal("before_suite_build", test_labels) suite = super(HudsonTestSuiteRunner, self).build_suite(test_labels, extra_tests, **kwargs) filtered_suite = unittest.TestSuite() for case in flattened_suite(suite): exclude = False for expr in self._excludes: if re.match(expr, case.id()): exclude = True break if not exclude: filtered_suite.addTest(case) return filtered_suite
def run_suite(self, suite, **kwargs): test_runner = unittest.TextTestRunner( verbosity=self.verbosity, failfast=self.failfast, buffer=kwargs.pop('buffer', False), resultclass=XMLTestResult) # make sure global URLs are loaded here from django.conf import settings importlib.import_module(settings.ROOT_URLCONF) trigger_plugin_signal("before_suite_run", suite) result = test_runner.run(suite) trigger_plugin_signal("after_suite_run", suite, result) return result
def setup_databases(self): trigger_plugin_signal("before_database_setup") return super(HudsonTestSuiteRunner, self).setup_databases()