一般登錄過程分成兩步,一步是打開登錄頁面, 一步是輸入用戶名和密碼登錄
現在B/S架構的系統好多時候都只在客戶端的cookie信息保留一個jsessionId,然后每次請求的時候在請求的頭信息的cookie中帶上JsessionID,服務器根據jsessionId來判斷是否是合法的輸入,
那我們怎么樣通過jmeter去提取JessionId呢?
1、首先添加在登錄的請求接口中添加一個beanshell前置處理器(后置處理器也可以,可以判斷是否登錄成功,在決定是否保留這個jsessionid)
對應的代碼如下
import java.util.regex.Matcher;
import java.util.regex.Pattern;
String str=prev.getResponseHeaders();
log.info("head="+str);
// 把要匹配的字符串寫成正則表達式,然后要提取的字符使用括號括起來
// 在這里,我們要提取最后一個數字,正則規則就是“一個數字加上大於等於0個非數字再加上結束符”
Pattern p = Pattern.compile("[A-Za-z0-9]{32}");
Matcher m = p.matcher(str);
log.info("m = "+m);
if(m.find()) {
Object result = m.group(0);
log.info("head="+result);
}
第一步先找到前一次請求的頭信息, prev.getResponseHeaders();, 再次知道我們要找的字符串的正則表達式規則"[A-Za-z0-9]{32}"),說明是32位的字符串,只包含數字和字母,通過匹配正則表達式,找到對應的jsessionID, 運行完的結果發現找到了正確的jsessionid
最后再調用Java代碼保存這些jessionID就好
保存這些JessionId有什么用呢?
可以真正模擬多用戶請求, 通過 CSV Data Set Config 組件把數據引用回來, 每一個請求都帶上不同的jessionId, 每個請求就是不同用戶了,
那為什么我們不用同一個用戶開啟多個線程去模擬多用戶呢? 同一個用戶調用同一個請求, 可能有些程序會拒絕這種不合理情況, 比如說下單,前一個線程下單還沒有走完, 同一個用戶的另一個線程又開始下單,這種第二個請求可能會被服務器給拒絕, 但是我們把每個線程使用不同jsessionId給帶回來,就不會存在這個問題了