sql >> Databasteknik >  >> RDS >> PostgreSQL

Skapa databaser i SQLAlchemy-tester med PostgreSQL

Nose testlöpare stöder setup_package() och teardown_package() metoder. Här är ett utdrag ur dokumenten:

I min applikation har jag setup_package() som ser ungefär ut som följande:

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

Dessutom är alla testfallsklasser underklassade från en basklass, vilket, viktigare, definierar en gemensam tearDown metod:

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()

Underklasser åsidosätter ofta bas setUp , men det finns vanligtvis inget behov av att åsidosätta tearDown - genom att återställa transaktionen säkerställer den att nästa test startar på en helt ren databas.




  1. Sqlite3 - Hur man importerar NULL-värden från csv

  2. MySQL GROUP &COUNT Flera tabeller

  3. Hur man extraherar eller konverterar tidsdata från en sträng i SQL Server

  4. Så jag installerade postgresql och localhost-porten i konflikt med ruby-appen?