Jmeter发送java请求压测脚本

1.maven中引入jmeter包

 <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>
  1. 编写脚本
package com;

// import com.google.gson.Gson;
// import com.GsonUtil;
// import org.apache.commons.collections.MapUtils;
// import org.apache.commons.lang.RandomStringUtils;
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 org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.io.File;
import java.io.FileNotFoundException;
import java.util.*;

/**
 * Created on 2019/12/9.
 */
public class forJMtest extends AbstractJavaSamplerClient {
    int num = 0;
    Logger logger = LoggerFactory.getLogger(forJMtest.class);
    private String paramInput;
    String ApiImplCode;
    String ldc;
    Api****Service service = null;
    File fs = null;
    Scanner sc = null;
    String images = null;
    List sb = new ArrayList();
//    List jsons = new ArrayList();
//    List json2 = new ArrayList();
//    String  nums ;

    public forJMtest() throws FileNotFoundException {
    }
    public Arguments getDefaultParameters() {
    // 设置默认参数
        Arguments args = new Arguments();
        args.addArgument("ApiImplCode", "picsearch_shopping");
        args.addArgument("paramInput", "file_pic_path");
        args.addArgument("ldc", "XXXX");
        return args;
    }

    @Override
    public void setupTest(JavaSamplerContext context) {
        this.logger.info("enter setupTest");
        this.paramInput = context.getParameter("paramInput");
        this.ldc = context.getParameter("ldc");
        System.setProperty("ldc", this.ldc);
        super.setupTest(context);
        fs = new File(this.paramInput);
        try {
            sc =new Scanner(fs);
            while (sc.hasNext()) {
                sb.add(sc.next());
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }

        this.ApiImplCode = context.getParameter("ApiImplCode");
        ServiceLocator.lazyInitAgent = false;
        this.service = ServiceLocator.getService("com.***.api.***.service.*******Service",this.ApiImplCode);
    }

    public SampleResult runTest(JavaSamplerContext javaSamplerContext) {
        String strs="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
        Random random=new Random();
        StringBuffer sbs=new StringBuffer();
        for(int i=0;i<32;i++){
            int number=random.nextInt(62);
            sbs.append(strs.charAt(number));
        };
        String str = "{\n" +
                "  \"picUrl\": \"picture\",\n" +
                "  \"picBase64\": \"\",\n" +
                "  \"picType\": \"Type_URL\",\n" +
                "  \"msgId\": \""+sbs.toString()+"\"\n" +
                "}";
        num = num%(sb.size())+1;
        this.images= str.replaceAll("picture",(String)sb.get(num-1));
//        this.logger.info("第请求参数: " + this.images);
        SampleResult sr = new SampleResult();
        sr.setSuccessful(true);
        sr.sampleStart();
        try {
            String result = service.execute(this.images);
            sr.setResponseData(result, "utf8");
            this.logger.info("result:" + result);
        } catch (ServiceException ex) {
            sr.setSuccessful(false);
            sr.setResponseData("业务异常", "utf8");
            this.logger.error("业务异常", ex);
        } catch (ExceedActiveLimitException ex) {
            sr.setSuccessful(false);
            sr.setResponseData("超出控制方消费阈值", "utf8");
            this.logger.error("超出控制方消费阈值", ex);
        } catch (InvalidAccessException ex) {
            sr.setSuccessful(false);
            sr.setResponseData("消费方无权限访问该服务", "utf8");
            this.logger.error("消费方无权限访问该服务", ex);
        } catch (ExceedRetryLimitException ex) {
            sr.setSuccessful(false);
            sr.setResponseData("超出重试次数,调用失败,请求明细异常", "utf8");
            this.logger.error("超出重试次数,调用失败,请求明细异常" + ex.getExceptions());
            if (ex.exceedConcurrencyThreshold()) {
                this.logger.error("超出服务方流控阈值", ex);
            }
        } catch (TimeoutException ex) {
            sr.setSuccessful(false);
            sr.setResponseData("调用超时", "utf8");
            this.logger.error("调用超时", ex);
        } catch (***Exception ex) {
            sr.setSuccessful(false);
            sr.setResponseData("其他框架异常", "utf8");
            this.logger.error("其他框架异常", ex);
        }
        sr.sampleEnd();
        return sr;
    }
}

3.打包:

(1).mvn clean install -Dtest -DfailIfNoTests=false -Dmaven.javadoc.skip=true
(2).mvn assembly:assembly (打依赖包需要注释掉 pom文件中jmeter的依赖.)
将打好的jar包放入jmeter /lib/ext 目录下.

4.打开jmeter 创建线程组-添加java请求

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值