【发布时间】:2022-01-23 23:19:04
【问题描述】:
我正在发出一个网络请求,并给它一个 10 秒的超时时间。
超时由从settings 读取时间限制的装饰器引发,因此看起来像这样:
@timeout(settings.TIMEOUT).
问题是我希望测试超级快,所以我把超时时间改成0.1:
settings.TIMEOUT = 0.1
问题是当我尝试测试装饰器时,装饰器已经是initialized(我可能使用了错误的词)。所以装饰器是在构建时创建/定义的,然后我更改了设置,但为时已晚,装饰器不再读取更新的设置。
这是一个简化版:
##############
settings.py
###############
TIMEOUT = 10
###############
request_maker.py
###############
from timeout_decorator import timeout
from django.conf import settings
from time import sleep
class MakeRequest
@timeout(settings.TIMEOUT)
def make_the_request(self):
sleep(100)
###############
tests.py
###############
import pytest
from timeout_decorator import TimeoutError
from request_maker import MakeRequest
def test_make_request(settings):
settings.TIMEOUT = 0.1
mr = MakeRequest()
with pytest.raises(TimeoutError) as e:
mr.make_the_request() # < Even though TIMEOUT is 0.1, it actually times out for 10 seconds
如何更改代码,以便在生产期间为@timeout(10),在测试期间为@timeout(0.1)?
【问题讨论】:
标签: django testing pytest python-decorators