jmeter學習指南之管理Cookies
今日文章主要內容介紹
一、使用Jmeter cookie的業務背景
二、解讀Jmeter官方文件中的cookie管理器
三、執行緒組內部傳遞 cookies
四、跨執行緒組傳遞cookies
1 使用Jmeter cookie的業務背景
一、業務背景:
我們在工作中經常會遇到如下壓測場景:
登入後對查詢、充值、購買...等業務進行壓測;
這種場景很熟悉吧?很多業務操作是要依賴登入的,但是一個使用者在每次進行登入時通常會生成cookie,而且在接下來的操作中都必須攜帶上它的cookie,伺服器對後續的每次請求都會進行校驗。
首先想到的是從登入響應中用正規表示式提取出cookies,然後在其它操作中呼叫不就行了嗎?
不行!
因為cookies並不是在登入的響應結果中生成的,而是在response header中攜帶的,所以不能用正規表示式提取。
那用什麼來獲取呢?我們先來看一下jmeter官方文件中怎麼說的吧:
2 解讀Jmeter官方文件
Jmeter官方文件是這樣寫的:
下面我簡單翻譯一下:
cookie管理器元件有兩大功能:
-
首先,它能夠像web瀏覽器一樣儲存和傳送cookies。
-
如果你有一個HTTP請求和響應包含一個cookie,cookie管理器會自動儲存該cookie,並能夠在該特定網站上接下來的所有請求中使用該 cookie。
-
JMeter的每個執行緒都有自己的“cookie儲存區”。所以,如果你正在測試一個使用cookie來儲存會話資訊的網站,那麼每個JMeter執行緒都有自己的會話。請注意,這種cookies不會在cookie管理器中展示出來,但可以在“檢視結果樹”中看到它們。
-
JMeter會檢查收到的cookies是否對URL有效。 這意味著跨域的cookie不能被儲存 。如果你有竊聽行為,或者想要 儲存跨域cookies ,需要在jmeter.poperties中設定:“ CookieManager.check.cookies = false”。
-
接收到的Cookies可以儲存為JMeter的執行緒變數。如果要把 cookies儲存為變數,需要設定:
“ CookieManager.save.cookies =true”。
-
此外,預設情況下jmeter中的cookies在儲存時名字字首為“ COOKIE_ ”,這是為了避免因區域性變數重名引起的異常情況。如果不想用這個字首,需要定義屬性“CookieManager.name.prefix = ”(一個或多個空格)。如果使用了字首,則一個名稱為TEST的cookie的值可以透過$ {COOKIE_TEST}獲取 。
-
其次,你可以手動新增一個cookie到cookie管理器。但是,如果你這樣做,這個cookie將被所有JMeter的執行緒共享。 注意,這樣的cookies建立後生命週期會很長。
-
空值的cookies預設被忽略掉。這可以透過設定JMeter的屬性進行更改:CookieManager.delete_null_cookies =false。請注意,這也適用手工定義的cookies-任何此類cookies在更新後會從cookie manager中移除。
-
還需要注意的是cookie名稱必須是唯一的-如果一個cookie的名稱與已有cookie同名,它將取代原有的cookie。
-
如果在一個sampler作用域中有多個cookie manager,目前沒有辦法去指定使用某一個。並且,一個cookie manager中儲存的cookie不能被其它的cookie manager使用,所以要慎用多個cookie manger。
有沒有覺得很難理解呢?
好訊息!諮詢QQ:2083503238,諮詢微信:qiangfans
小強效能測試班3月3號開課,錯過要再等一年, 課程大綱與介紹點選文末【閱讀原文】
所有學員享受免費、不限次數、無限重學的權利直到學會為止,拒絕限制次數、繳納重學費的噁心規矩。
公眾號內回覆6獲取詳情(不是本文回覆)
沒關係, 下面我們來總結一下:
Cookie Manager主要有兩大作用:
1、自動管理cookie:
-
就像瀏覽器一樣能夠自動儲存和傳送Cookie,如果一個http請求的響應中包含Cookie,那麼Cookie Manager就會自動地儲存這些Cookie並在所有後來傳送到該站點的請求中使用這些Cookie的值。每個執行緒都自己儲存cookie的區域。
-
在cookie manager中看不到自動儲存的cookie,我們 可以在察看結果樹View Results Tree中看到被髮送請求的Cookie Data 。
-
要把Cookies儲存到執行緒變數中,要定義屬性"CookieManager.save.cookies=true"。執行緒變數名為COOKIE_ + Cookie名。屬性CookieManager.name.prefix= 可以用來修改預設的COOKIE_的值。
2、手動管理Cookie:
-
手動新增Cookie到Cookie Manager,這些Cookie的值會被所有執行緒共享。
-
比較簡單的做法是使用firefox的firebug匯出cookies ,然後再匯入到jmeter的cookie manager中,當然,這裡也可以透過Add按鈕手動新增cookies。
Tips:
1、需要注意的是 域、路徑必須填上,尤其是域 ;因為Jmeter現版本預設不支援跨域的請求,不填的話設定的Cookie不會被帶上。
2、在需要取Cookie的執行緒裡新增一個Http Cookie管理器, 可以預設為空,但是一定要新增,否則是不會儲存cookie變數的
3、這樣在同一個執行緒(組)內其它操作元件都是可以直接透過${COOKIE_xxxx}來獲取
4、目前jmeter在一個sampler中不能同時有多個cookie manager
5、想要跨域儲存cookies,需要設定 CookieManager.check.cookies =false
3 執行緒組內部傳遞 cookies
瞭解了cookie manager,現在我們回到業務場景中來:
如何實現對查詢介面(必須先登入,攜帶cookie)進行壓測?
這是一個很簡單的場景,但是如果直接按照上面這樣的方式去執行,你會發現結果會報錯,因為jmeter預設不會儲存cookies,需要加上cookie manager,如下所示:
如上, 加一個空的cookie manager即可以自動儲存cookie,並且能夠在同一個執行緒組之間傳遞cookie ,此時再次執行指令碼就透過了。
但是我們並不需要同時對登入操作進行壓測,也就是說,我只需要用一個使用者登入一次,然後迴圈進行其它業務操作,這時候需要把登入和查詢操作分別放在兩個執行緒組中,但是jmeter官方文件中說cookies不能跨域傳遞的,也就是不能線上程組中 共享,那要怎麼實現呢?
4 跨執行緒組傳遞 cookies
官方文件中說cookie變數是執行緒內有效,執行緒外無效,但是實際測試 同一個執行緒組的其它執行緒是可以直接訪問的 。
如果是跨執行緒組的情況,不能直接訪問,可以用其它的方式來進行cookie變數的共享,試驗了幾種方式,下面這種方式最簡單:
透過JMeterUtils.setProperty和JMeterUtils.getPropDefault方法實現
1、 在生成cookie的請求中新增beanshell postprocessor 後置處理器 ,並新增如下指令碼,把cookie儲存在Jmeter屬性引數中:
import org.apache.jmeter.util.JMeterUtils;
JMeterUtils.setProperty(“cookie_name”, “cookie_value”);
其中cookie_name和cookie_value分別換成你對應的cookie名稱(不帶COOKIE_字首)和cookie值
2、在需要使用cookie的另一個執行緒組的請求中新增beanshell preprocessor前置處理器
,並新增如下指令碼,取出cookie的值,並存入執行緒變數中:
import org.apache.jmeter.util.JMeterUtils;
String value = JMeterUtils.getPropDefault(“cookie_name”);
Vars.put(“cookie_name”,value);
這裡的cookie_name和前面設定的名稱一樣。
然後在該執行緒組中就可以使用${cookie_name}來獲取cookie的值,也就是實現了跨執行緒組傳遞cookie。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69942496/viewspace-2654075/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- jmeter學習指南之關聯JMeter
- jmeter學習指南之聚合報告JMeter
- jmeter學習指南之詳解jmeter執行緒組JMeter執行緒
- jmeter學習指南之Beanshell Sampler 常用方法JMeterBean
- jmeter學習指南之常用函式的使用JMeter函式
- jmeter學習指南之操作 mysql 資料庫JMeterMySql資料庫
- jmeter學習指南之OOM和監聽器使用JMeterOOM
- jmeter學習指南之結果分析-圖形圖表JMeter
- jmeter學習指南之16個邏輯控制器JMeter
- jmeter學習指南之響應斷言和beanshell斷言JMeterBean
- jmeter學習指南之深入分析跨域傳遞cookieJMeter跨域Cookie
- jmeter學習指南之非GUI命令列執行詳解JMeterGUI命令列
- jmeter學習指南之原始碼匯入 IntelliJ IDEAJMeter原始碼IntelliJIdea
- jmeter學習指南之引數化CSV Data Set ConfigJMeter
- jmeter學習指南之Boundary Extractor和正規表示式提取器JMeter
- jmeter學習指南之Beanshell 呼叫 java 程式碼的三種方式JMeterBeanJava
- jmeter學習指南之察看結果樹,你知道都有哪些功能嗎JMeter
- jmeter學習指南之最佳化指令碼JMeter指令碼
- jmeter通過cookies來登入JMeterCookie
- jmeter學習指南之分散式測試的來龍去脈JMeter分散式
- JMeter學習資料JMeter
- JMeter學習筆記——認識JMeter(1)JMeter筆記
- jmeter學習指南之HTTP請求中自動重定向和跟隨重定向的區別JMeterHTTP
- JMeter學習筆記--詳解JMeter定時器JMeter筆記定時器
- JMeter學習的相關網站JMeter網站
- CUDA學習指南
- PHP學習指南PHP
- Swoole 學習指南
- oracle學習指南Oracle
- Vim學習指南
- redis 學習指南Redis
- 《JAVA學習指南》學習筆記Java筆記
- jMeter Transaction Controller 學習筆記JMeterController筆記
- web前端學習指南Web前端
- Linux系統學習之檔案管理Linux
- Linux系統學習之網路管理Linux
- CISSP學習筆記之安全管理基礎筆記
- 《Shell指令碼學習指南》學習筆記指令碼筆記