今日文章主要內(nèi)容介紹
目前累計服務(wù)客戶上1000家,積累了豐富的產(chǎn)品開發(fā)及服務(wù)經(jīng)驗。以網(wǎng)站設(shè)計水平和技術(shù)實力,樹立企業(yè)形象,為客戶提供網(wǎng)站建設(shè)、成都網(wǎng)站制作、網(wǎng)站策劃、網(wǎng)頁設(shè)計、網(wǎng)絡(luò)營銷、VI設(shè)計、網(wǎng)站改版、漏洞修補(bǔ)等服務(wù)。成都創(chuàng)新互聯(lián)公司始終以務(wù)實、誠信為根本,不斷創(chuàng)新和提高建站品質(zhì),通過對領(lǐng)先技術(shù)的掌握、對創(chuàng)意設(shè)計的研究、對客戶形象的視覺傳遞、對應(yīng)用系統(tǒng)的結(jié)合,為客戶提供更好的一站式互聯(lián)網(wǎng)解決方案,攜手廣大客戶,共同發(fā)展進(jìn)步。
一、使用Jmeter cookie的業(yè)務(wù)背景
二、解讀Jmeter官方文檔中的cookie管理器
三、線程組內(nèi)部傳遞cookies
四、跨線程組傳遞cookies
jmeter視頻:https://edu.51cto.com/course/14305.html
1使用Jmeter cookie的業(yè)務(wù)背景
一、業(yè)務(wù)背景:
我們在工作中經(jīng)常會遇到如下壓測場景:
登錄后對查詢、充值、購買...等業(yè)務(wù)進(jìn)行壓測;
這種場景很熟悉吧?很多業(yè)務(wù)操作是要依賴登錄的,但是一個用戶在每次進(jìn)行登錄時通常會生成cookie,而且在接下來的操作中都必須攜帶上它的cookie,服務(wù)器對后續(xù)的每次請求都會進(jìn)行校驗。
首先想到的是從登錄響應(yīng)中用正則表達(dá)式提取出cookies,然后在其它操作中調(diào)用不就行了嗎?
不行!
因為cookies并不是在登錄的響應(yīng)結(jié)果中生成的,而是在response header中攜帶的,所以不能用正則表達(dá)式提取。
那用什么來獲取呢?我們先來看一下jmeter官方文檔中怎么說的吧:
2解讀Jmeter官方文檔
Jmeter官方文檔是這樣寫的:
下面我簡單翻譯一下:
cookie管理器元件有兩大功能:
首先,它能夠像web瀏覽器一樣存儲和發(fā)送cookies。
如果你有一個HTTP請求和響應(yīng)包含一個cookie,cookie管理器會自動存儲該cookie,并能夠在該特定網(wǎng)站上接下來的所有請求中使用該 cookie。
JMeter的每個線程都有自己的“cookie存儲區(qū)”。所以,如果你正在測試一個使用cookie來存儲會話信息的網(wǎng)站,那么每個JMeter線程都有自己的會話。請注意,這種cookies不會在cookie管理器中展示出來,但可以在“查看結(jié)果樹”中看到它們。
JMeter會檢查收到的cookies是否對URL有效。這意味著跨域的cookie不能被存儲。如果你有竊聽行為,或者想要存儲跨域cookies,需要在jmeter.poperties中設(shè)置:“ CookieManager.check.cookies = false”。
接收到的Cookies可以存儲為JMeter的線程變量。如果要把 cookies保存為變量,需要設(shè)置:
“ CookieManager.save.cookies =true”。
此外,默認(rèn)情況下jmeter中的cookies在存儲時名字前綴為“ COOKIE_ ”,這是為了避免因局部變量重名引起的異常情況。如果不想用這個前綴,需要定義屬性“CookieManager.name.prefix = ”(一個或多個空格)。如果使用了前綴,則一個名稱為TEST的cookie的值可以通過$ {COOKIE_TEST}獲取 。
其次,你可以手動添加一個cookie到cookie管理器。但是,如果你這樣做,這個cookie將被所有JMeter的線程共享。注意,這樣的cookies創(chuàng)建后生命周期會很長。
空值的cookies默認(rèn)被忽略掉。這可以通過設(shè)置JMeter的屬性進(jìn)行更改:CookieManager.delete_null_cookies =false。請注意,這也適用手工定義的cookies-任何此類cookies在更新后會從cookie manager中移除。
還需要注意的是cookie名稱必須是唯一的-如果一個cookie的名稱與已有cookie同名,它將取代原有的cookie。
如果在一個sampler作用域中有多個cookie manager,目前沒有辦法去指定使用某一個。并且,一個cookie manager中保存的cookie不能被其它的cookie manager使用,所以要慎用多個cookie manger。
有沒有覺得很難理解呢?
沒關(guān)系,下面我們來總結(jié)一下:
Cookie Manager主要有兩大作用:
1、自動管理cookie:
就像瀏覽器一樣能夠自動存儲和發(fā)送Cookie,如果一個http請求的響應(yīng)中包含Cookie,那么Cookie Manager就會自動地保存這些Cookie并在所有后來發(fā)送到該站點的請求中使用這些Cookie的值。每個線程都自己存儲cookie的區(qū)域。
在cookie manager中看不到自動保存的cookie,我們可以在察看結(jié)果樹View Results Tree中看到被發(fā)送請求的Cookie Data。
要把Cookies保存到線程變量中,要定義屬性"CookieManager.save.cookies=true"。線程變量名為COOKIE_ + Cookie名。屬性CookieManager.name.prefix= 可以用來修改默認(rèn)的COOKIE_的值。
2、手動管理Cookie:
手動添加Cookie到Cookie Manager,這些Cookie的值會被所有線程共享。
比較簡單的做法是使用firefox的firebug導(dǎo)出cookies ,然后再導(dǎo)入到j(luò)meter的cookie manager中,當(dāng)然,這里也可以通過Add按鈕手動添加cookies。
Tips:
1、需要注意的是域、路徑必須填上,尤其是域;因為Jmeter現(xiàn)版本默認(rèn)不支持跨域的請求,不填的話設(shè)置的Cookie不會被帶上。
2、在需要取Cookie的線程里添加一個Http Cookie管理器,可以默認(rèn)為空,但是一定要添加,否則是不會存儲cookie變量的
3、這樣在同一個線程(組)內(nèi)其它操作組件都是可以直接通過${COOKIE_xxxx}來獲取
4、目前jmeter在一個sampler中不能同時有多個cookie manager
5、想要跨域存儲cookies,需要設(shè)置 CookieManager.check.cookies =false
3線程組內(nèi)部傳遞cookies
了解了cookie manager,現(xiàn)在我們回到業(yè)務(wù)場景中來:
如何實現(xiàn)對查詢接口(必須先登錄,攜帶cookie)進(jìn)行壓測?
這是一個很簡單的場景,但是如果直接按照上面這樣的方式去執(zhí)行,你會發(fā)現(xiàn)結(jié)果會報錯,因為jmeter默認(rèn)不會保存cookies,需要加上cookie manager,如下所示:
如上,加一個空的cookie manager即可以自動保存cookie,并且能夠在同一個線程組之間傳遞cookie,此時再次運行腳本就通過了。
但是我們并不需要同時對登錄操作進(jìn)行壓測,也就是說,我只需要用一個用戶登錄一次,然后循環(huán)進(jìn)行其它業(yè)務(wù)操作,這時候需要把登錄和查詢操作分別放在兩個線程組中,但是jmeter官方文檔中說cookies不能跨域傳遞的,也就是不能在線程組中共享,那要怎么實現(xiàn)呢?
4 跨線程組傳遞cookies
官方文檔中說cookie變量是線程內(nèi)有效,線程外無效,但是實際測試同一個線程組的其它線程是可以直接訪問的。
如果是跨線程組的情況,不能直接訪問,可以用其它的方式來進(jìn)行cookie變量的共享,試驗了幾種方式,下面這種方式最簡單:
通過JMeterUtils.setProperty和JMeterUtils.getPropDefault方法實現(xiàn)
1、在生成cookie的請求中添加beanshell postprocessor后置處理器,并添加如下腳本,把cookie保存在Jmeter屬性參數(shù)中:
import org.apache.jmeter.util.JMeterUtils;
JMeterUtils.setProperty(“cookie_name”, “cookie_value”);
其中cookie_name和cookie_value分別換成你對應(yīng)的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和前面設(shè)置的名稱一樣。
然后在該線程組中就可以使用${cookie_name}來獲取cookie的值,也就是實現(xiàn)了跨線程組傳遞cookie。
新聞標(biāo)題:jmeter學(xué)習(xí)指南之管理Cookies
URL標(biāo)題:http://aaarwkj.com/article40/peijeo.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站內(nèi)鏈、網(wǎng)站導(dǎo)航、網(wǎng)站設(shè)計公司、電子商務(wù)、App設(shè)計、靜態(tài)網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)