【发布时间】:2011-02-12 23:36:18
【问题描述】:
如何对使用 postgresql 的 python DAL 进行单元测试。
在 sqlite 中,您可以为每个测试创建内存数据库,但对于 postgresql 则无法做到这一点。
我想要一个可用于设置数据库并在测试完成后清理它的库。
我使用 Sqlalchemy 作为我的 ORM。
【问题讨论】:
标签: python unit-testing postgresql sqlalchemy data-access-layer
如何对使用 postgresql 的 python DAL 进行单元测试。
在 sqlite 中,您可以为每个测试创建内存数据库,但对于 postgresql 则无法做到这一点。
我想要一个可用于设置数据库并在测试完成后清理它的库。
我使用 Sqlalchemy 作为我的 ORM。
【问题讨论】:
标签: python unit-testing postgresql sqlalchemy data-access-layer
pg_tmp(1) 是一个旨在简化此任务的实用程序。以下是您可以使用 SQLAlchemy 启动新连接的方法:
from subprocess import check_output
from sqlalchemy import create_engine
url = check_output(['pg_tmp', '-t'])
engine = create_engine(url)
这将启动一个新数据库,该数据库会在 60 秒内自动销毁。如果连接打开,pg_tmp 将一直等待,直到所有活动连接都关闭。
【讨论】:
你试过testing.postgresql吗?
【讨论】:
您可以使用 nose 编写测试,然后只需使用 SQLAlchemy 在您的 setup/teardown 方法中创建和清理测试数据库。
【讨论】:
还有QuickPiggy,它能够自行清理。 来自文档:
一个临时的 PostgresSQL 实例很容易获得:
pig = quickpiggy.Piggy(volatile=True, create_db='somedb')
conn = psycopg2.connect(pig.dsnstring())
【讨论】: