-
Notifications
You must be signed in to change notification settings - Fork 28
/
Copy pathcoverage_test_runner.py
45 lines (37 loc) · 1.72 KB
/
coverage_test_runner.py
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
34
35
36
37
38
39
40
41
42
43
44
45
from time import time
import os
import shutil
from django.test.simple import DjangoTestSuiteRunner
from django.conf import settings
import coverage
def test_runner_with_coverage(test_labels, verbosity=1, interactive=True,
failfast=None, extra_tests=[]):
"""
Custom test runner. Follows the django.test.simple.run_tests() interface.
"""
# Start code coverage before anything else if necessary
if hasattr(settings, 'COVERAGE_MODULES'):
cov = coverage.coverage()
#coverage.use_cache(0) # Do not cache any of the coverage.py stuff
cov.use_cache(0) # Do not cache any of the coverage.py stuff
cov.start()
test_runner = DjangoTestSuiteRunner(verbosity=verbosity, interactive=interactive, failfast=failfast)
test_results = test_runner.run_tests(test_labels, extra_tests=extra_tests)
# Stop code coverage after tests have completed
if hasattr(settings, 'COVERAGE_MODULES'):
cov.stop()
# Print code metrics header
print ''
print '----------------------------------------------------------------------'
print ' Unit Test Code Coverage Results'
print '----------------------------------------------------------------------'
# Report code coverage metrics
if hasattr(settings, 'COVERAGE_MODULES'):
coverage_modules = []
for module in settings.COVERAGE_MODULES:
coverage_modules.append(__import__(module, globals(), locals(), ['']))
cov.report(coverage_modules, show_missing=1)
cov.html_report(coverage_modules, directory='coverage_report')
# Print code metrics footer
print '----------------------------------------------------------------------'
return test_results