首頁>技術>

我們在做效能測試時,常常需要編寫測試指令碼,很多測試工具都支援自定義編寫測試指令碼,比如LoadRunner 有很多自定義指令碼的協議,比如“C Vuser”,“Java Vuser”等。當然,Jmeter也支援自定義編寫的測試程式碼,不過與LoadRunner不同的是,Jmeter沒有自帶編譯器,需要藉助第三方編譯器才能實現。

下面舉一個簡單的Java自定義測試程式碼例子,使用Java編譯器編寫測試程式碼(Java編譯器可以選用Eclipse,JBulider 等),實現功能為:在測試前輸入任意一個字串,然後判斷該字串的長度是否大於5,如果大於則測試結果成功,否則測試即為失敗,然後再放到 Jmeter中模擬10個使用者測試,同時執行這段程式碼,具體實現如下:

1.開啟Java編譯器,新建一個專案“TestDemo”,然後新建一個包“app”。

2.從Jmeter的安裝目錄lib\\ext中拷貝兩個檔案“ApacheJMeter_core.jar” 和“ApacheJMeter_java.jar”到新建的專案中,然後引入這兩個JAR檔案。

3.在“app”包中新建一個類,名字叫“TestDemo”,不過這個類要繼承“AbstractJavaSamplerClient”類,如果專案引入步驟二中的兩個檔案,就可以找到“AbstractJavaSamplerClient”類了。

4.類“TestDemo”在繼承“AbstractJavaSamplerClient”類的同時,也會繼承四個方法,分別 是“getDefaultParameters”,“setupTest”,“runTest”和“teardownTest”方 法。“getDefaultParameters”方法主要用於設定傳入的引數;“setupTest”方法為初始化方法,用於初始化效能測試時的每個線 程。“runTest”方法為效能測試時的執行緒執行體;“teardownTest”方法為測試結束方法,用於結束效能測試中的每個執行緒。

5.具體實現程式碼如下:

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;

/**

* TODO To change the template for this generated type comment go to

* Window - Preferences - Java - Code Style. - Code Templates

*/

public class TestLength extends AbstractJavaSamplerClient{

private SampleResult results;

private String testStr;

//初始化方法,實際執行時每個執行緒僅執行一次,在測試方法執行前執行,類似於LoadRunner中的init方法

public void setupTest(JavaSamplerContext arg0) {

results = new SampleResult();

testStr = arg0.getParameter("testString", "");

if (testStr != null && testStr.length() > 0) {

results.setSamplerData(testStr);

}

}

//設定傳入的引數,可以設定多個,已設定的引數會顯示到Jmeter的引數列表中

public Arguments getDefaultParameters() {

Arguments params = new Arguments();

params.addArgument("testStr", "abc"); //定義一個引數,顯示到Jmeter的引數列表中,第一個引數為引數預設的顯示名稱,第二個引數為預設值

return params;

}

//測試執行的迴圈體,根據執行緒數和迴圈次數的不同可執行多次,類似於LoadRunner中的Action方法

@SuppressWarnings("deprecation")

public SampleResult runTest(JavaSamplerContext context) {

int len = 0;

results.sampleStart(); //定義一個事務,表示這是事務的起始點,類似於LoadRunner的 lr.start_transaction

testStr = context.getParameter("testStr");

len = testStr.length();

results.sampleEnd(); //定義一個事務,表示這是事務的結束點,類似於LoadRunner的 lr.end_transaction

results.setDataEncoding("UTF-8");

if(len < 5){

System.out.println(testStr);

results.setResponseCode("testStr:"+testStr);

results.setResponseData("testStr:"+testStr);

results.setSuccessful(false); //用於設定執行結果的成功或失敗,如果是"false"則表示結果失敗,否則則表示成功

}else{

results.setResponseCode("testStr:"+testStr);

results.setResponseData("testStr:"+testStr);

results.setSuccessful(true);

}

return results;

}

//結束方法,實際執行時每個執行緒僅執行一次,在測試方法執行結束後執行,類似於LoadRunner中的end方法

public void teardownTest(JavaSamplerContext arg0) {

}

}

6.把上面的例子打包,然後把生成的“TestDemo.jar”檔案拷貝到Jmeter的安裝目錄lib\\ext下。

7.執行Jmeter,新增一個執行緒組,然後在該執行緒組下面新增一個Java請求(在Sampler中),在Java請求的類名稱中選擇第三步建立的類“app.TestDemo”,在下面引數列表的“testStr”,後面輸入要測試的字串,然後新增一個監聽器(聚合報告),設定一下模擬 的使用者數就可以測試了。如果測試不成功,Jmeter會在它自己個輸出框中丟擲這個字串。

通過上面的例項可以發現,使用Jmeter自定義Java測試程式碼,配合Jmeter自帶的函式,可以實現出LoadRunner 中"Vuser"協議的絕大多數功能,而且是沒有使用者數限制和完全免費的。上面的例子非常簡單,沒有任何實際意義,只是一個簡單的Jmeter測試程式碼示例,用於拋磚引玉,希望大家一起交流,共同進步。

最新評論
  • BSA-TRITC(10mg/ml) TRITC-BSA 牛血清白蛋白改性標記羅丹明
  • 怎樣為你的 Vue.js 單頁應用提速