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测试中的问题,万分感谢! 目 ...
随机推荐
- 【shell】分享高通平台刷版本简单的一个shell脚本
#!/bin/shadb wait-for-deviceadb reboot bootloaderecho "start download"wait 5sudo fastboot ...
- Win8Metro(C#)数字图像处理--2.12Sobel边缘检测
原文:Win8Metro(C#)数字图像处理--2.12Sobel边缘检测 [函数名称] 图像Sobel边缘检测函数SobelEdgeProcess(WriteableBitmap src) [ ...
- vs调试cordova app时 scriptedsandbox64.exe已停止工作的错误处理方法
1.把ie更新到版本11 2.去掉 选项->调试->调试时启动诊断工具 有时候调试会启动失败,提示版本过低,再一次点击调试就可以了.
- VS下对Resx资源文件的操作
原文:VS下对Resx资源文件的操作 读取 using System.IO; using System.Resources; using System.Collections; using Syste ...
- 用vs2010编译好的ICU库
1.ICU库的官网网址为http://site.icu-project.org/ 2.ICU(International Components for Unicode)是一个国际化的字符编码和转化的库 ...
- Google三驾马车:GFS、MapReduce和Bigtable
谈到分布式系统,就不得不提Google的三驾马车:Google fs[1],Mapreduce[2],Bigtable[3]. 虽然Google没有公布这三个产品的源码,但是他发布了这三个产品的详细设 ...
- Cloudera Impala需求
Cloudera Impala需求 为了达到预期的效果,Impala依赖于软件.硬件的可用性,以及下面章节描述的配置. 继续阅读: 支持的操作系统 支持的Hadoop发布 Hive Metastore ...
- Dynamics 365中的事件框架与事件执行管道(Event execution pipeline)
本文介绍了Microsoft Dynamics 365(以下简称D365)中的两个概念,事件框架(Event Framework)与事件执行管道(Event execution pipeline). ...
- 【web自动化测试】requests-html 这个解析库,能让你更轻松的获取网页内容
1. 开始 Python 中可以进行网页解析的库有很多,常见的有 BeautifulSoup 和 lxml 等.在网上玩爬虫的文章通常都是介绍 BeautifulSoup 这个库,我平常也是常用这个库 ...
- sql关联查询—将一个表的查询结果作为新表进行查询操作
例题:# 各个部门中 最高工资中最低的那个部门的 最低工资是多少? 先考虑取得各个部门最高工资 SELECT MAX(salary) AS max_salary,e.`department_id` ...