使用PostgreSQL在SQLAlchemy测试中回滚数据库事务

时间:2015-04-08 06:55:10

标签: python postgresql sqlalchemy pyramid

我正在构建一个构建在SQLAlchemy顶部的Pyramid Web应用程序,并且只依赖PostgreSQL作为其数据库后端。

有什么方法可以让单元测试结构

  • 为了加快测试速度,数据库事务将在teardown()或测试套件的其他清理钩子上回滚

  • 可以使用加速测试的其他技巧,例如:如果SQLAlchemy和PostgreSQL有任何对应的SQLite的:in:memory:数据库

  • 如果标准库unittest框架之外的特定功能可以更轻松地编写测试用例,则可以选择自定义测试运行程序la py.test

2 个答案:

答案 0 :(得分:1)

对于测试,您可以在RAMdisk上初始化PostgreSQL数据目录(您可以在/dev/shm/下创建一个目录,该目录在现代Linux发行版中以tmpfs挂载)。您可以在非标准端口上运行Postgres。

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

答案 1 :(得分:1)

由于此问题与您的other question有点类似,我将在此处复制相关部分:

所有测试用例类都应该从基类继承,该基类定义了一个常见的tearDown方法:

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