2015-04-08 50 views
1

我構建了一個建立在SQLAlchemy之上的Pyramid Web應用程序,它完全依賴PostgreSQL作爲其數據庫後端。使用PostgreSQL在SQLAlchemy測試中回滾數據庫事務

會有什麼辦法有單元測試結構,使

  • 爲了加速測試,數據庫事務在teardown()回滾或其它清理測試套件的鉤

  • 可以使用其他技巧來加速測試,例如如果SQLAlchemy的和PostgreSQL有什麼相應的SQLite的:in:memory:數據庫

  • 它可以選擇自定義測試運行點菜py.test如果單元測試框架標準庫之外的特定功能,使得它更容易編寫測試用例。

+0

相關:http://stackoverflow.com/questions/29507792/creating-databases-in-sqlalchemy-tests-with-postgresql –

+0

相關:https://gist.github.com/inklesspen/4504383 –

+0

相關:http://stackoverflow.com/q/7872 693/398670 –

回答

1

因爲這個問題有點類似於您other question,我會複製我的答案在這裏的相關部分:

所有測試用例類應該從基類,它定義了一個共同的被繼承拆卸方法:

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

對於測試,你可以在一個ramdisk初始化PostgreSQL的數據目錄(您可以創建/dev/shm/下的一個目錄,安裝爲tmpfs在現代的Linux發行版)。你可以在非標準端口上運行Postgres。

PGTEMP=`mktemp -d /dev/shm/pgtemp.XXXXXX` 
initdb -D "$PGTEMP" 
postgres -D "$PGTEMP" -k "$PGTEMP" -p 54321