簡體   English   中英

純Python中的類似Django的單元測試數據庫

[英]Django-like unit testing database in plain python

我有一個使用Postgresql的python項目。 我想使用類似django的單元測試,在該單元測試中創建和銷毀數據庫。 但是,我不想使用sqlalchemy。 我嘗試了以下方法:

pg = psycopg2.connect(
"host={} dbname={} user={} password={}".format(
POSTGRES_HOST, 'postgres', POSTGRES_USER, POSTGRES_PASSWORD))

pg.set_isolation_level(ISOLATION_LEVEL_AUTOCOMMIT)
cur = pg.cursor()




def reset_db():
    cur.execute('DROP DATABASE IF EXISTS {} '.format(POSTGRES_DB))
    cur.execute('CREATE DATABASE {}'.format(POSTGRES_DB))

    newconn = psycopg2.connect(
    "host={} dbname={} user={} password={}".format(
    POSTGRES_HOST, POSTGRES_DB, POSTGRES_USER, POSTGRES_PASSWORD))

    newcur =  newconn.cursor()

    # SCHEMAS is an imported dict containing schema creation instructions
    for schema in SCHEMAS:
        newcur.execute(SCHEMAS[schema])

    return newcur

class Test(TestCase):
    def setUp(self):
        os.environ['testing'] = 'true'
        self.cur = reset_db()

然后,setUp方法設置一個環境變量,該變量通知我的數據庫層使用測試數據庫。

這似乎很好。 唯一的問題是reset_db()大約需要0.8秒,這太多了。

是否有更好的方法或方法來優化我的方法?

在每個測試用例之后重新創建數據庫是非常昂貴的操作。

也許,在開始時一次創建數據庫,然后在每個測試用例之后僅從所有表中刪除所有數據將是可能的解決方案之一嗎?

您可以嘗試Django所做的工作-在每次測試之前啟動事務,然后在測試之后回滾,撤消測試期間所做的任何數據庫更改。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM