本文轉自https://www.cnblogs.com/yiyaxuan/p/12672281.html
需求前提:
我想壓測獲取產品列表這個接口,但是這個接口依附於sessionid,所以我必須先登錄成功,拿到登錄接口,但是我只想實現壓測獲取產品列表這個接口,所以登錄沒必要登錄多次,只需要登錄一次就行。
所以Jmeter如何設置登錄接口只調用一次開始實施。
解決方法:
方法一.用同一個線程組,用僅一次控制器
是用同一線程組實現的,線程數那里只能設置次數=1,循環次數設置為n次,滿足登錄只請求1次,獲取產品列表接口可以請求n次。
缺點就是線程數那里只能設置1次。
方法二. 跨線程去做,把登錄接口單獨放在setUp線程組里面,然后向下一個線程組Thread group傳參
沒缺點!推薦使用方法二,雖然剛開始實施花費了將近2小時
第一步用寫死的session去調試,調試成功,再去做跨線程
方法一. 用僅一次控制器
實現思路:
1.登錄接口放在僅一次控制器里面
添加邊界提取器或者正則提取器,還有調試后置處理程序即debug PostProcessor,把Cookie的value:SESSIONID=XXXXXX
然后這個Cookie放在headers里面
把XXXX從登錄接口的響應結果里面提取出來,賦給某個變量A
2.獲取產品列表的接口
headers里面添加
Cookie ${變量A}
a.cookie放在cookie管理器里面,不放在headers
b.cookie放在header管理里面,放在headers
方法二. 可以把登錄接口單獨放在一個線程組里面,然后向下傳參
實現思路:
1.新增setup線程組,添加登錄接口
登錄接口下面:
-》添加邊界提取器
-》添加信息頭管理器
-》添加Beanshell 后置處理程序即BeanShell PostProcessor,使用setProperty的函數,然后在下個線程里的header里增加這個sessionid:
${__setProperty(new_sessionid,${sessionid},false)}
-》添加調試后置處理即debug PostProcessor,用來看登錄接口是否取值成功
2. 新增線程組,放獲取產品列表的接口
產品列表接口下面:
-》添加信息頭
Cookie SESSIONID=${__P(new_sessionid)}
另外
-》添加Beanshell 后置處理程序即BeanShell PostProcessor,使用setProperty的函數,然后在下個線程里的header里增加這個sessionid:
${__setProperty(new_sessionid,${sessionid},false)}
BeanShell PostProcessor也可以用beanshell 斷言來做,即添加benshell斷言將正則截取token和用戶userid保存下,,效果是一樣的!
${__setProperty(new_token,${token},false)}
${__setProperty(new_uid,${uid},false)}
${__P(new_token)}
${__P(new_sessionid)}
cookie參數放在消息頭里面