關(guān)于Jmeter接口測試實(shí)戰(zhàn)-Cookies
場景
接口測試時常都需要登錄,請求方式(post),登錄常用的方法有通過獲取token,獲取session,獲取cookie,等等. 這幾種都有一個共同的特點(diǎn),有效期(expires).
Session是建立連接后session有效,斷開連接session失效, token有效期是服務(wù)端控制, cookie是用戶瀏覽訪問時被創(chuàng)建的,由服務(wù)器發(fā)送給客戶端使用,有效期長短和服務(wù)器相關(guān),不同的web服務(wù)器默認(rèn)值略有差異,在一個臨時會話周期內(nèi),cookie一般不會被持久化,也就是關(guān)閉瀏覽器或者退出登錄cookie失效.
如何獲取token, 我們之前的推文(Jmeter接口測試-正則表達(dá)式)里已經(jīng)介紹過,今天來講cookie,使用cookie既然有有效期,那退出或者其他情況使cookie失效了,在接口測試腳本中要一直去修改為最新的cookie,不是很惱人的一件事情嗎? 有沒有辦法一勞永逸呢,答案是肯定的.
實(shí)戰(zhàn)
還是從實(shí)例入手, 首先我們找一個已經(jīng)跑通的接口(原先cookie獲取是在自定義變量里寫死cookie值, 然后再傳給cookie manager), 在結(jié)果樹的請求->request Body中查找信息
從圖中可以看出, cookie data有幾個信息組成
username
SESSION
SERVERID
那這些信息去哪里獲取呢?
使用chrome的開發(fā)者工具查看, 在application標(biāo)簽下很容易就能找到上述信息
有了以上這些信息,那接下來的事情就好辦了, 兩種方式添加
- 1. http cookie manager(推薦)
- 2. http 信息管理器
在cookie 管理中添加需要存儲的cookie
然后把原先用自定義變量里的cookie值刪除(寫死的cookie值), 用這個方法去獲取cookie給同域名下的其他API使用, 即可非常輕松的執(zhí)行需要登錄的API, 細(xì)心的同學(xué)會發(fā)現(xiàn) cookie data里還有username和SESSION 怎么沒用到, 我這個實(shí)例中這兩個不用也可以正常執(zhí)行, 如果有需要自行加上即可, 至此有趣的cookie可一勞永逸的使用, 不必再為cookie過期而煩惱了, 不知道你學(xué)會了沒有, 在實(shí)際測試場景中,類似這樣的問題時常困擾著我們, 如何巧妙的使用方法去解決(偷懶法則), 學(xué)會偷懶的技術(shù)工程師才是一個合格的工程師.
一、jmeter的http cookies管理器使用
作用:
1 發(fā)送請求,經(jīng)常要校驗(yàn)cookies信息
2 錄制的時使用的cookie管理器,只能在指定的域下面使用,如果服務(wù)器地址切換,發(fā)現(xiàn)發(fā)送請求時,就會出現(xiàn)no cookies
使用方法:
1 使用badboy錄制的腳本都帶了cookie管理器
2 使用jmeter的代理錄制腳本,提前設(shè)置好cookie管理器再進(jìn)行錄制
3 自己設(shè)置cookie管理器
前兩種的cookie管理器都有域名的限制,有時需要自己進(jìn)行修改
我一般使用代理錄制腳本,自己添加cookie管理器的方式進(jìn)行
步驟:
1 錄制腳本
2 修改cookie管理器,如果沒有域名切換的話,可以不用自己配置的
1)使用開發(fā)者工具,或者firefox的firebug插件獲取cookie信息。建議使用firebug這個配置和jmeter幾乎一樣。據(jù)說可以直接導(dǎo)入到j(luò)meter,但是我沒有導(dǎo)入成功,就自己配置了。
下面是開發(fā)者工具所看到的cookie信息
并不是所有的都需要配置發(fā)送到服務(wù)器。我的只配置了sf_session就ok了
域就是服務(wù)器的ip
這樣后面發(fā)送的所有請求都會自帶上這個cookie信息。
這里面的cookie可以通過正則表達(dá)式進(jìn)行提起,設(shè)置成變量
二、jmeter的http cookies管理器使用
Cookie管理器,會默認(rèn)把服務(wù)端返回的cookie數(shù)據(jù)記錄下來
步驟:
1 先添加http cookie管理器,這時jmeter就會自動記錄下服務(wù)端返回的cookie信息
由于數(shù)據(jù)是保存在cookie里面,沒法通過正則表達(dá)式去提取
2 其實(shí)這個時候,jmeter發(fā)送請求,會默認(rèn)把cookie信息帶上,能解決大部分問題
3 但是我們這時又想用到cookie里面的某一個值的時候,就需要修改jmeter的設(shè)置了
在jmeter的安裝bin路徑下,
修改:jmeter.properties
#CookieManager behaviour - should Cookies be stored as #variables? #Default is false CookieManager.save.cookies=true //這個把前面的#去掉,
4 調(diào)用cookie里面某一個值
${COOKIE_某一個值名稱}
如上面的 sf_session就可以直接用${COOKIE_sf_session}調(diào)用。和自定義變量完全一樣
注意點(diǎn):必須是請求服務(wù)端以后,cookie管理器里面才會有數(shù)據(jù),一般是登陸時服務(wù)端返回會帶回cookie。之前cookie會一直為空
下面是我demo的截圖
提取成功圖片:
- 前置bs沒有cookie值
- 后置的bs有了cookie值
三、jmeter直接用cookie管理器保存登錄后的cookie信息
最近遇到的問題是,登錄需要驗(yàn)證碼,驗(yàn)證碼每次都變且無規(guī)律,所以錄制登錄接口就沒辦法錄制了。
于是就想著能不能直接在cookie管理器中保存我登錄后的信息,其他接口直接調(diào)用這個參數(shù)呢?經(jīng)過試驗(yàn),有的系統(tǒng)可以,有的不可以,不可以的還沒找到原因和解決辦法,先寫可以使用的步驟吧。
1、打開火狐瀏覽器,登錄要保存cookie信息的網(wǎng)頁并登錄成功;
2、打開調(diào)試模式,切換到存儲,打開cookie,然后右側(cè)紅框區(qū)域內(nèi)的所有數(shù)據(jù)就是cookie信息;
3、把這個表里的所有數(shù)據(jù)的名稱、域名、路徑、值都一一寫到cookie管理器里,如下圖jmeter的這個位置
4、然后,在jmeter中,添加http請求,把cookie管理器中的這些參數(shù),都當(dāng)成參數(shù)傳過去,假如cookie管理器中只有一個參數(shù)JSESSIONID,寫接口時,就需要把JSESSIONID當(dāng)成一個參數(shù)傳過去,如下圖
5、這樣就可以不需要登錄,直接調(diào)用登錄的cookie信息了
四、個人自己操作實(shí)例
1、谷歌瀏覽器打開調(diào)試,然后提交登錄,獲取session
2、添加HTTP Cookie管理器,把session添加進(jìn)去:
3、添加響應(yīng)斷言
4、執(zhí)行,返回custname_0表示成功,custname_2表示失敗
新增客商有規(guī)則需要校驗(yàn),導(dǎo)致提交重復(fù)信息會失敗,只有第一次才會成功
注意:如果是在同一個線程組,根本不需要添加兩個cookies的參數(shù)值,只需要添加一個無參數(shù)值的空的http cookie管理器,去掉下圖的兩個SESSIONID變量值
下面是增加權(quán)限的截圖:
總結(jié)
以上為個人經(jīng)驗(yàn),希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
java 數(shù)據(jù)結(jié)構(gòu)之棧與隊列
這篇文章主要介紹了java 數(shù)據(jù)結(jié)構(gòu)之棧與隊列的相關(guān)資料,這里對java中的棧和隊列都做出實(shí)現(xiàn)實(shí)例來幫助大家理解學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu),需要的朋友可以參考下2017-07-07實(shí)例講解Java中動態(tài)代理和反射機(jī)制
在本篇文章里小編給各位分享了關(guān)于Java中動態(tài)代理和反射機(jī)制的相關(guān)知識點(diǎn)內(nèi)容,有需要的朋友們學(xué)習(xí)下。2019-01-01Java8通過CompletableFuture實(shí)現(xiàn)異步回調(diào)
這篇文章主要介紹了Java8通過CompletableFuture實(shí)現(xiàn)異步回調(diào),CompletableFuture是Java?8?中新增的一個類,它是對Future接口的擴(kuò)展,下文關(guān)于其更多相關(guān)詳細(xì)介紹需要的小伙伴可以參考一下2022-04-04Java實(shí)現(xiàn)的Windows資源管理器實(shí)例
這篇文章主要介紹了Java實(shí)現(xiàn)的Windows資源管理器,實(shí)例分析了基于java實(shí)現(xiàn)windows資源管理器的相關(guān)技巧,具有一定參考借鑒價值,需要的朋友可以參考下2015-07-07Java中的Unsafe在安全領(lǐng)域的使用總結(jié)和復(fù)現(xiàn)(實(shí)例詳解)
unsafe里面有很多好用的方法,比如allocateInstance可以直接創(chuàng)建實(shí)例對象,defineAnonymousClass可以創(chuàng)建一個VM匿名類(VM?Anonymous?Class),以及直接從內(nèi)存級別修改對象的值。這篇文章主要介紹了Java中的Unsafe在安全領(lǐng)域的一些應(yīng)用總結(jié)和復(fù)現(xiàn),需要的朋友可以參考下2022-03-03Mybatis攔截器注解@Intercepts與@Signature注解使用
本文主要介紹了Mybatis攔截器注解@Intercepts與@Signature注解使用,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2024-07-07Springboot文件上傳功能的實(shí)現(xiàn)
這篇文章主要介紹了SpringBoot文件上傳功能的實(shí)現(xiàn),文中通過代碼示例介紹的非常詳細(xì),具有一定的參考學(xué)習(xí)價值,需要的朋友們可以參考閱讀2023-04-04詳解如何在低版本的Spring中快速實(shí)現(xiàn)類似自動配置的功能
這篇文章主要介紹了詳解如何在低版本的Spring中快速實(shí)現(xiàn)類似自動配置的功能,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2019-05-05