jmeter的使用(四)

jmeter如何调用java程序呢,下面做简单介绍。
1、打开eclipse,新建项目,导入jmeter依赖的包ApacheJMeter_core.jar和ApacheJMeter_java.jar,这两个包在jmeter安装目录下的lib里,如需要其它jmeter的包,可在lib目录下找。

2、新建类继承AbstractJavaSamplerClient,完整代码如下:

复制代码
package com.test;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;

import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.impl.conn.PoolingClientConnectionManager;
import org.apache.http.util.EntityUtils;
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;

import com.sun.org.apache.bcel.internal.classfile.Code;


/** 
* @ClassName: FirstTest 
* @Description: TODO(这里用一句话描述这个类的作用) 
* @author qiaojiafei 
* @date 2016年1月5日 下午6:18:33 
*  
*/
public class FirstTest extends AbstractJavaSamplerClient {
    private String a;
    private String b;
    /** Holds the result data (shown as Response Data in the Tree display). */
    private String resultData;

    // 这个方法是用来自定义java方法入参的。
    // params.addArgument("num1","");表示入参名字叫num1,默认值为空。
    //设置可用参数及的默认值;
    public Arguments getDefaultParameters() {
        Arguments params = new Arguments();
        params.addArgument("username", "");
        params.addArgument("password", "");
        return params;
    }

    //每个线程测试前执行一次,做一些初始化工作;
    public void setupTest(JavaSamplerContext arg0) {
    }

    //开始测试,从arg0参数可以获得参数值;
    public SampleResult runTest(JavaSamplerContext arg0) {
        a = arg0.getParameter("username");
        b = arg0.getParameter("password");
        SampleResult sr = new SampleResult();
        sr.setSampleLabel( "Java请求开始");
        try {
            sr.sampleStart();// jmeter 开始统计响应时间标记
            // 通过下面的操作就可以将被测方法的响应输出到Jmeter的察看结果树中的响应数据里面了。
            resultData = FirstTest.login(a, b);
            if (resultData != null && resultData.length() > 0) {
                sr.setResponseData("请求结果是:"+resultData, null);
                sr.setDataType(SampleResult.TEXT);
            }
            // System.out.println(resultData);
            sr.setSuccessful(true);
        } catch (Throwable e) {
            sr.setSuccessful(false);
            e.printStackTrace();
        } finally {
            sr.sampleEnd();// jmeter 结束统计响应时间标记
        }
        return sr;
    }

    //测试结束时调用;
    public void teardownTest(JavaSamplerContext arg0) {

    }
    
    // main只是为了调试用,最后打jar包的时候注释掉。
    /*
      public static void main(String[] args) 
      { // TODO Auto-generated method stub
          Arguments params = new Arguments(); 
          params.addArgument("num1", "1");//设置参数,并赋予默认值1 
          params.addArgument("num2", "2");//设置参数,并赋予默认值2
          JavaSamplerContext arg0 = new JavaSamplerContext(params); 
          FirstTest test = new FirstTest(); 
          test.setupTest(arg0); 
          test.runTest(arg0);
          test.teardownTest(arg0); 
      }
     */
    
    public static String login(String name, String pwd) throws Exception{
            final String APPLICATION_JSON = "application/json";
          final String CONTENT_TYPE_TEXT_JSON = "text/json";
          
          DefaultHttpClient client = new DefaultHttpClient(
                    new PoolingClientConnectionManager());
        String url = "http://172.16.30.208:8092/svc/login";
            String js = "{\"username\":"+name+",\"password\":"+pwd+"}";
          
        HttpPost httpPost = new HttpPost(url);       
        httpPost.setHeader("Content-Type", "application/json;charset=UTF-8");

        
        StringEntity se = new StringEntity(js);
        se.setContentType(CONTENT_TYPE_TEXT_JSON);

        httpPost.setEntity(se);
        
        HttpResponse response = null;
        
        response = client.execute(httpPost);

        //----------判断是否重定向开始
        int code = response.getStatusLine().getStatusCode();
        String newuri="";
        if (code == 302) {
            org.apache.http.Header header = response.getFirstHeader("location"); // 跳转的目标地址是在 HTTP-HEAD 中的
            newuri = header.getValue(); // 这就是跳转后的地址,再向这个地址发出新申请,以便得到跳转后的信息是啥。
            System.out.println(newuri);
            System.out.println(code);
            
            httpPost = new HttpPost(newuri);
            httpPost.setHeader("Content-Type", "application/json;charset=UTF-8");
             
            se = new StringEntity(js);
            se.setContentType(CONTENT_TYPE_TEXT_JSON);

            httpPost.setEntity(se);

            response = client.execute(httpPost);
            code = response.getStatusLine().getStatusCode();
            System.out.println("login"+code);
        }

        //------------重定向结束
        HttpEntity entity = null;
        entity = response.getEntity();
        String s2 = EntityUtils.toString(entity, "UTF-8");
        System.out.println(s2);
        return s2;
        
    
}
}
复制代码

3、将该项目打成jar包,放入jmeter安装目录下的apache-jmeter-2.13\lib\ext里,其它依赖的包放入apache-jmeter-2.13\lib里

4、启动jmeter,新建组->java请求->查看结果树,即可看到如下:

5、运行后,查看结果树:

注意:

程序依赖的包一定记得放入lib目录里,如果使用httpclient,jmeter自带的httclientjar包比较老,可删除老的,放入新版的jar包

posted on   乔叶叶  阅读(1261)  评论(0编辑  收藏  举报

编辑推荐:
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示