一、引言
JMeter是Apache基金会开发的一款开源性能测试工具,广泛应用于软件性能测试领域。它能够模拟多线程并发用户对应用程序进行压力测试,以评估应用程序的性能和稳定性。然而,在实际使用过程中,用户可能会遇到需要发送Java请求的场景,例如测试Java Web应用程序或其他支持Java RESTful API的服务。本文将介绍如何在JMeter中发送Java请求,并给出一些实用的技巧和注意事项。
二、java请求简介
查阅以往资料,现探究出两种jmater发送Java请求的方式,第一种通过将自己打包的jar通过jmeter函数助手的方式引用到java请求中,第二种是通过java请求直接引入jar包的方式,通过添加Beanshell取样器打印日志的方式,查看返回的结果。现将两种方式分别介绍。
三、实操
3.1jmeter函数二次开发
3.1.1思路
- JMeter提供了接口给用户进行二次开发,其中接口可通过引入ApacheJMeter_components.jar、ApacheJMeter_core.jar两个包获取。(或许你看到别人介绍所要用的jar包会更多,其实正常开发就这两个,所以至少保证有这两个包即可)
- 开发的代码需要符合JMeter的规范:第一,新建的包名称必须是以 functions 结尾;第二,方法类需要继承AbstractFunction类,而AbstractFunction类中有四个要实现的函数,其中我们要实现的功能需要结合这四个函数实现。
3.2.2环境准备
3.2.2.1添加依赖包
- 依赖的业务相关jar放到lib目录下
- jmeter相关jar放到ext目录下
- 两个jar包在JMeter安装目录下的\lib\ext 文件夹,在工程里新建一个lib目录,把jar包放进去,然后添加到项目工程里
- ApacheJMeter_components.jar
- ApacheJMeter_core.jar
- 两个jar包在JMeter安装目录下的\lib\ext 文件夹,在工程里新建一个lib目录,把jar包放进去,然后添加到项目工程里
3.2.2.2重写AbstractFunction类中的方法
创建的包以functions结尾,同时创建的类继承AbstractFunction类,并重写类中的方法;
3.2.2.3AbstractFunction类四个方法的简单介绍
函数概要说明:
3.2.3案例分享
新建java代码后,将java代码打包传入jmeterext目录下
package com.functions;import org.apache.jmeter.engine.util.CompoundVariable;
import org.apache.jmeter.functions.AbstractFunction;
import org.apache.jmeter.functions.InvalidVariableException;
import org.apache.jmeter.samplers.SampleResult;
import org.apache.jmeter.samplers.Sampler;import java.util.Collection;
import java.util.LinkedList;
import java.util.List;public class HelloFunction extends AbstractFunction {//在jmeter中,约定俗成要求函数的名称必须是以"__"开头。private final static String key = "__hello";private static List<String> params = new LinkedList<String>();static {params.add("请输入用户名");params.add("请输入性别: 男or女");}public String username = "";public String sex = "";//用来定义函数的主体,即函数的结果由该方法来返回@Overridepublic String execute(SampleResult sampleResult, Sampler sampler) throws InvalidVariableException {String result = "";if(sex.equals("男")){result = username+",先生你好。";} else if (sex.equals("女")) {result = username+",女士你好。";}else {result = "无名氏你好,请问你是男是女?";}return result;}//用来接收和处理用户调用函数时所传入的参数值@Overridepublic void setParameters(Collection<CompoundVariable> arg0) throws InvalidVariableException {checkParameterCount(arg0,2);Object[] data = arg0.toArray();username = ((CompoundVariable)data[0]).execute();sex = ((CompoundVariable)data[1]).execute();}//用来定义函数的名称@Overridepublic String getReferenceKey() {return key;}//用来定义函数的参数列表@Overridepublic List<String> getArgumentDesc() {return params;}
}
重启jmeter,在函数助手中即可看到此java请求,示例如下
结果返回
3.2java请求二次开发
3.2.1实现目的
- java方法打成jar包
- jmeter二次开发调用该jar包方法
- 响应结果保存为jmeter参数,供别的请求使用
3.2.2案例分享
3.2.2.1 java方法示例, 将以下方法打包
package com.gmrz.test;public class TestAdd {public int add(int a,int b){return a+b;}public static void main(String[] args) {TestAdd testAdd = new TestAdd();System.out.println(testAdd.add(1,7));}
}
3.2.2.2 新建一个maven,用于二次开发
导入jmeter二次开发核心jar包和加法jar包
3.2.2.3写个简单类,调用加法方法
package com.gmrz.jmeter;import com.gmrz.TestAdd;
import org.apache.jmeter.config.Arguments;
import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;
import org.apache.jmeter.protocol.java.sampler.AbstractJavaSamplerClient;
import org.apache.jmeter.samplers.SampleResult;
import org.apache.jmeter.threads.JMeterContextService;
import org.apache.jmeter.threads.JMeterVariables;public class JmeterSend1 extends AbstractJavaSamplerClient{public void setupTest(JavaSamplerContext context){System.out.println("start");}public void teardownTest(JavaSamplerContext context) {System.out.println("end");}public SampleResult runTest(JavaSamplerContext context) {TestAdd t = new TestAdd();SampleResult s = new SampleResult();s.sampleStart(); // 开始统计响应时间,取样器开始运行s.setSampleLabel("client"); //聚合报告里的lable名称JMeterVariables vars = JMeterContextService.getContext().getVariables();String first = context.getParameter("a"); //获取jmeter传递的参数String second = context.getParameter("b");Integer a = Integer.parseInt(first);Integer b = Integer.parseInt(second);try {vars.put("result", String.valueOf(t.add(a,b))); //jmeter参数变量名称s.setSamplerData("参数a:"+first+"\t参数b:"+second); //设置请求的数据,在查看结果树中可以看到s.setResponseCode("200");s.setResponseMessage("Success"); //没这个请求会变红s.setSuccessful(true);s.sampleEnd();return s;}catch (Exception e){e.printStackTrace();}s.setResponseCode("500");s.setResponseMessage("fail");return s;}public Arguments getDefaultParameters() {//提取jmeter传递的参数Arguments args = new Arguments();args.addArgument("a", "");args.addArgument("b", "");System.out.println("get Arguments");return args;}
}
3.2.2.4打好的jar包放入jmeter:/lib/ext 下
打开jmeter,此方法即为新加的java请求
返回此java请求的结果
四、总结
在本文中,我们详细介绍了如何在JMeter中发送Java请求,包括使用JMeter内置的Java请求处理器和编写自定义的Java代码来实现复杂的请求。
通过本文的教程,读者应该能够掌握JMeter发送Java请求的基本步骤和技巧。为了更好地理解和应用这些知识,建议读者在实际项目中尝试使用JMeter进行Java请求的发送,并根据实际情况进行调整和优化。
总而言之,JMeter是一款强大的性能测试工具,能够帮助开发人员和测试人员模拟真实用户的行为,对应用程序进行全面的性能测试。掌握JMeter发送Java请求的方法和技巧,将有助于提高软件质量和用户体验。希望本文能够为您提供有益的指导,祝您在性能测试领域取得更好的成果!