前段時間任務要求要對一種異步請求作性能測試,異步請求步驟以下:html
step1: 發一個數據計算的請求,response裏面返回一個jobIdjava
step2: 帶上這個jobId,就能夠實時查看這個請求返回的jobStatus, 若是jobStatus==0, 則成功返回計算結果;若是jobStatus==2,則表明job in progress;若是jobStatus==3,則表明job in failure.apache
個人思路:異步
1. 怎樣把step1和step2包裹起來,成爲一個總體,由於這個總體花費的時間,纔是整個異步請求的響應時間。性能
solution: 我用了一個Transaction Controller, 把這兩步構成了一個總體。它的用法可參考:http://jmeter.apache.org/usermanual/component_reference.html#Transaction_Controller測試
2. 怎樣隔一段時間就去查看一下job status, 而且根據返回的job status來判斷是否計算完成並返回計算結果了。component
solution: 我在step2上包裹了一個While Controller內加一個Constant Timer, 前者控制不斷髮送step2的請求直到返回計算結果,後者設定每隔多久發送一次。最後還加了一個BeanShell PostProcessor去多條件控制循環結束。htm
condition script for While Controller is:blog
${__javaScript("${flag}"=="0" && "${jobStatus}"!="0")}ip
BeanShell PostProcessor script is:
String jobStatus = vars.get("jobStatus");
log.info("jobStatus:"+jobStatus);
if(jobStatus.equals("0")){
log.info("AssetUnderManagement data returned successfully!");
vars.put("flag","1");
}
if(jobStatus.equals("3")){
log.info("AssetUnderManagement data calculate in failure!");
vars.put("flag","1");
}
再次推薦,全部JMeter component的用法均可以查閱官網:http://jmeter.apache.org/usermanual/component_reference.htm