[TIP] Problem collecting coverage for D-Bus activated subprocesses
barry at python.org
Tue Aug 5 11:47:47 PDT 2014
I have a Python 3 project with an extensive test suite for which I want to
gather coverage data. I use nose2 as the test runner. While I get accurate
coverage for the parent process tests, covering subprocesses just isn't
I suspect the tricky part here is that the subprocesses are D-Bus services
which get activated via a custom system bus run with dbus-daemon. However,
I've verified that environment variables are being seen by these subprocs,
including COVERAGE_PROCESS_START which points to the correct coverage.ini
That .ini file contains roughly:
branch = true
parallel = true
but after the full test suite runs I see only one .coverage file such as:
meaning, that only the parent process is getting covered. I'd expect to see
about a dozen subproc .coverage files.
When I debug-print the D-Bus activated subprocs, I can see the environment
variable, and its pid, along with its cwd, which is /. Thinking that maybe
coverage is trying to write the default .coverage.* files in cwd, I've tried
both setting COVERAGE_FILE and chdir'ing to the proper directory. Neither has
My subprocs start coverage like so, early on in their main().
ini_file = os.environ.get('COVERAGE_PROCESS_START')
if ini_file is not None:
With some debug-printing in the else: clause, I can see that we get through
Still, I get no data from the subprocs. My tests that activate the service
all pass, so I know the subprocs are running.
My only guess at the moment is that setting [run]parallel=true in the .ini
file isn't enough to turn on parallel mode. I can't really pass
-p/--parallel-mode to the subprocesses so I'm relying on .process_startup() to
get coverage going.
I'm stuck at the moment, so would appreciate in advance any thoughts on what
to try next or what I might be doing wrong.
-------------- next part --------------
A non-text attachment was scrubbed...
Size: 819 bytes
Desc: not available
More information about the testing-in-python