一、引言
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 = "";
//用来定义函数的主体,即函数的结果由该方法来返回
@Override
public 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;
}
//用来接收和处理用户调用函数时所传入的参数值
@Override
public void setParameters(Collection<CompoundVariable> arg0) throws InvalidVariableException {
checkParameterCount(arg0,2);
Object[] data = arg0.toArray();
username = ((CompoundVariable)data[0]).execute();
sex = ((CompoundVariable)data[1]).execute();
}
//用来定义函数的名称
@Override
public String getReferenceKey() {
return key;
}
//用来定义函数的参数列表
@Override
public 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请求的方法和技巧,将有助于提高软件质量和用户体验。希望本文能够为您提供有益的指导,祝您在性能测试领域取得更好的成果!