I've discovered too that the issue only happens when all my test suites get
called from one call to discovery. I've I run then in 8 calls (one to each
package, with each holding 1 to 5 test suites of about 1 to 10 tests each),
there's no issue. :-/

iain

On Thu, Sep 8, 2016 at 10:36 AM, Iain Duncan <iainduncanli...@gmail.com>
wrote:

> Thanks Mike, no we aren't. I think we are just making a new engine per
> suite, not per test though, we have the engine init code in the class level
> setup function, and per test setUp is making new sessions. We do drop the
> tables per test, which I expect we are not doing correctly as I'm a
> postgres newb.
>
> Should I be adding dispose in class level teardown?
>
> thanks!
> Iain
>
>
>
>
> On Thu, Sep 8, 2016 at 10:26 AM, Mike Bayer <mike...@zzzcomputing.com>
> wrote:
>
>> Engine per test is v inefficient, are you at least calling dispose() on
>> each one in teardown?
>>
>>
>> On Thursday, September 8, 2016, Iain Duncan <iainduncanli...@gmail.com>
>> wrote:
>>
>>> Hi Jonathan, sure can, here it is below. I think maybe this has
>>> something to do with the fact that we are creating a new engine and
>>> dropping the schema on each pass maybe? Because it seems to *only* happen
>>> when we run about 75 tests in a row.
>>>
>>> Thanks for looking!
>>>
>>> class FunctionalTestSuite(unittest.TestCase):
>>>     """
>>>     base class for functional test suite with db seeding"
>>>     """
>>>
>>>     # derived class needs to set this to the package of the app under test
>>>     # IE app_module = examp.app
>>>     app_package = None
>>>
>>>     # derived class needs to put settings in here
>>>     settings = {
>>>         'sqlalchemy.url': None
>>>     }
>>>
>>>     def __init__(self, *args, **kwargs):
>>>         super(FunctionalTestSuite, self).__init__(*args, **kwargs)
>>>
>>>     @classmethod
>>>     def setUpClass(cls):
>>>         "class level setUp creates tables"
>>>         configure_mappers()
>>>         # separate session factory for our test runner
>>>         cls.engine = engine_from_config(cls.settings, prefix='sqlalchemy.')
>>>         cls.session_factory = sessionmaker(bind=cls.engine)
>>>
>>>     @classmethod
>>>     def init_db(cls):
>>>         "initialize the database and create sessions, normally called from 
>>> setUp"
>>>         # drop and recreate tables once per test
>>>         # NB: this has to be done differently for postgres because it's a 
>>> constraint nazi
>>>         if 'postgres' in cls.settings['sqlalchemy.url']:
>>>             cls.engine.execute("drop owned by semaphore")
>>>             cls.engine.execute("create schema if not exists public")
>>>         else:
>>>             Base.metadata.drop_all(bind=cls.engine)
>>>         Base.metadata.create_all(bind=cls.engine)
>>>
>>>     def init_sessions(self):
>>>         "init seed and confirm sessions, normally called from setUp"
>>>         # create sessions for seeding and separate for confirming
>>>         self.seed_dbs = self.session_factory()
>>>         self.confirm_dbs = self.session_factory()
>>>
>>>     def init_app(self):
>>>         "init test wsgi app, normally called from setUp"
>>>         self.app = self.app_package.main({}, **self.settings)
>>>         self.testapp = webtest.TestApp(self.app)
>>>
>>>     def setUp(self):
>>>         # for tests where we want fresh db on *every* test, we use this
>>>         self.init_db()
>>>         self.init_sessions()
>>>         self.init_app()
>>>
>>>     def tearDown(self):
>>>         self.seed_dbs.close()
>>>         self.confirm_dbs.close()
>>>
>>>
>>> On Wed, Sep 7, 2016 at 8:37 PM, Jonathan Vanasco <jvana...@gmail.com>
>>> wrote:
>>>
>>>> can you share the test harness?
>>>>
>>>> --
>>>> You received this message because you are subscribed to the Google
>>>> Groups "sqlalchemy" group.
>>>> To unsubscribe from this group and stop receiving emails from it, send
>>>> an email to sqlalchemy+unsubscr...@googlegroups.com.
>>>> To post to this group, send email to sqlalchemy@googlegroups.com.
>>>> Visit this group at https://groups.google.com/group/sqlalchemy.
>>>> For more options, visit https://groups.google.com/d/optout.
>>>>
>>>
>>> --
>>> You received this message because you are subscribed to the Google
>>> Groups "sqlalchemy" group.
>>> To unsubscribe from this group and stop receiving emails from it, send
>>> an email to sqlalchemy+unsubscr...@googlegroups.com.
>>> To post to this group, send email to sqlalchemy@googlegroups.com.
>>> Visit this group at https://groups.google.com/group/sqlalchemy.
>>> For more options, visit https://groups.google.com/d/optout.
>>>
>> --
>> You received this message because you are subscribed to the Google Groups
>> "sqlalchemy" group.
>> To unsubscribe from this group and stop receiving emails from it, send an
>> email to sqlalchemy+unsubscr...@googlegroups.com.
>> To post to this group, send email to sqlalchemy@googlegroups.com.
>> Visit this group at https://groups.google.com/group/sqlalchemy.
>> For more options, visit https://groups.google.com/d/optout.
>>
>
>

-- 
You received this message because you are subscribed to the Google Groups 
"sqlalchemy" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to sqlalchemy+unsubscr...@googlegroups.com.
To post to this group, send email to sqlalchemy@googlegroups.com.
Visit this group at https://groups.google.com/group/sqlalchemy.
For more options, visit https://groups.google.com/d/optout.

Reply via email to