Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
try:
test_method_prefix = project.get_property("%s_test_method_prefix" % execution_prefix)
runner_generator = project.get_property("%s_runner" % execution_prefix)
result, console_out = execute_tests_matching(runner_generator, logger, test_dir, module_glob,
test_method_prefix)
if result.testsRun == 0:
logger.warn("No %s executed.", execution_name)
else:
logger.info("Executed %d %s", result.testsRun, execution_name)
write_report(execution_prefix, project, logger, result, console_out)
if not result.wasSuccessful():
raise BuildFailedException("There were %d error(s) and %d failure(s) in %s"
% (len(result.errors), len(result.failures), execution_name))
logger.info("All %s passed.", execution_name)
except ImportError as e:
import traceback
_, _, import_error_traceback = sys.exc_info()
file_with_error, error_line, _, statement_causing_error = traceback.extract_tb(import_error_traceback)[-1]
logger.error("Import error in test file {0}, due to statement '{1}' on line {2}".format(
file_with_error, statement_causing_error, error_line))
logger.error("Error importing %s: %s", execution_prefix, e)
raise BuildFailedException("Unable to execute %s." % execution_name)
logger.info("Executing unittest Python modules in %s", test_dir)
logger.debug("Including files matching '%s'", module_glob)
try:
test_method_prefix = project.get_property("unittest_test_method_prefix")
result, console_out = execute_tests_matching(test_dir, module_glob, test_method_prefix)
if result.testsRun == 0:
logger.warn("No unittests executed.")
else:
logger.info("Executed %d unittests", result.testsRun)
write_report("unittest", project, logger, result, console_out)
if not result.wasSuccessful():
raise BuildFailedException("There were %d test error(s) and %d failure(s)"
% (len(result.errors), len(result.failures)))
logger.info("All unittests passed.")
except ImportError as e:
import traceback
_, _, import_error_traceback = sys.exc_info()
file_with_error, error_line, _, statement_causing_error = traceback.extract_tb(import_error_traceback)[-1]
logger.error("Import error in unittest file {0}, due to statement '{1}' on line {2}".format(
file_with_error, statement_causing_error, error_line))
logger.error("Error importing unittests: %s", e)
raise BuildFailedException("Unable to execute unit tests.")
def write_report_and_ensure_all_tests_passed(self):
self.project.write_report("integrationtest.json", render_report(self.test_report))
self.logger.info("Executed %d integration tests.", self.tests_executed)
if self.tests_failed:
raise BuildFailedException("%d of %d integration tests failed." % (self.tests_failed, self.tests_executed))
def bootstrap():
import sys
import inspect
try:
current_frame = inspect.currentframe()
previous_frame = current_frame.f_back
name_of_previous_frame = previous_frame.f_globals['__name__']
if name_of_previous_frame == '__main__':
import pybuilder.cli
sys.exit(pybuilder.cli.main(*sys.argv[1:]))
except BuildFailedException:
sys.exit(1)
force_reinstall=force_reinstall,
target_dir=target_dir,
verbose=project.get_property("verbose"),
trusted_host=project.get_property("install_dependencies_trusted_host"),
constraint_file=constraint_file,
eager_upgrade=eager_upgrade,
logger=logger,
outfile_name=log_file)
if exit_code != 0:
if batch:
dependency_name = " batch dependencies."
else:
dependency_name = " dependency '%s'." % dependency.name
raise BuildFailedException("Unable to install%s See %s for full details:\n%s",
dependency_name,
log_file,
tail_log(log_file))
result = command.run_on_production_source_files(logger,
include_test_sources=include_test_sources,
include_scripts=include_scripts,
include_dirs_only=True)
count_of_warnings = len(result.report_lines)
count_of_errors = len(result.error_report_lines)
if count_of_errors > 0:
logger.error('Errors while running flake8, see {0}'.format(result.error_report_file))
if count_of_warnings > 0:
if project.get_property("flake8_break_build"):
error_message = "flake8 found {0} warning(s)".format(count_of_warnings)
raise BuildFailedException(error_message)
else:
logger.warn("flake8 found %d warning(s).", count_of_warnings)
if overall_branch_partial_coverage < branch_partial_threshold:
logger.warn("Overall %s partial branch coverage is below %2d%%: %2d%%", execution_name,
branch_partial_threshold, overall_branch_partial_coverage)
branch_partial_coverage_too_low = True
else:
logger.info("Overall %s partial branch coverage is %2d%%", execution_name, overall_branch_partial_coverage)
project.write_report("%s.json" % execution_prefix, render_report(report))
_write_summary_report(coverage, project, modules, execution_prefix, execution_name)
if coverage_too_low and project.get_property("%s_break_build" % execution_prefix):
return BuildFailedException("Test coverage for at least one module is below %d%%", threshold)
if branch_coverage_too_low and project.get_property("%s_break_build" % execution_prefix):
return BuildFailedException("Test branch coverage for at least one module is below %d%%", branch_threshold)
if branch_partial_coverage_too_low and project.get_property("%s_break_build" % execution_prefix):
return BuildFailedException("Test partial branch coverage for at least one module is below %d%%",
branch_partial_threshold)
def run_sphinx_build(build_command, task_name, logger, project, builder=None):
logger.info("Running %s" % task_name)
log_file = project.expand_path("$dir_target", "reports", task_name)
build_command = [sys.executable, "-m"] + build_command
if project.get_property("verbose"):
logger.debug(build_command)
exit_code = execute_command(build_command, log_file, shell=False)
if exit_code != 0:
raise BuildFailedException("Sphinx build command failed. See %s for details.", log_file)
else:
logger.info("Overall %s branch coverage is %2d%%", execution_name, overall_branch_coverage)
if overall_branch_partial_coverage < branch_partial_threshold:
logger.warn("Overall %s partial branch coverage is below %2d%%: %2d%%", execution_name,
branch_partial_threshold, overall_branch_partial_coverage)
branch_partial_coverage_too_low = True
else:
logger.info("Overall %s partial branch coverage is %2d%%", execution_name, overall_branch_partial_coverage)
project.write_report("%s.json" % execution_prefix, render_report(report))
_write_summary_report(coverage, project, modules, execution_prefix, execution_name)
if coverage_too_low and project.get_property("%s_break_build" % execution_prefix):
return BuildFailedException("Test coverage for at least one module is below %d%%", threshold)
if branch_coverage_too_low and project.get_property("%s_break_build" % execution_prefix):
return BuildFailedException("Test branch coverage for at least one module is below %d%%", branch_threshold)
if branch_partial_coverage_too_low and project.get_property("%s_break_build" % execution_prefix):
return BuildFailedException("Test partial branch coverage for at least one module is below %d%%",
branch_partial_threshold)
def run_cram_tests(project, logger):
logger.info("Running Cram command line tests")
cram_tests = list(_find_files(project))
if not cram_tests or len(cram_tests) == 0:
if project.get_property("cram_fail_if_no_tests"):
raise BuildFailedException("No Cram tests found!")
else:
return
command_and_arguments = _cram_command_for(project)
command_and_arguments.extend(cram_tests)
report_file = _report_file(project)
env = os.environ.copy()
if project.get_property('cram_run_test_from_target'):
dist_dir = project.expand_path("$dir_dist")
_prepend_path(env, "PYTHONPATH", dist_dir)
script_dir_dist = project.get_property('dir_dist_scripts')
_prepend_path(env, "PATH", os.path.join(dist_dir, script_dir_dist))
else:
source_dir = project.expand_path("$dir_source_main_python")
_prepend_path(env, "PYTHONPATH", source_dir)