Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
测试postgres db python_Python_Postgresql_Python Unittest - Fatal编程技术网

测试postgres db python

测试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,因为现在该表只

我不知道如何测试我的存储库

我希望确保我确实将对象及其所有参数保存到了数据库中,并且当我执行SQL语句时,我确实收到了我应该收到的内容

但是,我不能将
“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将完成这一部分。