2017-09-26 157 views
0

我試圖測試由標記進行身份驗證的REST API。其過程是:使用Jmeter時,授權標題消失

  1. 提供用戶名和密碼,以獲得令牌
  2. 提取令牌,並將其保存到的JMeter(AUTH_TOKEN)可變
  3. 設置與所提取的令牌值的報頭「授權」。
  4. 使用令牌發送請求。

這是我的測試計劃:

enter image description here

我能成功提取令牌。但是,在步驟4中發送請求由於缺少授權而失敗。查看結果樹顯示請求包含授權標頭,但服務器找不到授權標頭。如下圖所示,我添加了2個標頭Authorization和Content-Type,並且它們出現在請求中。服務器返回它已經實際收到的報頭,但沒有授權:

enter image description here

誰能幫我解決這個問題?非常感謝。

P/S:服務器通過Python和Flask框架實現RESTful API。我使用Apache HTTP Server部署了服務器。

========== [更新] ========================

服務器代碼實現與燒瓶在Pycharm。將請求從JMeter發送到使用嵌入式Flask服務器運行的服務器時,一切都很完美。該問題僅在使用Apache HTTP Server部署服務器代碼時出現。上述情況下JMeter的配置除端口外完全相同。但是如果原因來自Apache服務器,這似乎不合理。

========== [更新&解決] ========================

我發現我的問題在這裏的原因Missing authorization header。由於使用Apache和mod_wsgi部署Web應用程序,默認情況下授權標頭不會傳遞給應用程序。我必須將這一行WSGIPassAuthorization On添加到我的虛擬主機配置中。

+0

響應數據選項卡不顯示標題,因此我不認爲這是問題 – user7294900

+0

響應標題顯示在採樣器結果選項卡中。所以,你可能想檢查那裏 –

+0

@ user7294900,Varun Sharma:我知道響應數據選項卡顯示響應主體。由於服務器返回了「缺少令牌」的錯誤,所以我修改了服務器代碼以返回所有請求頭。因此,圖中的Response Data選項卡返回服務器收到的請求標題。 – Nana

回答

0

請檢查您的API端點是否需要具有「GET/regions」請求的請求主體。在「請求」部分的第二個屏幕截圖中,「GET data:」部分爲空。它大多意味着服務器正在等待GET請求發出請求正文。

+0

API「GET/regions」只是返回一個區域列表,所以它不需要請求主體中的任何數據。但是,API需要在請求頭「授權」中提供的令牌進行驗證。當我在Pycharm中使用Python請求庫在發送請求時對其進行測試時,此API起作用。 – Nana

+0

您可以嘗試在您的新Apache服務器正在偵聽新請求的GET請求的URL中傳遞端口號。 –

0

我的期望是您的Extract token工作不正常,即您的${BEARER}變量在實際值之前有一個空白行,正如您的屏幕截圖所證明的那樣。使用Debug Sampler and View Results Tree Listener組合:請不要包含空行。如果確實如此 - 請檢查您的Extract token配置並修改它以僅返回標題值。

建議使用JSON Extractor從JSON數據類型獲取值。

+0

我使用的提取器是JSON提取器。我認爲問題不在於提取器。這是我從調試採樣器獲得的提取值:'JMeterVariables: AUTH_TOKEN = eyJhbGciOiJIUzI1N ...'(我剪掉了令牌的其餘部分) – Nana