Sample
這里我用到主要JMeter的線程和報表,擴展了他的“Java請求”這個應用類別。要擴展此應用,要用到lib/ext/ApacheJMeter_java.jar,他封裝此應用。
首先,需要繼承ApacheJMeter_java.jar中的抽象類AbstractJavaSamplerClient,它提供了四個抽象方法: void setupTest(JavaSamplerContext arg0),SampleResult runTest(JavaSamplerContext arg0), void teardownTest(JavaSamplerContext arg0), Arguments getDefaultParameters()。setupTest和teardownTest與JUnit中的類似,分別在測試的開始和結束時執行。
runTest為主要測試方法,所有測試程序都在這里完成,JavaSamplerContext參數封裝測試中需要的所有外界數據(如配置信息等)。其 SampleResult封裝了所有測試結果(如:測試是否成功?程序執行時間等),getDefaultParameters用于把測試的一些默認數據在程序運行前顯示到JMeter客戶端,這個可以和runTest配合使用,實現數據的呈現和配置。
下面為程序:
import org.apache.jmeter.config.Arguments;
import org.apache.jmeter.protocol.java.sampler.AbstractJavaSamplerClient;
import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;
import org.apache.jmeter.samplers.SampleResult;
import com.ebupt.wv.client.WVClient;
public class Login2 extends AbstractJavaSamplerClient {
private static String label = "userLogin"
private String name;
private String address;
public void setupTest(JavaSamplerContext arg0) {
System.out.println("setupTest");
}
public SampleResult runTest(JavaSamplerContext arg0) {
name = arg0.getParameter("name");
address = arg0.getParameter("address");
SampleResult sr;
sr = new SampleResult();
sr.setSampleLabel(label);
try{
sr.sampleStart();?//記錄程序執行時間,以及執行結果?sr.setSuccessful(true);?System.out.println("send over!");
}catch(Throwable e){
sr.setSuccessful(false);?}finally{
sr.sampleEnd();?}
return sr;
}
public void teardownTest(JavaSamplerContext arg0) {
}
public Arguments getDefaultParameters() {
Arguments params = new Arguments();
params.addArgument("name", "JMeter");
params.addArgument("address", "localhost");
return params;
}
}
其次,把寫好的應用打包,放到lib/ext下,JMeter運行時即可找到。同時還要把用戶自己編寫的應用所依賴的包放在lib下。運行JMeter。界面打開后,右鍵“測試計劃”,添加線程組;右鍵“線程組”-添加-Sampler-Java請求,在類名稱處選擇剛才寫好的類。
如圖:
這里,可以同時添加多個線程組、多個java請求、同時可以添加監聽器用于輸出不同的的測試結果圖形、報表,各個請求之間可以用邏輯控制器進行執行流程的控制。如圖:
最后,點擊運行-啟動,保存相應的項目,即可開始運行。運行時的數據,可以通過監聽器寫入文件以便需要時生成報表。