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