我的项目正在使用 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()
线的东西(如果有的话)?
无论您做什么,都不允许从其他(非产品)系统交叉读取生产数据库。对于这个用例来说可能没问题,但是当人们意识到它的存在时,这种用法就会渗透到其他事情中,最终你会遇到问题。
一些可能的解决方案:
我认为你正在做的事情就像我上面提到的那样 - 当它们需要成为系统的一部分时,你已经将所有环境中相同的系统变量放入数据库中。因此,解决方案是找到一种明智的方法将它们包含在系统中并将它们作为存储库的一部分,即使这也意味着部署过程每次都会重新创建现有表。