【发布时间】:2018-10-09 00:24:55
【问题描述】:
我有一个较大的 Django 项目,其中包含许多视图/模型。我最近将我的项目从 sqlite3 迁移到本地的 postgres,并计划进一步扩展(将 postgres 放在单独的机器上等)。
当我从 sqlite 迁移到 postgres 时,我关注了 these instructions,它似乎运行良好。 (即,我正在运行的应用程序看起来与数据库是 sqlite 时相同)
我的问题是这样的:当我运行我以前编写的单元测试时,第一个单元测试有效,所有进行中的单元测试都失败了。单独地,单元测试工作正常。我在 stackoverflow 上看到了一些 other posts 解决了这个问题,但解决方案非常不清楚。如何为我的单元测试重新设计我的 setUp()/ teardown() 方法,以便它们与我新迁移的 postgres 数据库一起通过?我需要完全重写所有单元测试吗?
我见过pytest-postgresql library,尽管我不完全确定如何根据此修改我的单元测试。
我的测试套件设置有用于测试视图的不同类。例如,
class View1Tests(TestCase):
def setUp(self):
c1 = Category.objects.create(id=55555, leaf_node_name="Test Category 1")
c2 = Category.objects.create(id=12345, leaf_node_name="Test Category 2")
s1 = Search.objects.create(category=c1, username="testuser")
s2 = Search.objects.create(category=c2, username="testuser2")
def test_view1_success(self):
#blablabla
def test_view1_fail(self):
#blablabla
def test_view1_something(self):
#blablabla
我收到这样的错误:
appname.models.DoesNotExist:搜索匹配查询不存在。
同样,当 sqlite3 是数据库时,所有这些单元测试都运行得非常好。我认为这是 postgres 测试设置的问题?但我不知道从哪里开始。任何帮助将不胜感激!
【问题讨论】:
-
可能是一个愚蠢的问题,但大概您的测试类扩展了
django.test.TestCase并且您正在使用python manage.py test运行您的测试? -
@WillKeeling 我的测试扩展了 django.test.TestCase。但是,我正在运行
pytest来运行所有测试。不过,运行python manage.py test也会引发相同的错误。 -
@HeidiLyons:你设法解决了这个问题吗?我现在在同一个地方。如果你能发布对你有用的东西,那就太好了!谢谢。
-
从 sqlite 迁移到 postgresql 时,我遇到了同样的错误。如果我弄清楚问题是什么,我会发布回复
-
我想我找到了解决方案。解决方案发布在下面。
标签: python django postgresql python-unittest pytest-django