Eclipse + java +jmeter例子

java脚本

package com.xxx.jemeter;

import java.util.HashMap;
import java.util.Map;

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.protocol.java.sampler.JavaSamplerClient;
import org.apache.jmeter.samplers.SampleResult;
import org.testng.Assert;
import com.zchz.testbase.HttpUtil;

import net.sf.json.JSONObject;

public class PerformanceTest implements JavaSamplerClient  {
    private SampleResult results;
    private String a;
    private String b;
    private String filename;

    public Arguments getDefaultParameters() {

        Arguments params = new Arguments();
        params.addArgument("filename", "0");// 设置参数,并赋予默认值0
        params.addArgument("a", "0");// 设置参数,并赋予默认值0
        params.addArgument("b", "0");// 设置参数,并赋予默认值0
        return params;
    }

    public void setupTest(JavaSamplerContext arg0) {

        // 开始时间
        results = new SampleResult();
    }


    /**
     * JMeter测试用例入口
     */
    public SampleResult runTest(JavaSamplerContext arg0) {
        b = arg0.getParameter("b"); // 获取在Jmeter中设置的参数值
        a = arg0.getParameter("a"); // 获取在Jmeter中设置的参数值
        filename = arg0.getParameter("filename"); // 获取在Jmeter中设置的参数值

        System.out.println("开始计时");
        results.sampleStart();// jmeter 开始统计响应时间标记 //添加的“聚合报告中会自动统计”
        try {
            /**
             * 测试代码
             */
            String api_url = "http://192.168.2.15:9999/bloc/";

            results.setSamplerData("请求方式:" + "http get");
            results.setSamplerData("请求接口:" + api_url +"common/blockNumber.json");//在Jmeter工具运行后,添加的“察看结果树”里,“请求”列表会输出这个结果

            Map<String,String> header =new HashMap<String,String>();
            header.put("Content-Type", "application/json");       
            JSONObject response =JSONObject.fromObject(HttpUtil.get(api_url+"common/blockNumber.json",  new HashMap<String,String>(), header));

            Assert.assertEquals(response.get("code"),"SUCCESS");
            Long blockNumber = response.getLong("detail");
            //设置在jemeter察看结果树中显示的相应数据
            results.setResponseData("结果是: code = " +response.get("code") + "detail = " + blockNumber);//在Jmeter工具运行后,添加的“察看结果树”里,“响应数据”列表会输出这个结果
            results.setDataType(SampleResult.TEXT);
            results.setSuccessful(true);//输出测试结果是否正确,一般assert判断响应结果后设置
            // 被测对象调用
        } catch (Throwable e) {
            results.setSuccessful(false);
            e.printStackTrace();
        } finally {
            results.sampleEnd();// jmeter 结束统计响应时间标记
            System.out.println("结束计时");
        }
        return results;
    }

    /**
     * 每个线程销毁时 会调用一次runTest()方法后会调用此方法.
     */
    public void teardownTest(JavaSamplerContext arg0) {

    }

//    public static void main(String[] args) {
//        // TODO Auto-generated method stub
//        Arguments params = new Arguments();
//        params.addArgument("a", "0");// 设置参数,并赋予默认值0
//        params.addArgument("b", "0");// 设置参数,并赋予默认值0
//        JavaSamplerContext arg0 = new JavaSamplerContext(params);
//        PerformanceTest test = new PerformanceTest();
//        test.setupTest(arg0);
//        test.runTest(arg0);
//        test.teardownTest(arg0);
//    }
}

HttpUtil

package com.xxx.testbase;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Iterator;
import java.util.Map;
import net.sf.json.JSONObject;
import org.apache.http.HttpEntity;
import org.apache.http.StatusLine;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.ContentType;
import org.apache.http.entity.StringEntity;
import org.apache.http.entity.mime.MultipartEntityBuilder;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;
import org.apache.http.util.EntityUtils;

public class HttpUtil {
    private static PoolingHttpClientConnectionManager connMgr;
    private static RequestConfig requestConfig;
    private static final int MAX_TIMEOUT = 7000;
    static {
        // 设置连接池
        connMgr = new PoolingHttpClientConnectionManager();
        // 设置连接池大小
        connMgr.setMaxTotal(100);
        connMgr.setDefaultMaxPerRoute(connMgr.getMaxTotal());

        RequestConfig.Builder configBuilder = RequestConfig.custom();
        // 设置连接超时
        configBuilder.setConnectTimeout(MAX_TIMEOUT);
        // 设置读取超时
        configBuilder.setSocketTimeout(MAX_TIMEOUT);
        // 设置从连接池获取连接实例的超时
        configBuilder.setConnectionRequestTimeout(MAX_TIMEOUT);
        // 在提交请求之前 测试连接是否可用
        configBuilder.setStaleConnectionCheckEnabled(true);
        requestConfig = configBuilder.build();
    }

    public  static String post(String url,JSONObject json,Map<String,String> header){

        // TODO Auto-generated method stubf
//        HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();;
        CloseableHttpClient closeableHttpClient =  HttpClients.createDefault();  ;
        CloseableHttpResponse  httpResponse = null;
        HttpEntity entity = null;
        HttpPost httpPost = new HttpPost(url);
        String response="";
         httpPost.setConfig(requestConfig);
         StringEntity stringEntity = new StringEntity(json.toString(),"UTF-8");//解决中文乱码问题
         stringEntity.setContentEncoding("UTF-8");
         stringEntity.setContentType("application/json");
         httpPost.setEntity(stringEntity);
        for(String key:header.keySet()){
            httpPost.addHeader(key, header.get(key));
        }
        try {

            httpResponse = closeableHttpClient.execute(httpPost);
             entity = httpResponse.getEntity();
             response= EntityUtils.toString(entity,"UTF-8");
        } catch (ClientProtocolException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }catch (Exception e) {
            e.printStackTrace();
        }finally{
            try {
                httpPost.releaseConnection();
                closeableHttpClient.close();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
        return response;
    }

    public  static String post(String url,String json,Map<String,String> header){

        // TODO Auto-generated method stubf
//        HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();;
        CloseableHttpClient closeableHttpClient =  HttpClients.createDefault();  ;
        CloseableHttpResponse  httpResponse = null;
        HttpEntity entity = null;
        HttpPost httpPost = new HttpPost(url);
        String response="";
         httpPost.setConfig(requestConfig);
         StringEntity stringEntity = new StringEntity(json,"UTF-8");//解决中文乱码问题
         stringEntity.setContentEncoding("UTF-8");
         stringEntity.setContentType("application/json");
         httpPost.setEntity(stringEntity);
        for(String key:header.keySet()){
            httpPost.addHeader(key, header.get(key));
        }
        try {

            httpResponse = closeableHttpClient.execute(httpPost);
             entity = httpResponse.getEntity();
             response= EntityUtils.toString(entity,"UTF-8");
        } catch (ClientProtocolException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }catch (Exception e) {
            e.printStackTrace();
        }finally{
            try {
                httpPost.releaseConnection();
                closeableHttpClient.close();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
        return response;
    }

    public static String get(String url, Map<String, String> params,Map<String,String> header) {
        String apiUrl = url;
        StringBuffer param = new StringBuffer();
        int i = 0;
        HttpGet httpGet=null;
        for (String key : params.keySet()) {
            if (i == 0)
                param.append("?");
            else
                param.append("&");
            param.append(key).append("=").append(params.get(key));
            i++;
        }
        apiUrl += param;
        CloseableHttpClient httpclient = HttpClients.createDefault();
        CloseableHttpResponse httpResponse = null;
        String response="";
        try {
             httpGet = new HttpGet(apiUrl);
            httpGet.setConfig(requestConfig);
            for(String key:header.keySet()){
                httpGet.addHeader(key, header.get(key));
            }
            httpResponse = httpclient.execute(httpGet);
            HttpEntity entity = httpResponse.getEntity();
             response= EntityUtils.toString(entity,"UTF-8");
        } catch (IOException e) {
            e.printStackTrace();
        } finally{
            try {
                httpGet.releaseConnection();
                httpclient.close();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
        return response;
    }


}

注意:需在pom.xml文件中添加httpClient依赖, jmeter的依赖,testng的依赖, json依赖。

<dependency>
            <groupId>org.testng</groupId>
            <artifactId>testng</artifactId>
            <version>6.8.1</version>
            <scope>test</scope>
        </dependency>

<dependency>
            <groupId>org.apache.httpcomponents</groupId>
            <artifactId>httpclient</artifactId>
            <version>4.5.7</version>
        </dependency>

<dependency>
            <groupId>net.sf.json-lib</groupId>
            <artifactId>json-lib</artifactId>
            <version>2.2.2</version>
            <classifier>jdk15</classifier>
        </dependency>

<dependency>

    <groupId>org.apache.jmeter</groupId>

    <artifactId>ApacheJMeter_core</artifactId>

    <version>5.0</version>

</dependency>

<dependency>

    <groupId>org.apache.jmeter</groupId>

    <artifactId>ApacheJMeter_java</artifactId>

    <version>5.0</version>

</dependency>

然后打包成jar包,将jar包拷贝到Jmeter的lib/ext目录下。之后启动Jmeter,添加线程组和Java请求。

通过使用Jmeter自定义Java测试代码,再配合Jmeter自带的各种函数,就可以实现绝大多数的性能测试需求。 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

乐minfei

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值