在測試某些模塊時,需要session數據,而測試時啓動的客戶端與用瀏覽器訪問不同,不會保存Cookies,需要其他方法去模擬session
訪問Session
利用 with 語句創建一個上下文環境訪問session
@patch('model.User.getPassWord')
def test_UserLogin200(self, mock_getpwd):
mock_getpwd.return_value = '123456'
with app.test_client() as c:
rv = c.post('/users/root/login', content_type='application/json', data='{"password": "123456"}')
self.assertEqual(rv.status_code, 200)
assert session['username'] == 'root'
使用 with 語句塊啓動一個測試客戶端發出請求,在 with 塊中,可以使用這次請求的上下文信息,如 session
,request
等,利用這個方法就可以測試session中是否寫入自己期望的值
修改session
在前面的方法中,只能去訪問已有的session,不能創建session,要修改session,需要session_transaction
()
def test_getTitle200(self, mock_get_title):
with app.test_client() as c:
with c.session_transaction() as sess:
sess['username'] = 'root'
rv = c.get('/users/root/title')
self.assertEqual(rv.status_code, 200)
assert b'test title' in rv.data
這裏要特別注意縮進,在with c.session_transaction() as sess:
的塊中只修改session,剩下的請求工作要回到上一級的塊中,因爲只有這個塊結束,這些修改纔會寫入session。官網文檔中這沒寫清楚,我全部寫到一個塊裏後拋出的異常比代碼還長=-=
這裏測試了一個獲取標題的請求,在該請求中,會用session檢查用戶是否登陸,如果不修改session直接測試,返回401,加入session修改後,返回200,測試成功