最近在學Jmeter,遇到需要登錄之后才能進行下一步操作的場景,網上查了各位大神的資料,東拼西湊總算是做好滿足需求了,寫一下經過和步驟吧。
一、正常調用
按正常流程添加線程組、HTTP請求(登錄和添加)、HTTP請求默認值、HTTP信息頭管理器等,然后跑看看能不能通過。

添加失敗,試着在同一個線程組下添加HTTP Cookie 管理器,看看能不能成功:

通過了。但是現在線程數是和循環次數都是1,如果循環次數是1000次,那也登錄接口也要調用1000次,影響性能測試結果,這個時候可以把登錄單獨放到另一個線程組中,然后在添加的接口中調用登錄的Cookie。

報401(鑒權失敗)了,沒法調用上一個線程組登錄的Cookie。下一步就看看怎么獲取上一個線程組的返回數據,供別的線程組調用。
二、提取登錄接口返回的cookie。
1、在登錄的HTTP請求下添加正則表達式提取器

2、然后通過頁面調用登錄的接口,拿到登陸后獲取的Cookie和添加需要用到的cookie值
登陸后獲取的Cookie:

添加需要用到的cookie值:

3、按下圖設置好正則表達式提取器

填寫說明:
要檢查的響應字段:現在是需要從信息頭中獲取數據,所以現在選中“信息頭”
引用名稱:下一個請求要引用的參數名稱,如填寫logincookie,則可用${logincookie}引用它。
正則表達式:
():括起來的部分就是要提取的。
模板:用$$引用起來,如果在正則表達式中有多個正則表達式,則可以是$2$$3$等等,表示解析到的第幾個值給title。如:$1$表示解析到的第1個值
匹配數字:0代表隨機取值,1代表全部取值,通常情況下填0
缺省值:如果參數沒有取得到值,那默認給一個值讓它取。
這個時候就把正則表達式提取器設置好了,但是經測試,不能跨線程組調用參數,所以還需要在登錄HTTP請求下添加BeanShell PostProcessor關於這個組件的介紹可以自行查一下
三、設置跨線程組調用參數
1、在登錄HTTP請求下添加BeanShell PostProcessor

2、設置參數如下圖所示,填入參數名${logincookie}和腳本${__setProperty(logincookie,${logincookie})}

3、在登錄HTTP請求下添加HTTP信息頭管理器,加一行,名稱填抓包抓到的信息頭中的鍵(Cookie),值填BeanShell PostProcessor中往下傳的參數(${__P(變量名)})

4、跑一下請求

已經可以成功添加了。
參考的博文或來源:
