jmeter压测java方法

2017-07-28  本文已影响516人  abaeccdce206

场景:测试支付接口,需要一个对参数加密。本次先用求和算法代替

 实现方式
 1:实现自定义方法,如下 public int sum(int a,int b)
public class MathTest {
   
    public int sum(int a,int b)
    {
        return a+b;
    }

    
}

需要的jar包

JMETER_HOME\lib\ext目录下copy
1:ApacheJMeter_core.jar 
2: ApacheJMeter_java.jar

jmeter调用自定义代码方法

 */
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;

public class JmeterHttpTest extends AbstractJavaSamplerClient    {

//    private SampleResult sampleresult = new SampleResult();
    private MathTest test=null;
    private static long start = 0;
    private static long end = 0;
    private String resultData;

    //把测试的一些默认数据在程序运行前显示到JMeter客户端
    @Override
    public Arguments getDefaultParameters()
    {
        Arguments params = new Arguments();
        params.addArgument("key1","1");
        params.addArgument("key2","2");
        return params;
    }

    //子类用它来 记录log
//    protected org.apache.log.Logger getLogger()
//    {
//        return null;
//    }

    //初始化方法,实际运行时每个线程仅执行一次,在测试方法运行前执行
    public void setupTest(JavaSamplerContext context)
    {
        //获取界面中传递的值
        String value1 = context.getParameter("key1");
        //获取界面中传递的值
        String value2 = context.getParameter("key2");
        test=new MathTest();
        start = System.currentTimeMillis();
    }
    //测试执行的循环体,根据线程数和循环次数的不同可执行多次


    public SampleResult runTest(JavaSamplerContext context) {

        //获取界面中传递的值
        String value1 = context.getParameter("key1");
        //获取界面中传递的值
        String value2 = context.getParameter("key2");
        int num1= Integer.parseInt(value1);
        int num2= Integer.parseInt(value2);
        SampleResult sampleresult = new SampleResult();



        sampleresult.setSamplerData("请求参数num1:"+num1+"\n请求参数num2:"+num2);
//        private SampleResult sampleresult = new SampleResult();

        // TODO Auto-generated method stub
        try {
            sampleresult.sampleStart();
            resultData = String.valueOf(test.sum(num1,num2));
            if (resultData != null && resultData.length() > 0) {
                sampleresult.setResponseData("结果是:"+resultData, null);
                sampleresult.setDataType(SampleResult.TEXT);
                sampleresult.setSuccessful(true);
            }


        } catch (Exception e) {
            sampleresult.setSuccessful(false);
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        finally {
            sampleresult.sampleEnd();// jmeter 结束统计响应时间标记
        }
//        sampleresult.sampleEnd();//重复结束,删除
        return sampleresult;
    }

    //结束方法,实际运行时每个线程仅执行一次,在测试方法运行结束后执行
    public void teardownTest(JavaSamplerContext context)
    {
        end = System.currentTimeMillis();
        // 总体耗时
        System.err.println("cost time:" + (end - start) + "毫秒");
    }

}

注意点:

  1: sampleresult.sampleStart();开始记时间。
  2: sampleresult. sampleEnd();开始记时间。
  3: params.addArgument("key1","1"); 添加默认参数
  4:sampleresult.setSuccessful(true); 自定义断言结果

操作步骤,将代码工程导出为可执行jar

1:利用jmeter自带java请求调用自定义方法步骤

1⃣️将此jar包放入JMETER_HOME\lib\ext目录;
2⃣️重启jmeter
3⃣️建线程组、Java Request、查看结果树,进行测试;

如下图选择自己的jar,key 1 和 key2 可自定义,其他和测试http 请求一致

image.png

2:在jmeter中直接编写java代码

1:如果自己的jar过多,可以在jmeter根目录下新建一个文件夹如cxf
 2:在jmeter_home/bin/jmeter.properties文件中添加
    plugin_dependency_paths=./cxf

新建BeanShell Sampler

${x} ${y}空格隔开
x和y取自定义变量

调试的时候,打开选项-log Viewer

image.png
上一篇下一篇

猜你喜欢

热点阅读