JMeter之Java请求(附案例)

前言

JMeter中Java请求是什么?

Java请求属于JMeter里的取样器,简单使用跟Beanshell差不多,都能够实现运行一定的Java代码逻辑,但Java请求功能更强大。

为什么要用Java请求

这得看自己的需求,如一些压测场景,需要对mq等中间件进行压测、或非正常HTTP请求等,就可以使用Java编写代码之后,再放进JMeter的Java请求中进行请求压测。

怎么写自己的Java请求

接下来就是本篇文章的正式内容了。

环境准备

上一篇,我们讲到 JMeter自定义函数的开发

其中,有讲到开发自定义函数需要JMeter的依赖包及JMeter开发规范,同样的,我们开发Java请求时,也需要遵循一定的规则:

第一、依赖包:同样的,开发Java请求,需要添加jmeter提供的接口,而接口需导入jmeter的jar包获得。

在工程目录里创建一个lib文件夹,把jar包放进去。IDEA中给项目添加依赖的jar包-CSDN博客,包的位置:

\lib\ext

  • ApacheJMeter_core.jar
  • ApacheJMeter_java.jar

\lib

  • slf4j-api-1.7.25.jar
  • jorphan.jar
  • oro-2.0.8.jar(大于等于 JMeter 5.3之后需要增加这个包)

第二、继承接口及实现的方法:开发Java请求,需在类中实现JavaSamplerClient接口,而这个接口需要实现四个方法:

JMeter之Java请求(附案例)_第1张图片

 方法概要说明

import org.apache.jmeter.config.Arguments;
import org.apache.jmeter.protocol.java.sampler.JavaSamplerClient;
import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;
import org.apache.jmeter.samplers.SampleResult;

public class Test implements JavaSamplerClient {

    @Override
    public void setupTest(JavaSamplerContext javaSamplerContext) {
        //在执行runTest方法前执行
    }

    @Override
    public SampleResult runTest(JavaSamplerContext javaSamplerContext) {
        //逻辑执行函数
        return null;
    }

    @Override
    public void teardownTest(JavaSamplerContext javaSamplerContext) {
        // runTest执行完了之后运行的

    }

    @Override
    public Arguments getDefaultParameters() {
        //接收用户传参
        return null;
    }
}

JMeter实际调用顺序

public static void main(String[]args){
        //模拟jmeter执行调用
        CardTool cardtool = new CardTool();
//        Arguments arguments = new Arguments();
        JavaSamplerContext context = new JavaSamplerContext(cardtool.getDefaultParameters());
        cardtool.setupTest(context);
        cardtool.runTest(context);
        cardtool.teardownTest(context);
    }

案例

功能:通过输入 地区码、出生日期、性别,生成一个虚拟身份证号

结果展示: 

JMeter之Java请求(附案例)_第2张图片

JMeter之Java请求(附案例)_第3张图片

 对应代码:

注意:身份证具体的逻辑实现已通过IdNumTool类实现,这已经封装好了,这里只是调用即可;

package com;
import org.apache.jmeter.config.Arguments;
import org.apache.jmeter.protocol.java.sampler.JavaSamplerClient;
import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;
import org.apache.jmeter.samplers.SampleResult;


public class CardTool implements JavaSamplerClient {
    //调试
    public static void main(String[]args){
        //模拟JMeter执行调用顺序
        CardTool cardtool = new CardTool();
//        Arguments arguments = new Arguments();
        JavaSamplerContext context = new JavaSamplerContext(cardtool.getDefaultParameters());
        cardtool.setupTest(context);
        cardtool.runTest(context);
        cardtool.teardownTest(context);
    }

    //setupTest  每个线程执行一次
    @Override
    public void setupTest(JavaSamplerContext javaSamplerContext) {
        System.out.println("-----------------java请求:setupTest-----------------");
    }

    //执行业务,一个sample请求
    //这个函数是有返回值的
    @Override
    public SampleResult runTest(JavaSamplerContext javaSamplerContext) {
        System.out.println("-----------------java请求:runTest-----------------");

        SampleResult sampleResult = new SampleResult();
        sampleResult.setSampleLabel("生成身份证");
        //请求开始
        sampleResult.sampleStart();

        //调用idNumTool.getidcard方法,生成身份证号
        String response;
        IdNumTool idNumTool  = new IdNumTool();
        String idcard = idNumTool.getidcard(javaSamplerContext.getParameter("card_code"),javaSamplerContext.getParameter("card_birthday"),javaSamplerContext.getParameter("card_sex"));

         //设置请求内容
        String samplerdata ="card_code"+":"+ javaSamplerContext.getParameter("card_code")+","+"card_birthday"+":"+ javaSamplerContext.getParameter("card_birthday")+","+"card_sex"+":"+javaSamplerContext.getParameter("card_sex");

        if(idcard.length() == 18){
            sampleResult.setSuccessful(true); //使采样器请求成功(表变绿)
            response = "{\"code\":0,\"msg\":\"请求成功\",\"idcard\": "+ idcard+" }";
        }else {
            sampleResult.setSuccessful(false); //使采样器请求失败(变红)
            response = "{\"code\":500,\"msg\":\"身份证生产异常\"}";
        }
        sampleResult.setResponseData(response,"UTF-8");

        return sampleResult;
    }

    //teardownTest 每个线程执行一次
    @Override
    public void teardownTest(JavaSamplerContext javaSamplerContext) {
        System.out.println("-----------------java请求:teardownTest-----------------");
    }

    @Override
    public Arguments getDefaultParameters() {
        Arguments arguments = new Arguments();
        //参数code跟默认值
        arguments.addArgument("card_code","430922");
        arguments.addArgument("card_birthday","1992-10-01");
        arguments.addArgument("card_sex","1");
        return arguments;
    }
}

 函数说明

getDefaultParameters方法

接收用户的传参及设置默认值。

public Arguments getDefaultParameters() {
	Arguments arguments = new Arguments();
	//参数code跟默认值
	arguments.addArgument("card_code","430922");
	arguments.addArgument("card_birthday","1992-10-01");
	arguments.addArgument("card_sex","1");

	return arguments;
}

JMeter之Java请求(附案例)_第4张图片

导出jar包

代码编写完成之后,导出jar包,方法JMeter的lib\ext目录下,然后重启JMeter就可以啦~

导出jar的方法之前有写过,具体见:IDEA导出jar包到JMeter-CSDN博客

结语

因为生产身份证比较敏感,这里就不公开jar包啦

你可能感兴趣的:(#,JMeter,java,开发语言)