Flask 其他測試技巧

2021-08-10 17:36 更新

除了如上文演示的使用測試客戶端完成測試的方法,也有一個 test_request_context() 方法可以 配合 with 語句用于激活一個臨時的請求上下文。通過 它,您可以訪問 request 、gsession 類的對象,就像在視圖中一樣。 這里有一個完整的例子示范了這種用法:

app = flask.Flask(__name__)

with app.test_request_context('/?name=Peter'):
    assert flask.request.path == '/'
    assert flask.request.args['name'] == 'Peter'

所有其他的和上下文綁定的對象都可以使用同樣的方法訪問。

如果您希望測試應(yīng)用在不同配置的情況下的表現(xiàn),這里似乎沒有一個 很好的方法,考慮使用應(yīng)用的工廠函數(shù)(參考 應(yīng)用程序的工廠函數(shù))

注意,盡管你在使用一個測試用的請求環(huán)境,函數(shù) before_request() 以及 after_request() 都不會自動運行。 然而,teardown_request() 函數(shù)在 測試請求的上下文離開 with 塊的時候會執(zhí)行。如果您 希望 before_request() 函數(shù)仍然執(zhí)行。 您需要手動調(diào)用 preprocess_request() 方法:

app = flask.Flask(__name__)

with app.test_request_context('/?name=Peter'):
    app.preprocess_request()
    ...

這對于打開數(shù)據(jù)庫連接或者其他類似的操作來說,很可能 是必須的,這視您應(yīng)用的設(shè)計方式而定。

如果您希望調(diào)用 after_request() 函數(shù), 您需要使用 process_response() 方法。 這個方法需要您傳入一個 response 對象:

app = flask.Flask(__name__)

with app.test_request_context('/?name=Peter'):
    resp = Response('...')
    resp = app.process_response(resp)
    ...

這通常不是很有效,因為這時您可以直接轉(zhuǎn)向使用 測試客戶端。


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號