Run unit tests in isolation w/ coverage support.
This commit is contained in:
parent
d0e1a1c6c3
commit
fcac261eef
5 changed files with 36 additions and 1 deletions
|
@ -9,6 +9,7 @@ branch = True
|
|||
# results from multiple tests simultaneously, as well as supporting multiple
|
||||
# test runs, such as from integration tests.
|
||||
concurrency = multiprocessing
|
||||
parallel = True
|
||||
|
||||
# When running tests through ansible-test, this option is overridden by
|
||||
# the COVERAGE_FILE environment variable. This option is present for
|
||||
|
|
|
@ -144,7 +144,6 @@ def coverage_command(self_dir, version):
|
|||
args = [
|
||||
find_executable(executable),
|
||||
'run',
|
||||
'--append',
|
||||
'--rcfile',
|
||||
os.path.join(self_dir, '.coveragerc'),
|
||||
]
|
||||
|
|
|
@ -624,6 +624,7 @@ def command_units(args):
|
|||
|
||||
cmd = [
|
||||
'pytest',
|
||||
'--boxed',
|
||||
'-r', 'a',
|
||||
'--color',
|
||||
'yes' if args.color else 'no',
|
||||
|
|
|
@ -6,6 +6,7 @@ passlib
|
|||
pycrypto
|
||||
pytest
|
||||
pytest-mock
|
||||
pytest-xdist
|
||||
python-memcached
|
||||
pyyaml
|
||||
redis
|
||||
|
|
33
test/units/conftest.py
Normal file
33
test/units/conftest.py
Normal file
|
@ -0,0 +1,33 @@
|
|||
"""Monkey patch os._exit when running under coverage so we don't lose coverage data in forks, such as with `pytest --boxed`."""
|
||||
import gc
|
||||
import os
|
||||
|
||||
try:
|
||||
import coverage
|
||||
except ImportError:
|
||||
coverage = None
|
||||
|
||||
|
||||
def pytest_configure():
|
||||
if not coverage:
|
||||
return
|
||||
|
||||
coverage_instances = []
|
||||
|
||||
for obj in gc.get_objects():
|
||||
if isinstance(obj, coverage.Coverage):
|
||||
coverage_instances.append(obj)
|
||||
|
||||
if not coverage_instances:
|
||||
return
|
||||
|
||||
os_exit = os._exit
|
||||
|
||||
def coverage_exit(*args, **kwargs):
|
||||
for instance in coverage_instances:
|
||||
instance.stop()
|
||||
instance.save()
|
||||
|
||||
os_exit(*args, **kwargs)
|
||||
|
||||
os._exit = coverage_exit
|
Loading…
Reference in a new issue