標籤:parse conf success als finally 上下文 str 重寫 define
一、背景
使用在Jmeter中,有自己的Java取樣器供我們使用,但是,如果需要在我們的Java採樣器引用自己的類,那麼定製自己的JAVA採樣器是一個不錯的選擇。當然我們同樣也可以重寫HTTP取樣器的方法,這裡以自訂java取樣器來舉例
二、步驟1. 將需要的包添加進你java項目的build path中
需要添加進build path中的jar包為以下三個
ApacheJMeter_components.jarApacheJMeter_core.jarApacheJMeter_java.jar
但是,由於擔心存在jar包的依賴問題,所以建議匯入所有的Jmeter安裝目錄\lib以及\lib\ext\下的jar檔案,導包步驟如下
2. 編寫自訂Java取樣器代碼
在編寫自訂Java取樣器代碼之前,我自訂了一個Hello類,實現簡單的特定字串列印,代碼如下
package com.SelfDefined.Components;public class Hello {public String sayHello(){return "Hello";}public String sayHello2Person(String name){if (name == null || name.equals("")) {name = "nobody";}return (new StringBuilder()).append("Hello").append(name).toString();}public int sum(int a, int b) {return a + b;}}
自訂Java取樣器代碼詳解:
自訂java取樣器,需要用到Arguments、AbstractJavaSamplerClient、JavaSamplerContext、SampleResult這四個類,也需要重寫public Arguments getDefaultParameters(){}、public void setupTest(JavaSamplerContext arg0){}、public SampleResult runTest(JavaSamplerContext arg0){}、public void teardownTest(JavaSamplerContext arg0){}這些方法這些方法的作用如下:
2.1 public Arguments getDefaultParameters(){}
定義需要輸入的變數及其預設值
2.2 public void setupTest(JavaSamplerContext arg0){}
定義在指定測試前所需做的工作,可以為空白
2.3 public SampleResult runTest(JavaSamplerContext arg0){}
執行測試時需要執行的函數
2.4 public void teardownTest(JavaSamplerContext arg0){}
測試執行完畢後的資源清理工作
2.5 public static void main(String[] args ) {}
主函數:運行時按照主函數定義的邏輯來執行測試案例
自訂Java取樣器代碼
package com.SelfDefined.Components;import java.security.Policy.Parameters;import org.apache.jmeter.config.Arguments;//這個類是用來定義和訪問參數的import org.apache.jmeter.protocol.java.sampler.AbstractJavaSamplerClient;//自訂Java取樣器需要繼承這個類import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;//Jmeter的上下文import org.apache.jmeter.samplers.SampleResult;//返回結果//需要自訂Java取樣器時繼承AbstractJavaSamplerClient類,如果需要重寫HTTP取樣器,則繼承其他的類public class MyComponents extends AbstractJavaSamplerClient{ private String a; private String b; private String resultData; //這個方法用來定義java方法的入參 //param.addArgument("num1", "");表示入參參數名為num1,預設值為空白 //設定可用參數及預設值 public Arguments getDefaultParameters() { Arguments param = new Arguments(); param.addArgument("num1", ""); param.addArgument("num2", ""); return param; } // 每個線程測試前執行一次,做一些初始化工作 public void setupTest(JavaSamplerContext arg0) { } //開始測試,從arg0參數可以獲得參數值 public SampleResult runTest(JavaSamplerContext arg0) { a = arg0.getParameter("num1"); b = arg0.getParameter("num2"); SampleResult sr = new SampleResult(); sr.setSampleLabel("Java請求"); try { sr.sampleStart(); Hello test = new Hello(); resultData = String.valueOf(test.sum(Integer.parseInt(a), Integer.parseInt(b))); if (resultData != null && resultData.length() > 0) { sr.setResponseData("結果是:" + resultData, null); sr.setDataType(SampleResult.TEXT); } sr.setSuccessful(true);//如果參數正確,設定返回結果為真 } catch (Throwable e) { sr.setSuccessful(false);//如果參數錯誤,設定返回結果為假 e.printStackTrace(); } finally { sr.sampleEnd();//Jmeter結束統計回應時間標記 } return sr; } public void teardownTest(JavaSamplerContext arg0) { } public static void main(String[] args ) { Arguments params = new Arguments(); params.addArgument("num1", "1");//擷取變數num1的值,若為空白取預設值1,我試了一下沒啥用 params.addArgument("num2", "2"); JavaSamplerContext arg0 = new JavaSamplerContext(params);//建立Jmeter上下文 MyComponents test = new MyComponents(); test.setupTest(arg0); test.runTest(arg0); test.teardownTest(arg0); } }3. 匯出jar包
導包會有一個warning,不用管它
4. 重啟Jmeter即可在Java取樣器中看到我們定製的組件
5. 執行結果
Jmeter01:自訂java取樣器