博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
jmeter的使用(四)
阅读量:5905 次
发布时间:2019-06-19

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

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包

转载地址:http://ykcpx.baihongyu.com/

你可能感兴趣的文章
机器学习瓶颈 - 从黑盒白盒之争说起
查看>>
小程序图片上传七牛
查看>>
java交换两个变量值a,b的多钟方法
查看>>
Python中被双下划线包围的魔法方法
查看>>
JAVA核心编程教学
查看>>
Oracle:数据类型对应表
查看>>
洛谷P1349 广义斐波那契数列
查看>>
BZOJ3160 万径人踪灭
查看>>
Okhttp3请求网络开启Gzip压缩
查看>>
pycharm配置mysql数据库连接访问
查看>>
Spring源码学习:第0步--环境准备
查看>>
烂泥:rsync与inotify集成实现数据实时同步更新
查看>>
SQL连接问题,用户登录失败
查看>>
call & apply
查看>>
学习英语哦
查看>>
第六届蓝桥杯java b组第四题
查看>>
通过TortoiseGIT怎么把本地项目上传到GitHub
查看>>
Python 1 Day
查看>>
Python基础学习笔记(十:二进制位运算)
查看>>
HDU 5311 Hidden String
查看>>