gpt4 book ai didi

python - Django override_settings 不适用于运行多个测试

转载 作者:太空狗 更新时间:2023-10-30 01:05:53 25 4
gpt4 key购买 nike

我在使用 override_settings 装饰器时出现了一些奇怪的行为。当我单独运行测试时它基本上可以工作,但是如果我运行整个测试套件就不会工作。

在此测试中,我正在更改 REST_FRAMEWORK 选项,因为在运行此套件时我想设置身份验证设置,而其他测试不使用身份验证:

@override_settings(REST_FRAMEWORK=AUTH_REST_FRAMEWORK)
class AuthTestCase(TestCase):
@classmethod
def setUpClass(cls):
super(AuthTestCase, cls).setUpClass()
cls.client = Client()

def test_i_need_login(self):
response = client.get('/')
self.assertEqual(response.status_code, 401)

所以如果我这样做...

$ python manage.py test myapp/tests/test_auth.py

设置已应用并且效果很好!

但是如果像这样运行整个测试套件:

$ python manage.py 测试

测试将失败。在我看来,这些设置(或某些对象)是从其他测试中缓存的。我在另一个测试文件中还有另一个类,它以类似的方式使用 Client 实例。

环境:Python:2.7Django: 1.10

编辑:

我发现这个问题的解决方法是使用 find 来运行测试,它可以是别名或带有...的脚本

找到 . -name 'test*.py' -exec python manage.py test {}\;

缺点是许多测试的输出堆积在屏幕上,它可能会创建/销毁测试数据库几次。除非你在使用 django-nose 时向命令添加选项,如 REUSE_DB。

最佳答案

嗯,有一个warning关于这种情况。

Warning

The settings file contains some settings that are only consulted during initialization of Django internals. If you change them with override_settings, the setting is changed if you access it via the django.conf.settings module, however, Django’s internals access it differently. Effectively, using override_settings() or modify_settings() with these settings is probably not going to do what you expect it to do.

第一次运行测试时,您正在运行一个特定的测试用例,因此覆盖生效。第二次运行测试时,您运行的是整个套件,而您的特定测试用例可能不是第一个运行的测试用例。所以会发生上述情况。

关于python - Django override_settings 不适用于运行多个测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41498933/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com