博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
jmeter之自定义java请求性能测试
阅读量:5321 次
发布时间:2019-06-14

本文共 4644 字,大约阅读时间需要 15 分钟。

一、环境准备
        1、新建一个java工程
        2、导入jar包:ApacheJMeter_core.jar     ApacheJMeter_java.jar
                这两个jar是使用jmeter最基础的jar,能够让你的代码在jmeter中运行起来,如果在写代码的过程中需要其他的jar,自行导入。
 
二、写代码前该知道的
 
        1、如果想要让你的代码在jmeter中运行起来,在创建类的时候需要去继承AbstractJavaSamplerClient抽象类或者是实现JavaSamplerClient接口
            AbstractJavaSamplerClient抽象类是JavaSamplerClient接口的子类,当你不需要复写所有的需要复写的方法时,那么你只需要去继承AbstractJavaSamplerClient抽象类即可。
 
            如果你选择了实现JavaSamplerClient接口,那么你需要复写的方法有:
                         public SampleResult runTest(JavaSamplerContext context) {}
                         public void setupTest(JavaSamplerContext context) {}
                         public void teardownTest(JavaSamplerContext context) {}
                         public Arguments getDefaultParameters() {}
            这4个方法就必须要复写,但是如果选择继承AbstractJavaSamplerClient这个抽象类,那么只需要复写你需要的方法即可。
 
        2、方法说明:
                    public Arguments getDefaultParameters() {}
                            这个方法由Jmeter在进行添加javaRequest时第一个运行,它决定了你要在GUI中默认显示出哪些属性。
                    public void setupTest(JavaSamplerContext context) {}
                            这个方法相当于loadrunner中的init,我们可以用它来进行一些初始化的动作。
                    public SampleResult runTest(JavaSamplerContext context) {}
                            这个方法相当于loadrunner中的action,我们的核心测试代码就在这里了。
                    public void teardownTest(JavaSamplerContext context) {}
                            这个方法相当于loadrunner中的end,收尾的工作可以由它来做。
 
        3、除了以上2点,我们一般还需要去实现Serializable,序列化标记接口,这样可以让我们的类去实现序列化。
 
三、代码书写
package com.lingfeng.jmeter.practice;  import java.io.IOException;import java.io.InputStream;import java.io.Serializable;import java.net.MalformedURLException;import java.net.URL;import java.net.URLConnection; 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;  public class MyJavaRequest extends AbstractJavaSamplerClient implements Serializable  {     private static final long serialVersionUID = 1L;     private String sUrl;//存储用户输出的url         private static final String URL_NAME="URL" ;//设置GUI页面显示的变量名称    //设置GUI页面默认显示的变量值,默认值就是访问百度    private static final String URLVALUE_DEFAULT="http://www.baidu.com";    //resultData变量用来存储响应的数据,目的是显示到查看结果树中。    private String resultData;         StringBuilder sbResultData = new StringBuilder();     /*     * 这个方法用来控制显示在GUI页面的属性,由用户来进行设置。     * 此方法不用调用,是一个与生命周期相关的方法,类加载则运行。     * (non-Javadoc)     * @see org.apache.jmeter.protocol.java.sampler.AbstractJavaSamplerClient#getDefaultParameters()     */    @Override    public Arguments getDefaultParameters() {        Arguments arguments = new Arguments();        arguments.addArgument(URL_NAME, String.valueOf(URLVALUE_DEFAULT));        return arguments;    }       @Override    public void setupTest(JavaSamplerContext context) {        sUrl = context.getParameter(URL_NAME, URLVALUE_DEFAULT);        if(sUrl.length()==0){            sUrl="http://www.baidu.com";//假如用户没有设置url,那么就让他访问百度,哈哈。        }             }     @Override    public SampleResult runTest(JavaSamplerContext context) {                      /*         * SampleResult这个类是用来将测试结果输出到查看结果树中的。           * 并且也是用来控制事务的开始和结束的。           */        SampleResult results = new SampleResult();        results.setSampleLabel("测试"+sUrl+"网站访问速度了啊!!");         try{                 URL url = new URL(sUrl);            URLConnection conn = url.openConnection();            InputStream in = conn.getInputStream();             byte[] buffer = new byte[1024];            int len;            //事务开始标记                       results.sampleStart();            while((len=in.read(buffer))!=-1){                resultData =  new String(buffer,"UTF-8");//将每次读到的页面返回信息存储到resultData中                sbResultData.append(resultData);//每读到一次,添加到sb中。                         }            in.close();                     }catch (MalformedURLException e) {            results.setSuccessful(false);            e.printStackTrace();        }catch (IOException e) {            results.setSuccessful(false);            e.printStackTrace();        }catch(Exception e){
//如果发生异常,则捕捉,并且发送事务失败的消息。 results.setSuccessful(false); e.printStackTrace(); }finally{ //标记事务结束 results.sampleEnd(); } results.setSuccessful(true); resultData = sbResultData.toString();//将所有读到的数据转换为字符串 results.setResponseData(resultData,null);//将数据打印到查看结果树当中 results.setDataType(SampleResult.TEXT); return results; } }
View Code

 

四、jmeter运行java代码
        1、将代码打包成jar
        2、把打包成的jar放在\apache-jmeter-2.12\lib\ext路径下
        3、打开jmeter GUI,添加线程组,再添加一个java请求,如下图:
 
        4、添加查看结果树,运行后结果如下:
 
 
五、补充事项
    当我们的代码在运行时发生异常,就会被打印在doc窗口中
 
我这里没有发生异常,所以没有数据,当发生异常时就会打印在这里。注意观察,有助于调试代码
 
六、最后的话
  其实由以上的代码可以看出,这一段测试代码其实没有太大的测试意义,就是模拟了一个HTTP请求访问一个网站。
  但是当我们需要进行一段代码的性能测试的时候,这样来进行书写,并且在runTest方法中进行调用后,那么就可以测试出这段代码的性能如何。
 
 
  经常总结,互相学习!!

转载于:https://www.cnblogs.com/a00ium/p/10468461.html

你可能感兴趣的文章
springCloud学习-消息总线(Spring Cloud Bus)
查看>>
centos7 自动备份 mysql
查看>>
用JS判断两个数字的大小
查看>>
【luogu P2298 Mzc和男家丁的游戏】 题解
查看>>
CVE-2012-0158 分析
查看>>
Git提交代码冲突:commit your changes or stash them before you can merge.
查看>>
OpenCV —— 直方图与匹配
查看>>
简单查看tomcat中部署java服务的内存使用情况
查看>>
畅通工程续(dijskra+SPFA)
查看>>
Tomcat启动过程源码分析五
查看>>
CF916E Jamie and Tree
查看>>
oracle 以SYSDBA远程连接数据库
查看>>
[OpenGL ES 04]3D变换实践篇:平移,旋转,缩放
查看>>
匈牙利算法(模板)
查看>>
MySQL index
查看>>
C++ - 链表
查看>>
Ubuntu安装后,无启动项,解决办法
查看>>
C# - AES加密+解密
查看>>
oracle 安装,启动 ,plsql 连接
查看>>
getJSON 回调函数不执行
查看>>