前言
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接口,而这个接口需要实现四个方法:
方法概要说明
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);
}
案例
功能:通过输入 地区码、出生日期、性别,生成一个虚拟身份证号
结果展示:
对应代码:
注意:身份证具体的逻辑实现已通过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;
}
导出jar包
代码编写完成之后,导出jar包,方法JMeter的lib\ext目录下,然后重启JMeter就可以啦~
导出jar的方法之前有写过,具体见:IDEA导出jar包到JMeter-CSDN博客
结语
因为生产身份证比较敏感,这里就不公开jar包啦