轉自 https://blog.csdn.net/five3/article/details/53842283
jmeter是測試過程中會被用到的一個測試工具,我們即可用來進行壓力的壓測,也可以用來對接口進行功能檢查,不僅僅是HTTP的結果,還有DB、TCP、FTP等等。當然它還有很多其它有用的功能,比如代理服務器、鏡像服務器、telnet等等。今天主要說的是它的Cookie管理器,因為在使用這個功能的時候踩過了坑,也沒有找到其他梳理過。
在Jmeter里對Cookie進行存取時需要用到HTTP Cookie管理器組件,具體位置在配置元件列表下,見下圖:
通常我們都是在一個線程的Sampler里添加,因為每一個線程都應該有一個自己的Cookie管理器,添加成功后Jmeter的 Cookie 管理器的界面如下:
上面的圖中主要存Cookie的操作,我們直接添加了一個JSESSIONID的cookie,具體的值是從一個變量中取出的;需要注意的是域、路徑需要填上,尤其是域;因為Jmeter現版本默認不支持跨域的請求,不填的話設置的Cookie不會被帶上。
接下來就是取Cookie的操作,通常取的Cookie都是從Response Header里取的,取的目的一般都是給另一個不同的線程來用,因為如果是同一個線程的不同次迭代的情況那么Jmeter會自動帶上,無需我們設置。那取去cookie的步驟有哪些呢?
- 首先需要修改jmeter.properties文件
- 找到CookieManager.save.cookies=true並設置為true
- 保存配置文件重啟jmeter
- 在需要取Cookie的線程里添加一個Http Cookie管理器
- 可以默認為空,但是一定要添加,否則是不會存儲cookie變量的
經過上述幾個步驟的操作,我們執行線程之后,獲取到的cookie就會被保存在線程變量里,具體的變量名格式為COOKIE_xxxx,其中xxxx為具體的實際cookie名;這樣在同一個線程內其它操作組件都是可以直接通過${COOKIE_xxxx}來獲取的
提示:
文檔中說cookie變量是線程內有效,線程外無效,但是實際測試同一個線程組的其它線程是可以直接訪問的
如果是跨線程組的情況,我們還可以有其它的方式來進行cookie變量的共享,最方便的是下面這種方式
import org.apache.jmeter.util.JMeterUtils; String value = JMeterUtils.getPropDefault("name",""); JMeterUtils.setProperty("name", "value");
另一種是下面的方式,
if (bsh.shared.myObj == void){ // not yet defined, so create it: myObj = new AnyObject(); } bsh.shared.myObj.process();
因為直接就可以取到也就沒試了,原內容出自官網文檔,http://jmeter.apache.org/usermanual/best-practices.html,而我踩的坑就是在取cookie的時候沒有添加一個空的http cookie管理器,以及嘗試了其它一些無效的變量共享的方式。