關於將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");
   
 
 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章