我正在發出網路請求并給它一個 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)?
uj5u.com熱心網友回復:
你應該DEBUG在你的變數中有這個變數,settings.py并假設你初始化這個變數.env以確定它是否產生。然后您可以根據變數初始化TIMEOUT變數,如下所示:settings.pyDEBUG
DEBUG = os.getenv("DEBUG") == "True"
TIMEOUT = 0.1 if DEBUG else 10
uj5u.com熱心網友回復:
為了解決這個問題,我做了兩件事:
- 我改變了加載模塊的方式:
import request_maker
- 更新設定后我重新加載了模塊
settings.TIMEOUT = 0.1
reload(request_maker)
這是完整的新代碼:
###############
tests.py
###############
import pytest
from timeout_decorator import TimeoutError
import request_maker
from importlib import reload
def test_make_request(settings):
settings.TIMEOUT = 0.1
reload(request_maker)
mr = request_maker.MakeRequest()
with pytest.raises(TimeoutError) as e:
mr.make_the_request() # < Sleeps for 0.1 seconds only!
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/420718.html
標籤:
