Django -- 在测试数据库中使用一些生产数据

问题描述 投票:0回答:1

我的项目正在使用 Django 的测试数据库框架(带和不带 Selenium),它已经运行良好好几年了,对生产数据库进行了一些只读测试(主要是我们的数据库无法强制执行的完整性测试)但绝大多数是在测试数据库上读/写。

我们在生产数据库上有一个模型/表,它为站点提供重要的元数据,该元数据太大而无法编码到固定装置中,并且我们希望在测试中看到其当前值。我希望我们的 setUp() 代码能够执行以下操作:

def setUp(self):
    with self.activate_production_database():
         metadata_info = MetadataTable.objects.values_list(
             'title', flat=True)

    # back to test_database
    MetadataTable.objects.bulk_create([MetadataTable(title=t)
                                       for t in metadata_info])

我想知道是否存在类似于

with self.activate_production_database()
线的东西(如果有的话)?

django django-database django-tests
1个回答
0
投票

无论您做什么,都不允许从其他(非产品)系统交叉读取生产数据库。对于这个用例来说可能没问题,但是当人们意识到它的存在时,这种用法就会渗透到其他事情中,最终你会遇到问题。

一些可能的解决方案:

  • 拥有一个仅包含您要读取的表的复制只读数据库,并使用它。
  • 感觉这些数据是系统的一部分,而不是数据,因此将其从表中取出并将其包含在存储库中,例如。然后在每次部署时将其加载(自动)到表中 - 这意味着只要您拥有最新的存储库,您的其他环境就会保持最新状态。
  • 将这些通用数据放入 SQLite 数据库中,并让 django 读取 2 个数据库。将 SQLite 数据库文件包含在存储库中。

我认为你正在做的事情就像我上面提到的那样 - 当它们需要成为系统的一部分时,你已经将所有环境中相同的系统变量放入数据库中。因此,解决方案是找到一种明智的方法将它们包含在系统中并将它们作为存储库的一部分,即使这也意味着部署过程每次都会重新创建现有表。

© www.soinside.com 2019 - 2024. All rights reserved.