使用 PostgreSQL 在 SQLAlchemy 测试中回滚数据库事务
Rolling back database transactions in SQLAlchemy tests with PostgreSQL
我正在构建一个基于 SQLAlchemy 的 Pyramid Web 应用程序,它完全依赖 PostgreSQL 作为其数据库后端。
有什么方法可以使单元测试结构
为了加快测试速度,数据库事务在 teardown()
或测试套件的其他清理挂钩处回滚
可以使用其他加速测试的技巧,例如如果 SQLAlchemy 和 PostgreSQL 有任何对应的 SQLite 的 :in:memory:
数据库
如果标准库 unittest 框架之外的特定功能使编写测试用例更容易,则可以选择自定义测试运行程序 py.test
。
对于测试,您可以在 RAMdisk 上初始化 PostgreSQL 数据目录(您可以在 /dev/shm/
下创建一个目录,在现代 Linux 发行版中挂载为 tmpfs
)。您可以 运行 非标准端口上的 Postgres。
PGTEMP=`mktemp -d /dev/shm/pgtemp.XXXXXX`
initdb -D "$PGTEMP"
postgres -D "$PGTEMP" -k "$PGTEMP" -p 54321
由于这个问题和你的有点相似,我把我的回答的相关部分复制在这里:
所有测试用例 class 都应该从基 class 中继承class,它定义了一个通用的 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()
我正在构建一个基于 SQLAlchemy 的 Pyramid Web 应用程序,它完全依赖 PostgreSQL 作为其数据库后端。
有什么方法可以使单元测试结构
为了加快测试速度,数据库事务在
teardown()
或测试套件的其他清理挂钩处回滚可以使用其他加速测试的技巧,例如如果 SQLAlchemy 和 PostgreSQL 有任何对应的 SQLite 的
:in:memory:
数据库如果标准库 unittest 框架之外的特定功能使编写测试用例更容易,则可以选择自定义测试运行程序
py.test
。
对于测试,您可以在 RAMdisk 上初始化 PostgreSQL 数据目录(您可以在 /dev/shm/
下创建一个目录,在现代 Linux 发行版中挂载为 tmpfs
)。您可以 运行 非标准端口上的 Postgres。
PGTEMP=`mktemp -d /dev/shm/pgtemp.XXXXXX`
initdb -D "$PGTEMP"
postgres -D "$PGTEMP" -k "$PGTEMP" -p 54321
由于这个问题和你的
所有测试用例 class 都应该从基 class 中继承class,它定义了一个通用的 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()