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.