测试postgres db python
我不知道如何测试我的存储库 我希望确保我确实将对象及其所有参数保存到了数据库中,并且当我执行SQL语句时,我确实收到了我应该收到的内容 但是,我不能将测试postgres db python,python,postgresql,python-unittest,Python,Postgresql,Python Unittest,我不知道如何测试我的存储库 我希望确保我确实将对象及其所有参数保存到了数据库中,并且当我执行SQL语句时,我确实收到了我应该收到的内容 但是,我不能将“CREATE TABLE test\u TABLE”放在unittest case的设置方法中,因为它将被创建多次(相同测试用例的测试是并行运行的)。因此,只要我在同一个类中创建了两个需要在同一个表上工作的方法,它就不会工作(表的名称冲突) 同样,我不能将“CREATE TABLE test\u TABLE”setUpModule,因为现在该表只
“CREATE TABLE test\u TABLE
”放在unittest case的设置
方法中,因为它将被创建多次(相同测试用例的测试是并行运行的)。因此,只要我在同一个类中创建了两个需要在同一个表上工作的方法,它就不会工作(表的名称冲突)
同样,我不能将“CREATE TABLE test\u TABLE”
setUpModule
,因为现在该表只创建了一次,但由于测试是并行运行的,因此没有任何东西可以阻止将同一对象多次插入我的表中,从而打破某些字段的唯一性约束
同样,我不能在每个方法中“创建模式一些随机模式名称”
,因为我需要为给定数据库全局“将搜索路径设置为…”,所以并行运行的每个方法都会受到影响
我看到的唯一方法是为每个测试创建“create DATABASE”
,使用唯一的名称,并与每个数据库建立一个不受干扰的连接。。这看起来非常浪费。有更好的办法吗
另外,我不能在内存中使用SQLite,因为我需要测试PostgreSQL。最好的解决方案是使用模块。这会在用户空间中激发一个db,然后在运行结束时再次删除它。您可以将以下内容放入unittest套件中—在
设置
、设置类
或设置模块
中—具体取决于所需的持久性:
import testing.postgresql
def setUp(self):
self.postgresql = testing.postgresql.Postgresql(port=7654)
# Get the url to connect to with psycopg2 or equivalent
print(self.postgresql.url())
def tearDown(self):
self.postgresql.stop()
如果希望数据库在测试之间/测试之后保持不变,可以使用base\u dir
选项运行数据库,以设置一个目录-这将阻止数据库在关闭后被删除:
name = "testdb"
port = "5678"
path = "/tmp/my_test_db"
testing.postgresql.Postgresql(name=name, port=port, base_dir=path)
在测试之外,它还可用作上下文管理器,当with块退出时,它将自动清理并关闭:
with testing.postgresql.Postgresql(port=7654) as psql:
# do something here
我没有在应用服务器上运行PSQL服务器-如何连接到PSQL服务器(比如使用JDBC连接)?这个问题是关于使用python测试postgres的,我的答案是关于使用python设置临时PSQL服务器。您的问题是关于使用JDBC连接到postgres,这其实并不相关。我建议开始一个新问题,而不是在此处添加注释。是否有方法使用testing.postgres指向非本地服务器?testing.postgres启动本地postgres服务器-您不会指向任何东西-我不确定我是否理解该问题?testing.postgres是一个启动临时postgres服务器的工具。您需要安装postgres,但不能运行,因为testing.postgres将完成这一部分。