sql >> Databáze >  >> RDS >> PostgreSQL

Vytváření databází v testech SQLAlchemy s PostgreSQL

Nos testovací běžec podporuje setup_package() a teardown_package() metody. Zde je výňatek z dokumentů:

Ve své aplikaci mám setup_package() který vypadá zhruba takto:

def _create_database():

    template_engine = sa.create_engine("postgres://[email protected]/postgres", echo=False)

    conn = template_engine.connect()
    conn = conn.execution_options(autocommit=False)
    conn.execute("ROLLBACK")
    try:
        conn.execute("DROP DATABASE %s" % DB_NAME)
    except sa.exc.ProgrammingError as e:
        # Could not drop the database, probably does not exist
        conn.execute("ROLLBACK")
    except sa.exc.OperationalError as e:
        # Could not drop database because it's being accessed by other users (psql prompt open?)
        conn.execute("ROLLBACK")

    conn.execute("CREATE DATABASE %s" % DB_NAME)
    conn.close()

    template_engine.dispose()


def setup_package():
    _create_database()

    engine = sa.create_engine("postgres://[email protected]/%s" % DB_NAME, echo=False)

    session = sa.orm.scoped_session(sa.orm.sessionmaker())
    session.configure(bind=engine)
    Base.metadata.bind = engine
    Base.metadata.create_all()


def teardown_package():
    # no need to do anything as the old database is dropped at the start of every run

Kromě toho jsou všechny třídy testovacích případů podtřídy ze základní třídy, která, což je důležité, definuje společný tearDown metoda:

class BaseTest(unittest.TestCase):

    def setUp(self):
        # This makes things nicer if the previous test fails
        # - without this all subsequent tests fail
        self.tearDown()

        self.config = testing.setUp()

    def tearDown(self):
        testing.tearDown()
        session.expunge_all()
        session.rollback()

Podtřídy často přepisují základní setUp , ale obvykle není potřeba přepisovat tearDown - vrácením transakce zpět zajistí, že další test začne na zcela čisté databázi.




  1. OC4J 10.1.3.3 nemůže najít ojms.rar nastavení perzistencí databáze

  2. Vložit výsledky uložené procedury do dočasné tabulky

  3. nejúčinnější způsob, jak přidat index do velké tabulky mysql

  4. Výhody vs. nevýhody implementace prostředí hybridního cloudu