[TIP] Problem collecting coverage for D-Bus activated subprocesses
Barry Warsaw
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
working afaict.
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
file.
That .ini file contains roughly:
-----snip snip-----
[run]
branch = true
parallel = true
omit =
setup*
...
-----snip snip-----
but after the full test suite runs I see only one .coverage file such as:
.coverage.<hostname>.<parent-pid>.<random>
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
worked.
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:
try:
import coverage
except ImportError:
pass
else:
coverage.process_startup()
With some debug-printing in the else: clause, I can see that we get through
coverage.process_startup().
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.
Cheers,
-Barry
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 819 bytes
Desc: not available
URL: <http://lists.idyll.org/pipermail/testing-in-python/attachments/20140805/94f4ecc7/attachment.pgp>
More information about the testing-in-python
mailing list