目的好處:
關於將java測試代碼移植到jmeter和loadrunner需要注意的地方
1.我們把做接口測試的代碼直接移植到jmeter,用jmeter來做穩定性測試比較方便,也可以直接做性能,但是考慮到監控插件太爛,還是建議用loadrunner做性能監控
2.公司較多使用java,高手也很多,用java寫腳本更加容易上手loadrunner的性能測試
方法:
1.通過jmeter的java請求來直接運行我們上傳的jar包中的用例
jar中的規範必須嚴格符合jmeter要求的格式繼承AbstractJavaSamplerClient類
下面是將coa一個接口測試移植的小例子,整包見附件
//初始化方法,實際運行時每個線程僅執行一次,在測試方法運行前執行,類似於LoadRunner中的init方法
public void setupTest(JavaSamplerContext arg0) {
results = new SampleResult();
domain = arg0.getParameter("domain", "");
if (domain != null && domain.length() > 0)
{
results.setSamplerData(domain);
}
appsec = arg0.getParameter("appsec", "");
if (appsec != null && appsec.length() > 0)
{
results.setSamplerData(appsec);
}
appkey = arg0.getParameter("appkey", "");
if (appkey != null && appkey.length() > 0)
{
results.setSamplerData(appkey);
}
}
//設置傳入的參數,可以設置多個,已設置的參數會顯示到Jmeter的參數列表中
public Arguments getDefaultParameters() {
Arguments params = new Arguments();
params.addArgument("domain", "https://10.249.192.87:8003/getSubscriber?data="); params.addArgument("appsec", "yw0QjdmJmM");
params.addArgument("appkey", "ATcapideOxHLEfIq");
return params;
}
//測試執行的循環體,根據線程數和循環次數的不同可執行多次,類似於LoadRunner中的Action方法
@SuppressWarnings("deprecation")
public SampleResult runTest(JavaSamplerContext context) {
int len = 0;
results.sampleStart(); //定義一個事務,表示這是事務的起始點,類似於LoadRunner的 lr.start_transaction
domain = context.getParameter("domain");
appsec = context.getParameter("appsec");
appkey = context.getParameter("appkey");
//coa_test test1 = new coa_test();
try {
flag = test_getSubscriber_basic_1(domain, appkey, appsec, glresponse);
} catch (InvalidKeyException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (NoSuchAlgorithmException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
results.sampleEnd(); //定義一個事務,表示這是事務的結束點,類似於LoadRunner的 lr.end_transaction
results.setDataEncoding("UTF-8");
if(flag == true){
System.out.println("test1 pass");
results.setResponseCode("200");
results.setResponseData(glresponse);
results.setSuccessful(true); //用於設置運行結果的成功或失敗,如果是"false"則表示結果失敗,否則則表示成功
}else{
// results.setResponseCode("doamin:"+domain);
// results.setResponseData("doamin:"+domain);
results.setResponseCode("201");
results.setSuccessful(false);
}
return results;
}
//結束方法,實際運行時每個線程僅執行一次,在測試方法運行結束後執行,類似於LoadRunner中的end方法
public void teardownTest(JavaSamplerContext arg0) {
}
將jar包打好後放入jmeter安裝目錄\lib\ext下,重新打開就可以看到coa的test代碼了
優點:可以測試併發調用接口可能出現的問題,不用在代碼中起多線程
缺點:1.沒有控制檯可以看log,只能在把log打在文件中查看
2.只能在察看結果樹裏看執行狀態,其他有待摸索,相關資料支持少
3.java gui做圖像監控插件很爛,做性能建議用loadrunner監控
2.loadrunner我們組使用的人還比較少,大部分還在學習階段,**算是lr的專家了,但是它寫事務腳本是用c#,這個加大了
我們的學習成本,現在loadrunner對jdk的支持越來越好,所以考慮用java來寫事務腳本測服務器性能。
方法:
LR11貌似不用裝支持java的插件了,直接 Create Scripts->New->Java->Java Vuser生成腳本
vuser_int和vuser_end不用管了,代碼直接整合到actions的init和end方法中了,我們需要做的就是在action方法裏寫我們 的事務腳本,簡單的例子:
import lrapi.lr;
import org.apache.log4j.*;
public class testjava1
{
public static void main(String args[])
{
System.out.println("hello world");
}
public String getStr()
{
return "hello world";
}
public String getStr(String str)
{
return str;
}
}
public class Actions
{
static Logger logger = Logger.getLogger(Actions.class.getName());
int i=10;
public int init() {
PropertyConfigurator.configure("C:\\Users-now\\yang.kongy\\workspace\\koubei-hawkeye-openapi\\src\\main\\java\\resource\\log4j.properties");
return 0;
}
public int action() {
lr.start_transaction("事務");
testjava t=new testjava();
lr.rendezvous("集合");
lr.think_time(2);
lr.end_transaction("事務",lr.PASS);
return 0;
}
public int end() {
return 0;
}
}
框架寫好後,腳本多多向**請教了~
基本的loadrunner的函數庫還是要熟悉的,比如thinktime,事務集合,輸出等等
在Vuser->Runtime settings裏classpath 引入函數需要的jar包,設置對jdk的路徑,否則會出現無法找到類
這裏一定要注意LR11不支持64bit的jdk,由於我機子是64bit的安裝的64bit的jdk,一直報無法找到jdk,安裝了jdk32bit就好了
附:jmeter java請求顯示response信息
results.setDataType(SampleResult.TEXT);
results.setContentType("text/html; charset=utf-8");
results.setResponseData("res-yangk","utf-8");
results.setResponseCode("200");
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.