[py-dev] KeyboardInterrupt during setup() and teardown()
Ronny Pfannschmidt
Ronny.Pfannschmidt at gmx.de
Thu Jul 12 15:26:45 CEST 2012
Hi Pärham,
as i already explained in irc before,
a cached setup only calls tear-down if it was successful,
and if you want it to work property, you should split it up
an example of doing that would be something like
def pytest_funcarg__app(request):
def setup()
return create_app() # FAST
def teardown(app):
app.stop()
app = request.cached_setup(setup, teardown, scope='session')
app.start() #can wait
return app
-- Ronny
On 07/12/2012 02:12 PM, Pärham Fazelzadeh H wrote:
> Hi Holger,
>
>
> Here below is an example:
>
> def pytest_funcarg__app(request):
>
> def setup():
> # Blocking call to start(), returns when application has
> finished booting up
>
> app.start()
>
> return app
>
>
> def teardown(val):
>
> app.stop()
>
> return request.cached_setup(
>
> setup=setup,
>
> teardown=teardown,
>
> scope='session',
>
> extrakey='app'
> )
>
>
> Now, during setup(), when the process is waiting for the app to boot, if
> a keyboardinterrupt is raised (say by the user during from the test
> execution summary screen) then it will not call the teardown() of this
> funcarg 'app'. I assume this is because py.test assumes that the setup()
> of 'app' has not been finished and therefor it is not in a proper state
> for teardown() of 'app'.
>
> Regards,
> Parham
>
> On 12 July 2012 12:05, holger krekel <holger at merlinux.eu
> <mailto:holger at merlinux.eu>> wrote:
> >
> > Hi Pärham,
> >
> > On Thu, Jul 12, 2012 at 11:46 +0200, Pärham Fazelzadeh H wrote:
> > > Hi all,
> > >
> > > I am using py.test to perform integration and functional testing of an
> > > application and had some issues with interrupts and was advised to
> submit
> > > my use case.
> > >
> > > Basically the problem is related to funcargs and how setup() and
> teardown()
> > > are affected by interrupts. The issue we are having is that some of our
> > > funcargs take longer to setup than what is maybe recommended. One
> of the
> > > funcargs instantiate and start the application that is to be tested and
> > > this can take some time; in the setup() you basically wait for the
> > > application to boot up to verify that it has started. If a
> > > KeyboardInterrupt is raised during setup() it will leave the
> application in
> > > a dirty state since no teardown will be run, i.e the application
> will be
> > > left running. Similarly this can happen during configuration stages in
> > > funcargs.
> > >
> > > I learned that this is default behaviour (and also reasonable),
> seeing as
> > > the idea is that funcargs should be small and be fast.
> >
> > funcargs with a longer setup are fine. I am not sure i understand
> > how you are missing teardowns. How do you perform teardown, with
> > request.addfinalizer()? Can you provide a little examples that reproduces
> > the problem?
> >
> > best,
> >
> > holger
> >
> > > Still, this is our use case so here you go! :)
> > >
> > > Regards,
> > > Parham
> >
> > > _______________________________________________
> > > py-dev mailing list
> > > py-dev at codespeak.net <mailto:py-dev at codespeak.net>
> > > http://codespeak.net/mailman/listinfo/py-dev
> >
>
>
> _______________________________________________
> py-dev mailing list
> py-dev at codespeak.net
> http://codespeak.net/mailman/listinfo/py-dev
More information about the Pytest-dev
mailing list