Jmeter-websocket獲取信息,加入參數,傳入http請求
測試計劃
- 測試目的:
直播搶答接口,測試接口併發性. - 測試分析
進入直播間後,形成websocket長連接傳輸的協議, 此時教師端發起請求, 通過websocket協議傳遞queuename值, 學員端發起直播搶答接口,傳遞參數包含queuename值 - 測試計劃
- 1 用戶定義變量
- 2用戶參數
- 3創建線程組
獲取queuename ,此處添加websocket sampler
該線程組執行一次 - 4創建線程組
直播搶答接口,此處添加http request sampler
該線程組按照實際併發需求配置
jmeter 沒有自帶的websocket sampler , 需要網上查找添加多個jar
websocket 獲取消息並解壓
websocket 獲取消息後, jmeter 將獲取的消息加上了
[message 1]=回車 (這裏是真的坑)
下面纔是真正從服務端傳來的數據.所以在BeanShell PostProcessor 要對捕獲的數據進行處理.
import com.dongao.app.GetQueueName;
String responsedata = prev.getResponseDataAsString();
String finaldata=responsedata.split("1]")[1]; //攔截去掉[message 1]
log.info("--------------------------->finaldata="+finaldata.replaceFirst("\r|\n",""));//去掉第一個回車,這裏值得注意,一開始用錯了方法replaceAll,導致整個捕獲的消息都被去掉了回車,然後再調用jar包裏的方法,就會報 java.util.zip.DataFormatException: incorrect header check
String que=GetQueueName.getQueueName(finaldata.replaceFirst("\r|\n",""));
props.put("QueueName",que);
多線程組,beanshell的參數傳遞
同一線程組內,可用vars這個容器來傳遞參數
多線程組間,可以用props 這個容器來傳遞參數
(props實際的意義就是將變量定義爲jmeter的內部變量)