详解JMeter Java请求的设计方法

JMeter Java Sampler介绍

我们通常使用jmeter做http或者https请求的测试,但是有些场景我们需要直接调用Java接口进行性能测试, jmeter通过Java请求可以实现该需求(这样就可以处理一些公司自定义的协议了,开发提供协议接口,然后我们通过java sampler进行调用)。本文将会详细介绍jmeter中如何编写  java请求并对其进行调用!

添加java请求

Java请求如下:

其中上图里com.my.demo.JmeterDemo2,即我们需要调用的Java类;str是我们需要传入的参数。那么Jmeter中如何实现对java请求的调用呢?我会在本文详细讲解!

设计Java请求思路与代码解析

如何编写jmeter java请求,简单的说分如下几点

1写一个类,叫做Demo,使其继承AbstractJavaSamplerClient;

2.在public SampleResult

runTest(JavaSamplerContext arg0)方法里,写处理java代码的逻辑;

3.在public Arguments

getDefaultParameters()方法里定义从jmeter中传入java代码的参数;

4.把类Demo 打成jar包并放入jmeter的\lib\ext 目录下(如果Demo需要依赖其它jar包需要一起放入\lib\ext目录下)

实例代码如下:

import org.apache.commons.lang3.StringUtils;

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 JmeterDemo2 extends AbstractJavaSamplerClient

    {

     private SampleResult sr;

     public Arguments getDefaultParameters() {

        Argumentsparams = new Arguments();

        params.addArgument("str", "");

        return params;

     }

     public SampleResult runTest(JavaSamplerContext arg0) {

        this.sr.setSampleLabel("commonsio-demo2");

        try {

         Stringstr=arg0.getParameter("para");

  //使用jar包中StringUtils类的countMatches方法来统计字符串a的个数

         int num=StringUtils.countMatches(str, "a");

         if (num==0) {

            this.sr.setResponseMessage("ResponseMessage:参数匹配0个"); //Sample Result 中的Response message

             this.sr.setResponseData("ResponseData:参数匹配0个","UTF-8"); //Response Data的值,会被后面的覆盖

             this.sr.setSuccessful(true);//Sample Result 中的结果

         }else {

             this.sr.setResponseMessage("ResponseMessage:参数匹配"+num+"个");

             this.sr.setResponseData("ResponseData:参数匹配"+num+"个","UTF-8");

             this.sr.setSuccessful(false);

         }

        }catch (Exception e) {

          this.sr.setResponseMessage(e.getMessage().toString());

          this.sr.setSuccessful(false);

        }finally {

          //this.sr.setResponseData("结束测试", "UTF-8");

        super.getNewLogger().info("####测试执行####");

          try {

           Thread.sleep(500);

       }catch (InterruptedException e) {

           // TODO Auto-generated catch block

           e.printStackTrace();

       }

        }

        return this.sr;

     }

     public void setupTest(JavaSamplerContext context) {

           super.setupTest(context);

           super.getNewLogger().info("####测试开始####");

           this.sr = new SampleResult();

           this.sr.sampleStart();

         }

     public void teardownTest(JavaSamplerContext context) {

         super.teardownTest(context);

         this.sr.sampleEnd();

         super.getNewLogger().info("####测试结束####");

         }

}

这里对上述代码做详细分析:

主要用到的方法如下:

方法执行的先后顺序为:

getDefaultParameters() -->

setupTest(JavaSamplerContext context)-->

runTest(JavaSamplerContext context) -->

teardownTest(JavaSamplerContext context)

代码运行后,打开日志结果如下,参数para 对应代码String str=arg0.getParameter("para");

从日志中可以看到

setupTest(JavaSamplerContext context) 中的代码被执行1次,打印

####测试开始####

teardownTest(JavaSamplerContext context) 中的代码被执行1次,打印

####测试结束####

而runTest中的方法super.getNewLogger().info("####测试执行####"); 被执行5次,因为在线程组中,设置执行5次。(线程组线程执行的次数,影响java请求中的runTest,而不会影响setupTest和teardownTest)。方法super.getNewLogger().info("")会把值写入日志。

setResponseMessage("ResponseMessage:参数匹配0个");打印到Sample Result 中的Response message里;setSampleLabel("commonsio-demo2");设置java请求的显示名称,如下图:

setResponseData("ResponseData:参数匹配0个","UTF-8"); 打印到Response Data,如下图:

最后,方法setSuccessful(true)会影响测试结果

在IDE中开发Jmeter Java 请求

在IDE中开发Jmeter Java 请求与普通java开发一致,引入需要的java包以及jmeter相关jar包:lib\ext下的ApacheJMeter_core.jar和ApacheJMeter_java.jar即可

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
好的,您想了解如何使用Jmeter自定义Java请求,并继承AbstractJavaSamplerClient类。下面是一个简单的示例: 1. 创建一个Java类并继承AbstractJavaSamplerClient类,例如: ``` public class MyJavaSampler extends AbstractJavaSamplerClient { // 实现必要的方法 } ``` 2. 实现runTest方法,这个方法会被Jmeter调用执行,例如: ``` public void runTest(JavaSamplerContext context) { // 获取参数 String arg1 = context.getParameter("arg1"); String arg2 = context.getParameter("arg2"); // 执行业务逻辑 // ... // 设置响应结果 SampleResult result = new SampleResult(); result.setSuccessful(true); result.setResponseCodeOK(); result.setResponseMessage("Success"); result.setResponseData("Response Data".getBytes()); // 设置响应时间 result.sampleEnd(); // 返回响应结果 return result; } ``` 3. 实现getDefaultParameters方法,这个方法会返回默认的参数列表,例如: ``` public Arguments getDefaultParameters() { Arguments args = new Arguments(); args.addArgument("arg1", "default value"); args.addArgument("arg2", "default value"); return args; } ``` 4. 将编译好的Java类打包成jar文件,放到Jmeter的lib/ext目录下。 5. 在Jmeter中添加测试计划,并添加一个Java请求,选择刚才打包好的jar文件和类名。 6. 配置Java请求的参数,例如: ``` arg1=value1 arg2=value2 ``` 7. 运行测试计划,查看响应结果。 以上就是使用Jmeter自定义Java请求的简单示例,希望对您有所帮助。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

测试开发Kevin

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

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

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

打赏作者

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

抵扣说明:

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

余额充值