Python 更改测试用例中的页面限制

Python 更改测试用例中的页面限制,python,django,pagination,django-rest-framework,django-testing,Python,Django,Pagination,Django Rest Framework,Django Testing,简言之,问题:在Django的测试用例中,如何覆盖REST\u框架的PAGE\u SIZE设置 关于问题的详细信息:我在项目的base.py中有以下设置: REST_FRAMEWORK = { 'DEFAULT_PERMISSION_CLASSES': ( 'rest_framework.permissions.IsAuthenticated', ), 'DEFAULT_RENDERER_CLASSES': ( 'rest_framewor

简言之,问题:在Django的测试用例中,如何覆盖
REST\u框架的
PAGE\u SIZE
设置

关于问题的详细信息:我在项目的
base.py
中有以下设置:

REST_FRAMEWORK = {
    'DEFAULT_PERMISSION_CLASSES': (
        'rest_framework.permissions.IsAuthenticated',
    ),
    'DEFAULT_RENDERER_CLASSES': (
        'rest_framework.renderers.JSONRenderer',
    ),
    'DEFAULT_AUTHENTICATION_CLASSES': (
        'Masterdata.authentication.FashionExchangeAuthentication',
    ),
    'DEFAULT_FILTER_BACKENDS': (
        'rest_framework.filters.DjangoFilterBackend',
    ),
    'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.LimitOffsetPagination',
    'PAGE_SIZE': 100
}
现在我想创建一个测试用例,在其中我将页面大小更改为10。但是,我无法在保持字典其余部分不变的情况下覆盖此特定设置。有人知道怎么做吗

这就是我所尝试的:

1) 在测试方法上方添加修改\u设置装饰器:

@modify_settings(REST_FRAMEWORK={
    'remove': 'PAGE_SIZE',
    'append': {'PAGE_SIZE': 10}
})
这不会改变设置

2) 将覆盖\u设置用作上下文管理器:

test_settings = settings.REST_FRAMEWORK
test_settings['PAGE_SIZE'] = 10
with override_settings(REST_FRAMEWORK = test_settings):
    # do stuff
但是,
test\u settings['PAGE\u SIZE']=10
的行失败,因为变量
settings.REST\u FRAMEWORK
显然是一个列表而不是一个字典

print(settings.REST_FRAMEWORK)

['DEFAULT_PERMISSION_CLASSES', 'DEFAULT_AUTHENTICATION_CLASSES', 'DEFAULT_FILTER_BACKENDS', 'DEFAULT_PAGINATION_CLASS', 'DEFAULT_RENDERER_CLASSES']

为什么这个设置在这里是一个列表?我已经验证了该变量在项目的其他任何地方都没有被覆盖。

在rest\u框架设置下,您可以检查这是否是测试环境。这应该起作用:

if 'test' in sys.argv:
    REST_FRAMEWORK['PAGE_SIZE'] = 10
否则,您可以为测试用例创建单独的设置文件:

# settings_tests.py
from settings import *

# Override your changes.
REST_FRAMEWORK['PAGE_SIZE'] = 10

在rest_框架设置下,您可以检查这是否是测试环境。这应该起作用:

if 'test' in sys.argv:
    REST_FRAMEWORK['PAGE_SIZE'] = 10
否则,您可以为测试用例创建单独的设置文件:

# settings_tests.py
from settings import *

# Override your changes.
REST_FRAMEWORK['PAGE_SIZE'] = 10

为什么不为测试添加另一个设置文件?在设置中,您可以通过选中sys.argv来创建条件。如果sys.argv中有“test”,那么将PAGE_SIZE设置为10为什么不为测试添加另一个设置文件?在您的设置中,可以通过选中sys.argv来创建条件。如果sys.argv中有“test”,则将PAGE_SIZE设置为10,但随后它将针对所有测试进行更新,而不仅仅是针对我想要的方法。您可以通过运行“python manage.py test app.api.test.TestClass”来运行您想要不同页面大小的测试用例,并在sys.argv中检查是否为“app.api.test.TestClass”存在,然后将页面大小设置为10,否则您将不得不采用更简单的方法,即为测试用例创建单独的设置文件,但随后它将针对所有测试进行更新,而不仅仅是针对我想要的方法。您可以通过运行“python manage.py test app.api.test.TestClass”来运行需要不同页面大小的测试用例在sys.argv中,您可以检查是否存在“app.api.test.TestClass”,然后将页面大小设置为10,否则您将不得不采用更简单的方法,即为测试用例创建单独的设置文件