jmeter中在測試計划下添加一個cookie管理器就能實現多個接口對於cookie的驗證,但是只能作用於一個線程,如果把登錄和其余接口用多個線程分開,非登錄接口的request headers中顯示no cookie,從而導致腳本報錯!
一、JMeter多線程之間共享cookiedemo截圖:
二、說明:
1.修改bin目錄下的jmeter.properties文件,CookieManager.save.cookies為true,需要重啟,如下圖:
2.setUp Thread Group線程組下需要添加HTTP Cookie 管理器這個組件,如下圖:
3.利用Bean Shell后置處理程序和函數${__setProperty(COOKIE_JSESSIONID_GLOBAL, ${COOKIE_JSESSIONID},)};將登錄獲取的COOKIE_JSESSIONID值設置為全局變量,全局變量名稱為COOKIE_JSESSIONID_GLOBAL,如下圖:(使用COOKIE_para(para代表cookie中參數名,如cookie中寫JSESSIONID=sju1d3e3ad322,則用COOKIE_JSESSIONID來取JSESSIONID的值)來取出cookie信息。)
或者通過正則表達式取出登錄后的cookie值,再使用Bean Shell后置處理程序和函數${__setProperty(COOKIE_JSESSIONID_GLOBAL, ${cookie},)}(有多個cookie值的情況)
4.在線程組下添加HTTP Cookie 管理器,利用函數${__P(COOKIE_JSESSIONID_GLOBAL)}從全局變量COOKIE_JSESSIONID_GLOBAL中獲取cookie值存放到當前cookie管理器中,如下圖:
備注:域、路徑需要填上,尤其是域;因為Jmeter現版本默認不支持跨域的請求,不填的話設置的Cookie不會被帶上。
方法二:
- 創建一個登錄的http請求,然后執行,看返回的cookie是在response的哪里!我這邊數據返回在response headers里,有些會用token,會在response body里


- 在登錄的http請求下創建
后置處理器--正則表達式提取器
或者后置處理器--邊界值提取器
都可以,提取headers中的cookie信息
正則表達式提取器和邊界值提取器的使用方法百度搜索一大把!

- 在登錄http請求下創建一個
后置處理器--BeanShell PostProcessor
,把提起到的cookie值改成全局變量
格式:${__setProperty(轉換成全局變量后的引用名,${正則表達式定義的變量名},)};

${__setProperty(APHPSESSID,${PHPSESSID},)}; ${__setProperty(Alanguage,${language},)}; ${__setProperty(A1_product,${1_product},)}; ${__setProperty(ApageSize,${pageSize},)}; log.info("----------------------APHPSESSID="+${__P(APHPSESSID,)}+"--------------------");
- 再添加一個cookie管理器,這個cookie管理器和上面的是不同的,這個里面是要放裝換成全局變量后的cookie引用名
注意:請看清楚層級結構,第二個cookie管理器所在的位子,請不要放在線程組內了!!!
關於第一個cookie的解釋:我的登錄中有重定向請求,第一個子請求就產生了cookie,后面兩個子請求依賴於第一個子請求的cookie,所以我創建了兩個cookie管理器!
登錄線程下面又創建的一個cookie管理器,按照jmeter中的執行順序,下面的線程只會用第二個cookie管理器中的數據

- 第二個cookie管理器中的寫法
名稱:cookie的key
值: 引用 ·{__setProperty(,,)};
中定義的全局變量名
格式:${__P(全局變量名,)}
域:我的理解,要測試的接口的域名或者ip(填寫當前線程中的域,而不是登錄請求的域)
路徑: 就用/
就好了
- 結果展現
下個線程也請求成功了
