Login

Dynamic Test Loading

Author:
cronosa
Posted:
January 7, 2010
Language:
Python
Version:
1.1
Tags:
dynamic unittest load test loader loading unit
Score:
1 (after 1 ratings)

Ok... this is really a hack. But I love it. I hate setting up all of my test cases into suites, and making sure that I remember to add them each time I add a new python file... annoying! This allows me to have a tests package and then just add python files and packages to that test package (mirroring my app setup). Each of the files are then dynamically imported and every test case is automatically executed. If you don't want one to execute, add it to the ignore list. If you add 'views' to the ignore list, it will ignore all views, otherwise you would have to specify 'package.views' if it is in a package.

So... in short this is a bit ghetto, but it saves me a lot of time just setting up all my tests... now I can just write them! Hope it's useful to someone.

Greg

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# testhelper.py
def get_sub_modules(f, ignore = [], base = None):
    import os
    modules = []
    top = os.path.split(f)[0]
    for root, dirs, files in os.walk(top, topdown=False):
        for name in files:
            if '.svn' in root:
                continue
            if not name.endswith('.py'):
                continue
            
            pkg = root.replace(top, '')
            if pkg.startswith(os.sep):
                pkg = pkg[1:]
            pkg = pkg.replace('/', '.').replace('\\', '.')
            module = os.path.splitext(name)[0]
            if name.startswith('__') or name in ignore or module in ignore:
                continue
            path = '.'.join([pkg, module])
            if len(pkg.strip()) == 0:
                path = module
            if base is not None:
                path = '.'.join([base, path])
            modules.append(path)
    return modules

# app.tests.__init__.py
import testhelper

modules = testhelper.get_sub_modules(__file__, base='time_punch.tests')
for m in modules:
    exec('from %s import *' %(m))

More like this

  1. Effective content caching for mass-load site using redirect feature by nnseva 3 years, 12 months ago
  2. Dynamic Models Revisited by Ben 7 years, 8 months ago
  3. db_dump.py - for dumpping and loading data from database by limodou 8 years, 4 months ago
  4. Getting dynamic model choices in newforms by ubernostrum 8 years, 4 months ago
  5. Deep package test runner by eternicode 4 years, 3 months ago

Comments

Please login first before commenting.