JMeter Cookie的使用場景
工作中的場景,比如某個系統,需要先登錄,然后進行添加門店、添加會員、添加會員等操作,這些操作可執行的前提是要先登錄。用戶在登錄的時通常會生成cookie,接下來的操作中都要帶上cookie。還會遇到一些場景,只需要登錄一次,接着進行其他操作,還有跨線程怎么傳輸cookie。
整體的思路:
- setUp線程組中登錄,登錄后使用正則把cookie取出來
- 通過BeanShell把變量設置為全局變量,供跨線程使用
- 在一個普通線程組中添加HTTP Cookie管理器,把登錄生成的cookie值引用到cookie管理器中
HTTP Cookie管理器定義
Cookie Manager元素具有兩個功能:
-
首先,它像Web瀏覽器一樣存儲和發送cookie。如果您有HTTP請求,並且響應包含cookie,則cookie管理器會自動存儲該cookie,並將其用於將來對該特定網站的所有請求。每個JMeter線程都有其自己的“ cookie存儲區”。因此,如果您正在測試使用cookie來存儲會話信息的網站,則每個JMeter線程將擁有自己的會話。請注意,此類cookie不會出現在Cookie Manager上,但可以使用“查看結果樹監聽器”看到它們。
-
JMeter會檢查收到的Cookie是否對該URL有效。這意味着不會存儲跨域Cookie。如果您有錯誤的行為或希望使用跨域cookie,請定義JMeter屬性“ CookieManager.check.cookies = false ”。
收到的Cookies可以存儲為JMeter線程變量。要將cookie保存為變量,請定義屬性“ CookieManager.save.cookies = true ”。另外,在存儲cookie名稱之前,它們以“ COOKIE_ ”為前綴(這避免了局部變量的意外損壞)。若要恢復原始行為,請定義屬性“ CookieManager.name.prefix = ”(一個或多個空格)。如果啟用,則名為TEST的cookie的值可以稱為$ {COOKIE_TEST}。 -
其次,您可以手動向Cookie管理器添加cookie。但是,如果執行此操作,則cookie將被所有JMeter線程共享。
請注意,此類Cookie的創建時間是將來的很遠
默認情況下, 具有空值的Cookies被忽略。這可以通過設置JMeter屬性來更改:CookieManager.delete_null_cookies = false。請注意,這也適用於手動定義的Cookie-更新后,所有此類Cookie都會從顯示中刪除。還要注意,cookie名稱必須唯一-如果用相同的名稱定義了另一個cookie,它將替換第一個。
總結一下:
- HTTP Cookie管理器可以自動管理cookie,前面有講解過,就把cookie管理器加上去就行了
- 也可以對cookie進行跨域使用,跨域使用就是前面所說的思路。
還是拿部署好的教育系統進行實戰講解:
一、實操
1.新增setUp線程組
setUp線程組下一節在做具體講解,setUp線程組執行一個初始化的操作,在普通線程組之前直接,而且只執行一次。比如現在我們就只需要登錄一次,然后接着操作學校列表接口、禁用、啟用學校等。
2.在setUp線程組中進行登錄
登錄后抓取cookie的值,通過抓包或者直接在查看結果樹中看,cookie的值在響應頭中。
3.通過正則提取cookie的值
通過正則提取cookie的值,關聯和正則的相應的說明在前面的文檔有詳細說明。
4.通過beanshell設置存放cookie的變量為全局變量
添加一個beanshell取樣器,在腳本中編寫:
${__setProperty(new,${c},)};
c是上面正則提取處理的變量值;new是新定義的全局變量;
要設置為全局變量才能跨線程使用
5.在另外的一個線程組中添加cookie管理器
在另外線程組中添加cookie管理器,把cookie的值引用過來
${__P(new)}
域和值一定要填寫正確,域填寫錯不起作用的。
“ domain ”(域)是服務器的主機名(不帶http://);該端口當前被忽略。域直接寫主機名就可以了。
6.在線程組中添加請求
在線程組中添加一個學校列表頁,接口都可以寫在這個線程組中,這些接口的共同特點就是都需要先登錄,才有權限訪問。
新增一個學校列表頁接口,請求成功。