[py-dev] unclean shutdown of py.test

Gordon Wrigley py-dev at tolomea.com
Fri Nov 6 07:11:40 CET 2009


Short form:
I have a test that in some circumstances can't raise an exception, all
it can do is call stuff.
Currently it calls sys.exit, which is less than optimal.
Is there a function or series of functions I can call to somewhat
cleanly shutdown py.test in this situation.

Longer form:
First It is worth noting that we always run py.test with -x, I suspect
that will have some bearing on what follows..
The application I'm testing calls a bunch of C code via ctypes. In the
event of certain pathological failures that C code does an internal
error operation equivalent to assert, i.e. print some stuff and then
call exit.
When this happens there is no way to unroll the C stack to get back to
the calling python context and notify py.test of the failure.
What I have managed to do is intercept the error, and from the
intercept use ctypes callback functionality to call into a python
handler.
It would be nice if I could raise an exception there and use that to
get back to the original python context, but ctypes doesn't support
that, instead it captures, prints and discards the exception before
returning to the C context.
I have sent them an idea I have for how the exception could instead
optionally be propagated past the C and back to python using setjmp /
longjmp, but I'm not really hopeful that that will be a viable
alternative.
So what I would like to do is clean up py.test in the callback. My
ideal outcome would be if I could do some small amount of stuff that
would make py.test act as if it were exiting due to a failed test
while running with -x.
Is this line of approach at all possible? or does it violate the
py.test structure too much to be workable?

Gordon



More information about the Pytest-dev mailing list