2015-04-08 112 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