Hi Andreas, thanks for your mail - i am currently still on travel so haven't digested all details yet. However, I'd like to let you know already that we have a plan to unify (function) Item and FuncargRequest interfaces. This should make it easy to access funcargs from pytest_runtest_setup because 'item' would carry the neccessary API. Maybe there is an intermediate solution for your use case, not sure.
If also Ronny or others don't have another idea it would be great if you opened an issue on making funcargs available in pytest_runtest_setup. best & thanks, holger On Wed, May 02, 2012 at 11:46 +0200, Andreas Pelme wrote: > Hi, > > I am trying to implement a live_server funcarg, which will manage a Django > LiveServerThread, passing in the live server URL to the test function. > > pytest_runtest_setup is used to start a database transaction, and then > pytest_runtest_teardown will rollback the transaction after the test run - > this is the standard way Django's TestCase works. > > I also have a pytest mark: transaction_test_case, when used, instead of > running the test in a transaction and rolling back at the end, the database > is flushed (this is equivalent to Django's TransactionTestCase). > > When running tests with the live_server funcarg, the live server is running > in another thread, and the data needs to be committed to the database, in > order for the live server to see the data. So, transaction_test_case behavior > should always be used when the live_server funcarg is used. > > The relevant code is available here: > https://gist.github.com/9a090afd645026b34bfb > > I would like to change behavior in my pytest_runtest_setup hook, when a > certain funcarg is used. The problem is that funcargs are not available in > item.keywords in pytest_runtest_setup (since the pytest_funcarg__*() > functions have not yet been called). When pytest_runtest_teardown is called > however, item.keywords are available, and the database can be teared down in > the right way. > > I am using request.applymarker(transaction_test_case) in > pytest_funcarg__live_server(), but as stated above, it won't be visible in > pytest_runtest_setup. It would be nice to know *which* funcargs are present > in pytest_runtest_setup, even though they are not yet initialized and have > gotten their values. > > One solution would be to manually mark all live_server test-cases with > transaction_test_case, but that is a bit too much typing for my taste: :) > > @pytest.mark.transaction_test_case > def test_foo(live_server): > pass > > Is there any way to see what funcargs are specified from within > pytest_runtest_setup? If not, is there another way I should approach this > problem? Or should I just give up and decorate all live server tests with > @pytest.mark.transaction_test_case ? > > Best regards/Andreas > > (I am trying to make a complete pytest-django package, I have forked an old > package, put it on PyPI and added some > docs:https://github.com/pelme/pytest_django , I will post an announcement > here later when it has seen some more progress!) > _______________________________________________ > py-dev mailing list > py-dev@codespeak.net > http://codespeak.net/mailman/listinfo/py-dev > _______________________________________________ py-dev mailing list py-dev@codespeak.net http://codespeak.net/mailman/listinfo/py-dev