Jmeter 自定义测试请求

使用jmeter可以很方便地对web程序进行性能测试,但是有时候jmeter提供的请求不满足我们的需求,比如我们需要把用户名、密码经过哈希后,再发给服务器校验,这种个性化的情况我们需要自己自定义测试请求,编写测试代码。下面以eclipse为例,简单做一个实现。

  1. 在Eclipse中新建一个空的java项目,名称随便选择,比如Jmeter-test。
  2. 下载Jmeter http://jmeter.apache.org/download_jmeter.cgi,下载完毕后解压,我们需要在eclipse中引入Jmeter的两个jar包,ApacheJMetercore.jar、ApacheJMeterjava.jar,这两个jar包在Jmeterlibext文件夹下

  3. 在Jmeter-test中新建包名,比如com.yeetrack.JmeterTest,在包中新建一个类,如TestJmeter,TestJmeter要继承AbstractJavaSamplerClient。
  4. 第三步中继承AbstractJavaSamplerClient类,会同时继承4个方法,分别是”getDefaultParameters”,”setupTest”,”runTest”和”teardownTest”方法。

     

    • getDefaultParameters方法用于设置默认传入的参数
    • SetupTest方法用户初始化性能测试的线程等
    • runTest方法是测试主体方法
    • teardownTest方法是测试结束方法
  5. 参考代码如下:

    GetPackage.java文件:自定义的GetPackage类

    package com.yeetrack.test;
    
    import org.apache.jmeter.samplers.SampleResult;
    
    import java.io.*;
    import java.net.MalformedURLException;
    import java.net.URL;
    import java.net.URLDecoder;
    
    /**
     * Created with IntelliJ IDEA.
     * User: youthflies
     * Date: 13-2-21
     * Time: 下午2:44
     * To change this template use File | Settings | File Templates.
     */
    public class GetPackage
    {
        private String url = "http://www.baidu.com/s";  //请求完整路径,不带参数
        private String keyword; //要搜索的关键词
    
        public GetPackage(String keyword)
        {
            this.keyword = keyword;
        }
    
        /**
         * 发出get请求,去访问百度
         * @param sr
         * @return
         * @throws InterruptedException
         */
        public  boolean getTest(SampleResult sr) throws InterruptedException
        {    
            String queryString = this.keyword;
            try
            {
                queryString = URLDecoder.decode(queryString, "utf-8");
            } 
            catch (UnsupportedEncodingException e)
            {
                e.printStackTrace();  //To change body of catch statement use File | Settings | File Templates.
            }
            boolean flag = false;
            try
            {
                URL url = new URL(this.url+"?wd="+queryString);
                System.out.println(url);
                InputStream in = url.openStream();
                BufferedReader bin = new BufferedReader(new InputStreamReader(in,"utf-8"));
                String s = null;
                String result = null;
    
                while((s=bin.readLine())!=null)
                {
                    result+=s;
                    //此处可以手动添加一些校验条件
                    if(s.contains(queryString))
                         flag = true;
                }
                sr.setResponseMessage("yeetrack.com--OK");
                sr.setResponseData(result, "utf-8");
                sr.setSamplerData(result);
                sr.setResponseCodeOK();
    
             } catch (MalformedURLException e)
             {
                     e.printStackTrace();  //To change body of catch statement use File | Settings | File Templates.
             } catch (IOException e)
             {
                     e.printStackTrace();  //To change body of catch statement use File | Settings | File Templates.
             }
           return flag;
        }
    
    }

    JmeterTest.java文件:主测试方法,调用GetPackage类中的getTest()方法

    package com.yeetrack.test;
    
    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; 
    
    /**
     * 
     * @author youthflies
     *
     */
    public class JmeterTest extends AbstractJavaSamplerClient 
    { 
        private String label = "testBaidu";
    
        private String keyword;
    
        public void setupTest(JavaSamplerContext arg0) 
        {
            System.out.println("setupTest");
        } 
    
        public SampleResult runTest(JavaSamplerContext arg0) 
        {   
            //从参数列表中获取输入的参数
            keyword = arg0.getParameter("wd");
    
            SampleResult sr;
            sr = new SampleResult();
            sr.setSampleLabel(label);
            try
            {
               sr.sampleStart();  //记录程序执行时间,以及执行结果
               GetPackage test = new GetPackage(keyword);
               //调用自定义的验证方法
               boolean result = test.getTest(sr);
               if(result)
               {
                   System.out.println("成功");
                   sr.setSuccessful(true);
                   sr.setResponseCodeOK();
                   sr.setRequestHeaders("200");
               }
               else
               {
                   System.out.println("失败");
                   sr.setSuccessful(false);
               }
    
            }catch(Throwable e){
              sr.setSuccessful(false);
            }finally{
              sr.sampleEnd();
            }  
            return sr;
        } 
    
        public void teardownTest(JavaSamplerContext arg0) {
    } 
    
        /**
         * 用来设置默认的参数列表
         */
    public Arguments getDefaultParameters() 
    {
         Arguments params = new Arguments();
         params.addArgument("wd", "易踪网");
         return params;
    } 
    
    }

     

  6. 将代码打成jar包,Eclipse中直接export即可。

    注意选择java文件时,要把使用到的java文件都选上,不要遗漏。打完jar包后,将打成的jar文件放到Jmeter的libext目录下。

  7. 运行Jmeter,添加一个线程组,然后再添加一个java请求。

    在类名称中选择自己刚才编写的那个类,

    OK,设置好线程,添加”察看结果树“和”聚合报告“直接测试即可。
    Jmeter 自定义测试请求(功能完善)

     

发表评论

电子邮件地址不会被公开。 必填项已用*标注

(Spamcheck Enabled)