Hi, It's easy to receive test coverage information from Django tests. (See below if you search for a solution...)
But is it possible to receive the same kind of coverage information from test tools like Windmill (or Selenium)? I believe, it's probably difficult because these tools execute against a server which is not in the thread covered by the testing process... Could someone give me light? Thanks in advance, Michel ______________________ Below, you have my solution for normal test coverage: 1) You should install the very last version of coverage.py (see the reference in the previous mails-It includes colouring feature now...) 2) You should change your test runner in your setting.py: TEST_RUNNER = 'cov_runner.run_tests' COVERAGE_MODULES = ('general.views','general.utilities','goals.views','goals.models') # adapt to your stuff here... 3) Here is the content of my test runner (you can adapt to your configuration) # -*- coding: utf-8 -*- import os from django.db.models import get_app from django.conf import settings import coverage def run_tests(test_labels, verbosity=1, interactive=True, extra_tests= []): """ Run the unit tests for all the test labels in the provided list. Labels must be of the form: - app.TestClass.test_method Run a single specific test method - app.TestClass Run all the test methods in a given class - app Search for doctests and unittests in the named application. When looking for tests, the test runner will look in the models and tests modules for the application. A list of 'extra' tests may also be provided; these tests will be added to the test suite. If the settings file has an entry for COVERAGE_MODULES or test_labels is true it will prints the coverage report for modules/apps Returns number of tests that failed. """ do_coverage = hasattr(settings, 'COVERAGE_MODULES') or bool (test_labels) if do_coverage: # coverage.erase() # remove from old version cov = coverage.coverage() cov.start() from django.test import simple #------------------------------------ os.environ['SERVER_NAME'] = 'localhost' #------------------------------------ retval = simple.run_tests(test_labels, verbosity, interactive, extra_tests) if do_coverage: cov.stop() print '----------------------------------------------------------------------' # try to import all modules for the coverage report. modules = [] if getattr(settings, 'COVERAGE_MODULES', None): modules = [__import__(module, {}, {}, ['']) for module in settings.COVERAGE_MODULES] elif test_labels: modules = [] for label in test_labels: pkg = _get_app_package(label) modules.extend(_package_modules(*pkg)) cov.html_report(modules, directory='../logs/covhtml') cov.report(modules) # , show_missing=1 return retval def _get_app_package(label): """Get the package of an imported module""" imp, app = [], get_app(label) path = os.path.dirname(app.__file__) path_list = path.split(os.sep) path_list.reverse() for p in path_list: imp.insert(0, p) try: pkg = __import__('.'.join(imp), {}, {}, ['']) return pkg, '.'.join(imp) except ImportError: continue def _package_modules(pkg, impstr): """Get all python modules in pkg including subpackages impstr represents the string to import pkg """ modules = [] path = pkg.__path__[0] for f in os.listdir(path): if f.startswith('.'): continue if os.path.isfile(path + os.sep + f): name, ext = os.path.splitext(f) if ext != '.py': continue #python module modules.append(__import__(impstr + '.' + name, {}, {}, [''])) elif os.path.isdir(path + os.sep + f): #subpackage imp = impstr+ '.' + f try: spkg = __import__(imp, {}, {}, ['']) modules.extend(_package_modules(spkg, imp)) except ImportError: pass return modules --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Django users" group. To post to this group, send email to django-users@googlegroups.com To unsubscribe from this group, send email to django-users+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/django-users?hl=en -~----------~----~----~----~------~----~------~--~---