jmeter接口測試之登錄token驗證

前言

? ? ? ? ?廢話不多說,就是姐姐我在最近的兩個前后端分離的項目做接口測試,遇到了登錄驗證的問題,就是所謂的XSRF驗證問題。現在提筆將配置方法總結到文中。

一、概念學習(ps:如果都知曉,可以跳過該步驟,直接去二章節,因為我也是copy的哈哈哈)

1.明確概念:cookie和session

①cookie數據存放在客戶的瀏覽器上,session數據放在服務器上。

②cookie不是很安全,別人可以分析存放在本地的cookie并進行cookie欺騙,考慮到安全應當使用session。

③session會在一定時間內保存在服務器上。當訪問增多,會比較占用你服務器的性能考慮到減輕服務器性能方面,應當使用cookie。

④單個cookie保存的數據不能超過4K,很多瀏覽器都限制一個站點最多保存20個cookie。

⑥所以將登錄信息,個人賬戶資料等重要信息存放為session;其他不會泄露個人隱私的信息如果需要保留,可以放在cookie中。

2.Cookie

添加方式:線程組-配置元件-HTTP Cookie 管理器,如下圖:


Cookie的傳遞流程:

1.瀏覽器向某個URL發起HTTP請求(可以是任何請求,比如GET一個頁面、POST一個登錄表單、DELETE某條評論、PUT某條更新等)

2.對應的服務器收到該HTTP請求,并計算應當返回給瀏覽器的HTTP響應(HTTP響應包括請求頭和請求體兩部分)

3.在響應頭加入Set-Cookie字段,它的值是要設置的Cookie。

4.瀏覽器收到來自服務器的HTTP響應。

5.瀏覽器在響應頭中發現Set-Cookie字段,就會將該字段的值保存在內存或者硬盤中(Set-Cookie字段的值可以是很多項Cookie,每一項都可以指定過期時間Expires。 默認的過期時間是用戶關閉瀏覽器時。)

6.瀏覽器下次給該服務器發送HTTP請求時, 會將服務器設置的Cookie附加在HTTP請求的頭字段Cookie中。(瀏覽器可以存儲多個域名下的Cookie,但只發送當前請求的域名曾經指定的Cookie, 這個域名也可以在Set-Cookie字段中指定)。)

7.服務器收到這個HTTP請求,發現請求頭中有Cookie字段, 便知道之前就和這個用戶打過交道了.

8.過期的Cookie會被瀏覽器刪除。

總之,服務器通過Set-Cookie響應頭字段來指示瀏覽器保存Cookie, 瀏覽器通過Cookie請求頭字段來告訴服務器之前的狀態。 Cookie中包含若干個鍵值對,每個鍵值對可以設置過期時間。

3.Session

添加方式:線程組-前置處理器 -HTTP URL 重寫修飾符,如下圖:


session的傳遞流程:

1.用戶提交包含用戶名和密碼的表單,發送HTTP請求。

2.服務器驗證用戶發來的用戶名密碼。

3.如果正確則把當前用戶名(通常是用戶對象)存儲到redis中,并生成它在redis中的ID。這個ID稱為Session ID,通過Session ID可以從Redis中取出對應的用戶對象, 敏感數據(比如authed=true)都存儲在這個用戶對象中。

4.設置Cookie為sessionId=xxxxxx|checksum并發送HTTP響應, 仍然為每一項Cookie都設置簽名。

5.用戶收到HTTP響應后,便看不到任何敏感數據了。在此后的請求中發送該Cookie給服務器。

6.服務器收到此后的HTTP請求后,發現Cookie中有SessionID,進行放篡改驗證。

7.如果通過了驗證,根據該ID從Redis中取出對應的用戶對象, 查看該對象的狀態并繼續執行業務邏輯。實現上述過程,在Web應用中可以直接獲得當前用戶。 相當于在HTTP協議之上,通過Cookie實現了持久的會話。這個會話便稱為Session。

4.Token認證

1、支持跨域訪問: Cookie是不允許垮域訪問的,這一點對Token機制是不存在的,前提是傳輸的用戶認證信息通過HTTP頭傳輸。(垮域訪問:兩個域名之間不能跨過域名來發送請求或者請求數據)

2、無狀態(也稱:服務端可擴展行):Token機制在服務端不需要存儲session信息,因為Token 自身包含了所有登錄用戶的信息,只需要在客戶端的cookie或本地介質存儲狀態信息.

3、更適用CDN: 可以通過內容分發網絡請求你服務端的所有資料(如:javascript,HTML,圖片等),而你的服務端只要提供API即可.

4、去耦: 不需要綁定到一個特定的身份驗證方案。Token可以在任何地方生成,只要在你的API被調用的時候,你可以進行Token生成調用即可.

5、更適用于移動應用: 當你的客戶端是一個原生平臺(iOS, Android,Windows 8等)時,Cookie是不被支持的(你需要通過Cookie容器進行處理),這時采用Token認證機制就會簡單得多。

6、CSRF:因為不再依賴于Cookie,所以你就不需要考慮對CSRF(跨站請求偽造)的防范。

7、性能: 一次網絡往返時間(通過數據庫查詢session信息)總比做一次HMACSHA256計算 的Token驗證和解析要費時得多.

8、不需要為登錄頁面做特殊處理: 如果你使用Protractor 做功能測試的時候,不再需要為登錄頁面做特殊處理.

9、基于標準化:你的API可以采用標準化的 JSON Web Token (JWT). 這個標準已經存在多個后端庫(.NET, Ruby, Java,Python, PHP)和多家公司的支持(如:Firebase,Google, Microsoft).

使用Token的方法

不是在每一次請求時提供用戶名和密碼的憑證。我們可以讓用戶通過token交換憑證(we can allow the client to exchange valid credentials for a token),這個token提供用戶訪問服務器的權限。Token通常比密碼更加長而且復雜。比如說,JWTs通常會應對長達150個字符。一旦獲得了token,在每次調用API的時候都要附加上它。然后,這仍然比直接發送賬戶和密碼更加安全,哪怕是HTTPS。

把token想象成一個安全的護照。你在一個安全的前臺驗證你的身份(通過你的用戶名和密碼),如果你成功驗證了自己,你就可以取得這個。當你走進大樓的時候(試圖從調用API獲取資源),你會被要求驗證你的護照,而不是在前臺重新驗證。

獲取一個Token我們需要做的第一件事就是讓客戶端通過他們的賬號密碼交換token。這里有2種可能的方法在RESTful API里面。第一種是使用POST請求來通過驗證,使服務端發送帶有token的響應。除此之外,你可以使用GET請求,這需要他們使用參數提供憑證(指URL),或者更好的使用請求頭。

二、實戰演練

xxx項目,后臺語言-java,機制為cookie+session驗證

測試計劃構建步驟:

1.添加線程組

2.在線程組下添加HTTP Cookie 管理器

3.在線程組下HTTP請求默認值,在這里配置協議、IP、端口號

4.在線程組下添加全部請求的察看結果樹

5.在線程組下添加HTTP請求1(可以用ID+接口名來重命名)

6.在HTTP請求1添加HTTP信息頭管理器

7.在HTTP請求1添加當前請求的察看結果樹

8.重復步驟5-7可以多添加幾個接口

各步驟配置詳情:

1.HTTP Cookie 管理器

①jmeter的bin目錄下jmeter.properties的文件,開放這個:CookieManager.save.cookies=true

②抓包工具查看cookie命名,若命名為tt_sessionid,或者通過前臺debug查看(我是通過debug看的)



③則在整個測試計劃需要獲取的cookie值為${COOKIE_tt_sessionid},前面的COOKIE為jmeter命名規則



2.HTTP請求默認值


3.HTTP請求1


4.在HTTP請求1下的HTTP信息頭管理器


配置好了,大膽地run run run,當你看到如下畫面,證明你成功了!


xx項目,后臺語言-python,機制為session驗證

測試計劃構建步驟(無HTTP Cookie 管理器):

1.添加線程組

2.在線程組下HTTP請求默認值,在這里配置協議、IP、端口號

3.在線程組下添加全部請求的察看結果樹

4.在線程組下添加HTTP請求1(可以用ID+接口名來重命名)

5.在HTTP請求1添加HTTP信息頭管理器

6.在HTTP請求1添加當前請求的察看結果樹

7.重復步驟4-6可以多添加幾個接口

各步驟配置詳情:

1.get/delete方法的HTTP信息頭管理器


2.post/put方法的HTTP信息頭管理器


異常錯誤:

1.jmeter報錯“org.apache.http.NoHttpResponseException”



就是第一個通過,后面全失敗,報錯為:? org.apache.http.NoHttpResponseException: xxxxIP?failed to respond

原因:在JMeter下,發送http 請求時,默認選擇了use keepAlive(Keep-Alive通俗地講,就是所謂的持久連接,對于http這種大量的短連接的服務來說,開啟持久連接的好處可節省大量的TCP連接過程的開銷,據apache的官方文檔稱對包含大量圖片的HTML文檔造成的延時起到50%的加速作用),這個是連接協議,JMeter坑就在這里,默認勾選了這個(如果不勾選的話,也不會保存),但其配置JMeter.properties中的時間設置默認卻是注銷的,不會等待,一旦連接空閑,則立即斷開了,導致壓測中出現了事務失敗的情形。

可訪問https://wiki.apache.org/jmeter/JMeterSocketClosed查看官網解釋


解決方法:

①找到jmeter安裝路徑bin下的jmeter.properties,編輯,設置httpclient4.idletimeout=,注意單位是ms,設置成覺得合理的時間,一般可設置成10-60s(表示連接空閑10s后才會斷開)。修改完成后再次壓測,錯誤就沒出現。

例:httpclient4.idletimeout=3000,意思是連接空閑3s才會斷開


②去掉勾選 Use KeepAlive (日常在瀏覽器查看請求頭也可看到KeepAlive)


再來run時,問題解決,我在這糾纏了好久,哇哇哇,是不是很開森。。。

2.服務器相應數據中文為亂碼


看到這不認識的符號,是不是很懵逼,說好的中文名字呢???

別著急,都是字符集惹的禍

解決辦法:



再來run,是不是中文名字回來了

至此,over!

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,702評論 6 534
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,615評論 3 419
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,606評論 0 376
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,044評論 1 314
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,826評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,227評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,307評論 3 442
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,447評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,992評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,807評論 3 355
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,001評論 1 370
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,550評論 5 361
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,243評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,667評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,930評論 1 287
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,709評論 3 393
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,996評論 2 374

推薦閱讀更多精彩內容