Jmeter自定义Java请求开发
一、本次实验目的
IDEA新建maven项目,使用java开发自定义jmeter的请求。
本次开发使用的代码,会百度云分享给大家。
二、本次实验环境
|
Idea |
2017.02 |
|
Jmeter |
5.1.1 |
三、新建maven项目
pom.xml文件中导入依赖。
<dependencies>
<!-- https://mvnrepository.com/artifact/org.apache.jmeter/ApacheJMeter_functions -->
<dependency>
<groupId>org.apache.jmeter</groupId>
<artifactId>ApacheJMeter_functions</artifactId>
<version>5.1.1</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.jmeter/ApacheJMeter_core -->
<dependency>
<groupId>org.apache.jmeter</groupId>
<artifactId>ApacheJMeter_core</artifactId>
<version>5.1.1</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.jmeter/ApacheJMeter_java -->
<dependency>
<groupId>org.apache.jmeter</groupId>
<artifactId>ApacheJMeter_java</artifactId>
<version>5.1.1</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.httpcomponents/httpclient -->
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.5.5</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.47</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
</dependencies>
四、代码编写
4.1、以上一节监控的demo实现的两个接口为例,来编写实现请求的自定义请求
打开jmeter,添加javarequest如下图所示:
默认只有两个class。
4.2、新建class实现JavaSamplerClient接口
package com.jmeter.functions;
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 CustemRequest implements JavaSamplerClient {
@Override public void setupTest(JavaSamplerContext javaSamplerContext) {
}
@Override public SampleResult runTest(JavaSamplerContext javaSamplerContext) {
return null;
}
@Override public void teardownTest(JavaSamplerContext javaSamplerContext) {
}
@Override public Arguments getDefaultParameters() {
return null;
}
}
我们可以看到,具体会实现4个方法。
4.3、实现具体方法
启动上一节实现的应用。localhost:8086

具体实现代码如下:
package com.jmeter.functions; import com.alibaba.fastjson.JSONObject;
import org.apache.http.HttpEntity;
import org.apache.http.NameValuePair;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.utils.URIBuilder;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.message.BasicHeader;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;
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; import java.net.URISyntaxException;
import java.util.LinkedList;
import java.util.List;
import java.util.Random; public class CustemRequest implements JavaSamplerClient { //定义显示请求地址的变量名
private static final String REQUEST_RUL = "URL"; //定义默认请求的URL地址
private static final String DEFAULT_URL = "http://localhost:8086/user/get"; //用户输入的URL
private String inputUrl; //用来保存http请求的响应结果,并把结果放到jmeter的查看结果树里面
private String ResponseResult; //返回成功的状态码
private static final int SUCCESS_CODE = 200; //以下方法,打印输出的目的就是检验此4个方法的执行顺序,大家执行的时候可以后台结果详细查看
@Override
public void setupTest(JavaSamplerContext javaSamplerContext) {
System.out.println("******setupTest******");
inputUrl = javaSamplerContext.getParameter(REQUEST_RUL,DEFAULT_URL);
System.out.println("用户默认输出的URL地址------>:" + inputUrl); } /**
* 真正执行的方法
* @param javaSamplerContext
* @return
*/
@Override
public SampleResult runTest(JavaSamplerContext javaSamplerContext) {
SampleResult sampleResult = new SampleResult(); Object[] param = new Object[]{"id"};
Object[] value = new Object[]{26};
List<NameValuePair> nameValuePairs = getParam(param, value);
/**
* 标记一个事务的开始
*/
sampleResult.sampleStart();
try {
ResponseResult = (String) sentGetRequest(inputUrl, nameValuePairs);
} catch (Exception e) {
e.printStackTrace();
}
sampleResult.setSampleLabel("自定义本地的请求访问");
sampleResult.setSuccessful(true); //告诉查看结果树是否成功
sampleResult.setResponseData(ResponseResult,"utf-8");
sampleResult.setDataType(SampleResult.TEXT);
return sampleResult;
} @Override
public void teardownTest(JavaSamplerContext javaSamplerContext) { } @Override
public Arguments getDefaultParameters() {
//在jmeter显示属性
Arguments arguments = new Arguments();
arguments.addArgument(REQUEST_RUL,DEFAULT_URL);
return arguments;
} //自定义实现get请求 /**
* 发送get请求
* @param url 请求URL地址
* @param nameValuePairs 请求参数
* @return JSON或者字符串
* @throws Exception
*/
public static Object sentGetRequest(String url, List<NameValuePair> nameValuePairs) throws Exception{ CloseableHttpClient client = null;
CloseableHttpResponse response = null; try {
/**
* 新建HttpClient对象
*/ client = HttpClients.createDefault(); /**
* 新建URIBuilder
*/
URIBuilder uriBuilder = new URIBuilder(url); /**
* 设置参数
*/
uriBuilder.addParameters(nameValuePairs);
/**
* 创建HttpGet
*/
HttpGet httpGet = new HttpGet(uriBuilder.build());
/**
* 设置请求头部编码
*/
httpGet.setHeader(new BasicHeader("content-Type","application/x-www-form-urlencoded; charset=utf-8"));
/**
* 请求服务
*/
response = client.execute(httpGet); int statusCode = response.getStatusLine().getStatusCode();
if (SUCCESS_CODE == statusCode){
/**
* 获取返回对象
*/
HttpEntity entity = response.getEntity();
/**
* 通过EntityUtils获取返回内容
*/
String result = EntityUtils.toString(entity,"utf-8"); return result;
}else {
System.out.println("请求失败!!!!!!");
} } catch (URISyntaxException e) {
e.printStackTrace();
}finally {
response.close();
client.close();
} return null;
} private static List<NameValuePair> getParam(Object[] params,Object[] values){
/**
* 参数简单校验合法性
*/
boolean flag = params.length>0 && values.length>0 && params.length == values.length;
if (flag){
List<NameValuePair> nameValuePairs = new LinkedList<>();
for (int i = 0 ; i<params.length; i++){
nameValuePairs.add(new BasicNameValuePair(params[i].toString(),values[i].toString()));
}
return nameValuePairs;
}else {
System.out.println("请求参数为空且参数长度不一致");
}
return null;
} public static void main(String[] args) {
Object[] param = new Object[]{"id"};
Object[] value = new Object[]{26};
final String DEFAULT_URL = "http://localhost:8086/user/get";
List<NameValuePair> nameValuePairs = getParam(param, value); try {
String o = (String) sentGetRequest(DEFAULT_URL, nameValuePairs);
System.out.println(o);
} catch (Exception e) {
e.printStackTrace();
}
}
}
4.4、maven到处jar包
- 放到jmeter G:\apache-jmeter-5.1.1\lib\ext目录
- 重新打开jmeter


五、总结
至此我们自定义的java的request的请求已经开发完毕。
有两个问题?后面会一一实现。
- 在代码中如何实现get请求中的id参数化?
- 在代码中如何编写post请求?
Jmeter自定义Java请求开发的更多相关文章
- Jmeter自定义Java请求,继承AbstractJavaSamplerClient
首先,使用Eclipse新建一个项目,然后从Jmeter的lib/ext目录下中拷贝ApacheJMeter_java.jar和ApacheJMeter_core.jar两个文件,然后引入这两个JAR ...
- jmeter之java请求
通常情况下,推荐使用jmeter之java请求编写一beashell调用java代码(上篇)(推荐)编写Java 请求 有以下优势 脚本易维护 易调试 开发脚本周期短 不过网上扩展java请求文章比较 ...
- Jmeter执行Java请求
Jmeter执行Java请求(QQ交流群:577439379) 一.打开Eclipse,创建一个Java工程 二.拷贝jmeter所依赖的jar包 将jmeter中,\lib\ext目录下的Apach ...
- jmeter 的java请求代码在main方法里面执行
1.新建一个java请求执行加法类 public class TestDemo { public int Tdemo(int a,int b){ int sum = 0; sum = a+b; ret ...
- Jmeter扩展组件开发(7) - 自定义java请求的开发
CODE package com.demo;import org.apache.jmeter.config.Arguments;import org.apache.jmeter.protocol.ja ...
- jmeter之自定义java请求性能测试
一.环境准备 1.新建一个java工程 2.导入jar包:ApacheJMeter_core.jar ApacheJMeter_java.jar ...
- 第二篇--Jmeter测试Java请求
前提:需要准备eclipse作为开发工具,安装jdk,准备完毕,接下来开工喽! 1.新建Java工程BMIrisJNIJarTest,新建lib目录,将Jmeter安装目录下lib/ext包下的Apa ...
- 使用Jmeter测试java请求
1.性能测试过程中,有时候开发想对JAVA代码进行性能测试,Jmeter是支持对Java请求进行性能测试,但是需要自己开发.打包好要测试的代码,就能在Java请求中对该java方法进行性能测试2.本文 ...
- 转:JMeter进行Java 请求测试
本文转自:http://blog.csdn.net/xiazdong/article/details/7873767 向原作者致敬,看了他的文章才让我顺利解决了JMeter测试中的问题,万分感谢! 目 ...
随机推荐
- Win8 Metro(C#)数字图像处理--2.60部分彩色保留算法
原文:Win8 Metro(C#)数字图像处理--2.60部分彩色保留算法 [函数名称] 部分彩色保留函数 WriteableBitmap PartialcolorProcess ...
- qmake.exe是在Qt安装编译时生成的,里面内嵌了Qt相关的一些路径(最简单的方法是保持一样的安装路径,最方便的办法是设置qt.conf文件)
在网上直接下载别人编译好的Qt库,为自己使用省了不少事.但往往也会遇到些问题,其中Qt version is not properly installed,please run make instal ...
- spring.net的简单使用(四)对象属性注入
创建了对象,如果是简单对象就到此为止,如果是复杂对象,则需要为它的属性赋值. 属性赋值有两种方法:属性注入和构造器注入. 一.属性注入 在object节点下使用property就是属性注入,如下: & ...
- Java MaxDirectMemorySize
Refer to for detail: https://dzone.com/articles/default-hotspot-maximum-direct-memory-size 1. Java d ...
- CentOS 如何删除/delete/remove 老的 kernel
package-cleanup --oldkernels --count=1
- 【转】简单的jQuery插件开发方法
在实际开发工作中,总会碰到像滚动,分页,日历等展示效果的业务需求,对于接触过jQuery以及熟悉jQuery使用的人来说,首先想到的肯定是寻找现有的jQuery插件来满足相应的展示需求.目前页面中常用 ...
- Qt4编译生成VS静态库(静态编译),有三个bat文件 good
开发环境:vs2008+Qt4.8.4源码库 其他环境请自己尝试,原理应该是差不多的 Qt编译生成静态库 1. 本教程只针对在win32平台,使用VS开发工具(例子以VS2008为例) ...
- 学习Java,值得你留意的问题(1)更名为《学习Java,容易被你忽略的小细节(1)》
记得大二快要结束的时候,有个女孩子突然问我“你会Java吗,帮我做大作业好吗?” 实话说,那个女孩真的很漂亮,我当时也非常想帮她.但是我从来没有接触过Java,让我在短短的几天内完成Java程序设计课 ...
- 修改zookeeper jvm参数
在zkServer.sh中,增加以下参数: start) echo -n "Starting zookeeper ... " if [ -f $ZOOPIDFILE ...
- sqlserver/mysql按天,按小时,按分钟统计连续时间段数据
文 | 子龙 有技术,有干货,有故事的斜杠青年 一,写在前面的话 最近公司需要按天,按小时查看数据,可以直观的看到时间段的数据峰值.接到需求,就开始疯狂百度搜索,但是搜索到的资料有很多都不清楚,需要自 ...