jmeter接口測試之登錄token驗證

前言

? ? ? ? ?廢話不多說赞辩,就是姐姐我在最近的兩個前后端分離的項目做接口測試,遇到了登錄驗證的問題伸辟,就是所謂的XSRF驗證問題×「剩現(xiàn)在提筆將配置方法總結(jié)到文中距误。

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

1.明確概念:cookie和session

①cookie數(shù)據(jù)存放在客戶的瀏覽器上域仇,session數(shù)據(jù)放在服務器上。

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

③session會在一定時間內(nèi)保存在服務器上怔软。當訪問增多垦细,會比較占用你服務器的性能考慮到減輕服務器性能方面,應當使用cookie挡逼。

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

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

2.Cookie

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

Cookie的傳遞流程:

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

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

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

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

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

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

7.服務器收到這個HTTP請求详幽,發(fā)現(xiàn)請求頭中有Cookie字段, 便知道之前就和這個用戶打過交道了.

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

總之唇聘,服務器通過Set-Cookie響應頭字段來指示瀏覽器保存Cookie版姑, 瀏覽器通過Cookie請求頭字段來告訴服務器之前的狀態(tài)。 Cookie中包含若干個鍵值對迟郎,每個鍵值對可以設置過期時間剥险。

3.Session

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

session的傳遞流程:

1.用戶提交包含用戶名和密碼的表單宪肖,發(fā)送HTTP請求表制。

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

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

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

5.用戶收到HTTP響應后鸽扁,便看不到任何敏感數(shù)據(jù)了。在此后的請求中發(fā)送該Cookie給服務器镶骗。

6.服務器收到此后的HTTP請求后桶现,發(fā)現(xiàn)Cookie中有SessionID,進行放篡改驗證鼎姊。

7.如果通過了驗證骡和,根據(jù)該ID從Redis中取出對應的用戶對象, 查看該對象的狀態(tài)并繼續(xù)執(zhí)行業(yè)務邏輯相寇。實現(xiàn)上述過程慰于,在Web應用中可以直接獲得當前用戶。 相當于在HTTP協(xié)議之上唤衫,通過Cookie實現(xiàn)了持久的會話婆赠。這個會話便稱為Session。

4.Token認證

1佳励、支持跨域訪問: Cookie是不允許垮域訪問的休里,這一點對Token機制是不存在的,前提是傳輸?shù)挠脩粽J證信息通過HTTP頭傳輸赃承。(垮域訪問:兩個域名之間不能跨過域名來發(fā)送請求或者請求數(shù)據(jù))

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

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

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

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

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

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

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

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

使用Token的方法

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

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

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

二承桥、實戰(zhàn)演練

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

測試計劃構(gòu)建步驟:

1.添加線程組

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

3.在線程組下HTTP請求默認值凶异,在這里配置協(xié)議蜀撑、IP、端口號

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

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

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

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

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命名規(guī)則

2.HTTP請求默認值

3.HTTP請求1

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

配置好了沃饶,大膽地run run run,當你看到如下畫面轻黑,證明你成功了糊肤!

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

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

1.添加線程組

2.在線程組下HTTP請求默認值馆揉,在這里配置協(xié)議、IP玖详、端口號

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

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

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

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

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下蟋座,發(fā)送http 請求時拗踢,默認選擇了use keepAlive(Keep-Alive通俗地講,就是所謂的持久連接向臀,對于http這種大量的短連接的服務來說巢墅,開啟持久連接的好處可節(jié)省大量的TCP連接過程的開銷,據(jù)apache的官方文檔稱對包含大量圖片的HTML文檔造成的延時起到50%的加速作用)券膀,這個是連接協(xié)議君纫,JMeter坑就在這里,默認勾選了這個(如果不勾選的話芹彬,也不會保存)蓄髓,但其配置JMeter.properties中的時間設置默認卻是注銷的,不會等待舒帮,一旦連接空閑会喝,則立即斷開了陡叠,導致壓測中出現(xiàn)了事務失敗的情形。

可訪問https://wiki.apache.org/jmeter/JMeterSocketClosed查看官網(wǎng)解釋

解決方法:

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

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

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

再來run時淮蜈,問題解決斋攀,我在這糾纏了好久已卷,哇哇哇梧田,是不是很開森。侧蘸。裁眯。

2.服務器相應數(shù)據(jù)中文為亂碼

看到這不認識的符號,是不是很懵逼讳癌,說好的中文名字呢穿稳??晌坤?

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

解決辦法:

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

至此骤菠,over它改!

作者:伊人風采_690d

鏈接:http://www.reibang.com/p/fe586a2b4c28

來源:簡書

著作權(quán)歸作者所有。商業(yè)轉(zhuǎn)載請聯(lián)系作者獲得授權(quán)商乎,非商業(yè)轉(zhuǎn)載請注明出處央拖。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市鹉戚,隨后出現(xiàn)的幾起案子鲜戒,更是在濱河造成了極大的恐慌,老刑警劉巖抹凳,帶你破解...
    沈念sama閱讀 217,657評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件遏餐,死亡現(xiàn)場離奇詭異,居然都是意外死亡赢底,警方通過查閱死者的電腦和手機失都,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,889評論 3 394
  • 文/潘曉璐 我一進店門蔗牡,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人嗅剖,你說我怎么就攤上這事辩越。” “怎么了信粮?”我有些...
    開封第一講書人閱讀 164,057評論 0 354
  • 文/不壞的土叔 我叫張陵黔攒,是天一觀的道長。 經(jīng)常有香客問我强缘,道長督惰,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,509評論 1 293
  • 正文 為了忘掉前任旅掂,我火速辦了婚禮赏胚,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘商虐。我一直安慰自己觉阅,他們只是感情好,可當我...
    茶點故事閱讀 67,562評論 6 392
  • 文/花漫 我一把揭開白布秘车。 她就那樣靜靜地躺著典勇,像睡著了一般。 火紅的嫁衣襯著肌膚如雪叮趴。 梳的紋絲不亂的頭發(fā)上割笙,一...
    開封第一講書人閱讀 51,443評論 1 302
  • 那天,我揣著相機與錄音眯亦,去河邊找鬼伤溉。 笑死,一個胖子當著我的面吹牛妻率,可吹牛的內(nèi)容都是我干的乱顾。 我是一名探鬼主播,決...
    沈念sama閱讀 40,251評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼舌涨,長吁一口氣:“原來是場噩夢啊……” “哼糯耍!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起囊嘉,我...
    開封第一講書人閱讀 39,129評論 0 276
  • 序言:老撾萬榮一對情侶失蹤温技,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后扭粱,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體舵鳞,經(jīng)...
    沈念sama閱讀 45,561評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,779評論 3 335
  • 正文 我和宋清朗相戀三年琢蛤,在試婚紗的時候發(fā)現(xiàn)自己被綠了蜓堕。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片抛虏。...
    茶點故事閱讀 39,902評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖套才,靈堂內(nèi)的尸體忽然破棺而出迂猴,到底是詐尸還是另有隱情,我是刑警寧澤背伴,帶...
    沈念sama閱讀 35,621評論 5 345
  • 正文 年R本政府宣布沸毁,位于F島的核電站,受9級特大地震影響傻寂,放射性物質(zhì)發(fā)生泄漏息尺。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,220評論 3 328
  • 文/蒙蒙 一疾掰、第九天 我趴在偏房一處隱蔽的房頂上張望搂誉。 院中可真熱鬧,春花似錦静檬、人聲如沸炭懊。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,838評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽凛虽。三九已至死遭,卻和暖如春广恢,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背呀潭。 一陣腳步聲響...
    開封第一講書人閱讀 32,971評論 1 269
  • 我被黑心中介騙來泰國打工钉迷, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人钠署。 一個月前我還...
    沈念sama閱讀 48,025評論 2 370
  • 正文 我出身青樓糠聪,卻偏偏與公主長得像,于是被迫代替她去往敵國和親谐鼎。 傳聞我的和親對象是個殘疾皇子舰蟆,可洞房花燭夜當晚...
    茶點故事閱讀 44,843評論 2 354

推薦閱讀更多精彩內(nèi)容