背景
壓測接口往往需要進行身份鑒權。
對於簡單的接口場景,可以直接將用戶名和密碼等放入請求體以完成身份構造。
實際操作中用戶身份信息往往進行了加密,並存放在cookie中,當待壓測接口難以改造鑒權方式時,便需要在發起壓測請求前模擬用戶登錄,獲取用戶cookie信息。
一、單用戶--抓包獲取的cookie登錄態
這種方式首先通過抓包獲取正常操作時的用戶請求,並從中復制出cookie信息,然后將信息粘貼到Jmeter線程組的COOKIE Manager或者Header Manager中即可。

經過上述配置,並發請求時每個請求體都會帶上我們實現設置的cookie信息。
二、單用戶--模擬登錄獲取cookie等登錄態信息
此方式不需要抓包,通過Jmeter模擬登錄接口,將用戶信息自動寫入線程組cookie,只在待壓測請求前發起登錄請求,並添加HTTP COOKIE MANAGER即可。

三、單用戶-登錄優化
上一種方式對於線程組中的登錄接口也進行了並發請求,實際上我們只需要獲取到用戶的登錄態即可,並不需要對登錄接口進行壓測。因此可以做如下優化
將登錄請求放到邏輯控制器下,使用only once controller,這樣用戶在登錄時便只會發送一次登錄請求,並在后續的請求中攜帶上cookie信息。

四、多用戶登錄
1、正確理解 once only controller:此控制器實際上對於它下面的請求並非只限制發送一次請求,而是針對線程組中設置的線程數量,每個線程發送一次請求。
例如線程組設置Threads數量為5,那么在once only controller下登錄請求便會發送5次。


而查詢用戶信息的接口則符合線程組的設置,一共發送了10次請求。

2、多用戶登錄信息獲取--CSV data set config
從用戶信息文件中讀取用戶的id,並作為登錄請求時的變量發送出去。變量配置文件可以選擇csv或者TXT格式,默認使用英文逗號進行變量分割,每行代表一個用戶數據。

3、通過組合HTTP cookie manager以及once only controller使用,便可模擬多用戶登錄,並且請求查詢不同用戶的信息。
線程組線程數量:10,循環10次

登錄請求一共發送10次,均為從配置文件中讀取的不同的用戶信息



待壓測接口總共完成了100次請求,共計10個不同的用戶身份。實際查詢的響應數據也為不同用戶的身份信息



五、多用戶只登錄一次
注意如果要模擬200個用戶身份,那么我們設置的線程數便為200,且配置文件中的用戶身份信息也大於等於200,這樣才能保證用戶線程讀取文件時不會重復。
總結
從復制cookie模擬單用戶,到使用jmeter模擬登錄單用,直到最后使用Jmeter模擬多用戶登錄,是不斷對壓測接口設置的優化提煉,減少對非目標接口的壓測干擾,從而得到更為准確的性能測試數據。
