Profiling ========= The testrunner includes the ability to profile the test execution with cProfile via the `--profile=cProfile` option:: >>> import os, sys, tempfile >>> directory_with_tests = os.path.join(this_directory, 'testrunner-ex') >>> sys.path.append(directory_with_tests) >>> tempdir = tempfile.mkdtemp(prefix='zope.testrunner-') >>> defaults = [ ... '--path', directory_with_tests, ... '--tests-pattern', '^sampletestsf?$', ... '--profile-directory', tempdir, ... ] >>> sys.argv = [testrunner_script, '--profile=cProfile'] When the tests are run, we get profiling output:: >>> from zope import testrunner >>> testrunner.run_internal(defaults) Running... ... ncalls tottime percall cumtime percall filename:lineno(function)... ... Profiling also works across layers:: >>> sys.argv = [testrunner_script, '-ssample2', '--profile=cProfile', ... '--tests-pattern', 'sampletests_ntd'] >>> testrunner.run_internal(defaults) Running... Tear down ... not supported... ncalls tottime percall cumtime percall filename:lineno(function)... The testrunner creates temnporary files containing cProfiler profiler data:: >>> os.listdir(tempdir) ['tests_profile.cZj2jt.prof', 'tests_profile.yHD-so.prof'] It deletes these when rerun. We'll delete these ourselves:: >>> import shutil >>> shutil.rmtree(tempdir)