Flask單元測試Session數據修改

  在測試某些模塊時,需要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 塊中,可以使用這次請求的上下文信息,如 sessionrequest 等,利用這個方法就可以測試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,測試成功

參考資料

測試 Flask 應用

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章