【问题标题】:testing postgres db python测试 postgres db python
【发布时间】:2018-02-15 20:39:34
【问题描述】:

我不明白如何测试我的存储库。

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

但是,我不能将 "CREATE TABLE test_table" 放在 unittest case 的 setUp 方法中,因为它会被创建多次(同一个测试用例的测试是并行运行的)。所以,只要我在需要在同一张表上工作的同一个类,它不会工作(表的名称冲突)

同样,我不能放"CREATE TABLE test_table"setUpModule,因为现在表只创建一次,但由于测试是并行运行的,没有什么可以阻止将同一个对象多次插入我的表中,这会破坏某个字段的唯一性约束。

同样,我不能在每个方法中都使用"CREATE SCHEMA some_random_schema_name",因为我需要为给定的数据库全局“SET search_path TO ...”,所以每个并行运行的方法都会受到影响。

我看到的唯一方法是为每个测试创建"CREATE DATABASE",并使用唯一的名称,并建立与每个数据库的个人连接。这看起来非常浪费。有没有更好的办法?

另外,我不能在内存中使用 SQLite,因为我需要测试 PostgreSQL。

【问题讨论】:

    标签: python postgresql python-unittest


    【解决方案1】:

    最好的解决方案是使用testing.postgresql 模块。这会在用户空间中启动一个数据库,然后在运行结束时再次将其删除。您可以将以下内容放入单元测试套件中 - setUpsetUpClasssetUpModule - 取决于您想要的持久性:

    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_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 服务器 - 我如何使用 JDBC 连接连接到 PSQL 服务器?
    • 这个问题都是关于用python测试postgres的,我的回答是关于用python设置一个临时的psql服务器。您的问题是关于使用 JDBC 连接到 postgres,这并不相关。我建议开始一个新问题,而不是在这里添加评论。
    • testing.postgres 启动一个本地 postgres 服务器 - 你没有将它指向任何东西 - 我不确定我是否理解这个问题?
    • testing.postgres 是一个启动临时 postgres 服务器的工具。您需要安装 postgres,但不要运行,因为 testing.postgres 会执行此部分。
    • 我仍然每天在很多项目中使用它——虽然没有查看 github 上的问题,但看它是因为它“完整”还是因为它停滞不前。
    猜你喜欢
    • 1970-01-01
    • 2015-08-11
    • 1970-01-01
    • 2022-01-14
    • 2023-03-18
    • 1970-01-01
    • 2015-08-27
    • 2016-03-18
    • 1970-01-01
    相关资源
    最近更新 更多