在使用jmeter进行性能测试的时候,有可能会需要通过一些脚本去测试性能,(比如通过sokeeper的api去测试sokeeper的读写性能)。这时,我们可以通过Java Request实现,以下是操作步骤。

首先创建一个maven project。

因Jmeter的Java Request脚本依赖Jmeter的一些核心jar包,所以我们要maven项目的pom文件中添加Jmeter的一些依赖包:ApacheJMeter_core、ApacheJMeter_java:

编写Java Sample,继承AbstractJavaSample,并重写以下方法:

public Arguments getDefaultParameters();可选,定义可用参数及默认值;

·  public void setupTest(JavaSamplerContext arg0):可选,测试前执行,做一些初始化工作;

·  public SampleResult runTest(JavaSamplerContext arg0);必选,实现自定义请求;

·  public void teardownTest(JavaSamplerContext arg0):可选,测试结束时调用;

示例代码:

import org.apache.curator.RetryPolicy;

import org.apache.curator.framework.CuratorFramework;

import org.apache.curator.framework.CuratorFrameworkFactory;

import org.apache.curator.retry.ExponentialBackoffRetry;

import org.apache.curator.utils.EnsurePath;

import org.apache.jmeter.config.Arguments;

import org.apache.jmeter.protocol.java.sampler.AbstractJavaSamplerClient;

import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;

import org.apache.jmeter.samplers.SampleResult;

public class CuratorRequestSample extends AbstractJavaSamplerClient {

protected CuratorFramework client = null;

protected long subCount = 1l;

protected long TOTAL_SUB_COUNT = 100000l;

/**

* 定义可用参数及默认值

*/

public Arguments getDefaultParameters() {

Arguments params = new Arguments();

params.addArgument("connect_str", "192.168.103.136:2181,192.168.103.154:2181");

// 设置参数,并赋予默认值0

return params;

}

/**

* 可选,测试前执行,做一些初始化工作,在Jmeter执行的时候,一个Thread只执行一次setupTest方法

*/

public void setupTest(JavaSamplerContext context) {

String connect_str = context.getParameter("connect_str");

RetryPolicy retryPolicy = new ExponentialBackoffRetry(1000, 4);

client =

CuratorFrameworkFactory.builder().connectString(connect_str)

.connectionTimeoutMs(3000).namespace("curator_sample")

.sessionTimeoutMs(5000).retryPolicy(retryPolicy).build();

client.start();

EnsurePath ensure = new EnsurePath("/curator_sample/setData");

try {

ensure.ensure(client.getZookeeperClient());

} catch (Exception e) {

e.printStackTrace();

}

}

/**

* 可选,测试结束时调用,用于资源释放,一个Thread只执行一次

*/

public void teardownTest(JavaSamplerContext context) {

client.close();

}

/**

* 必选,实现自定义请求

*/

public SampleResult runTest(JavaSamplerContext arg0) {

SampleResult resuts = new SampleResult();

resuts.sampleStart();

try {

byte[] bytes = client.getData().forPath("/setData");

resuts.setSuccessful(true);

} catch (Exception e) {

resuts.setSuccessful(false);

}

resuts.sampleEnd();

return resuts;

}

}

然后,把项目打成jar包,并将包放到${jmeter_home}/lib/ext/目录下。如还需要依赖第三方jar,需要将第三方的jar也放到${jmeter_home}/lib/ext/目录下。

启动Jmeter。

创建线程组:

创建Java Request Sample:

此时,会在Java请求页面的“类名称”下拉列表中看到我们之前写的Java Request脚本:

选中其中一个要测试的脚本,可以看到配置的参数:

然后再添加Summary Report即可,保存测试计划。设置线程组属性,执行测试计划。即可。

优化技巧一

很多情况下我们在编写Java Sample时,需要编写多个Java Sample,且这些Java Sample之间,拥有共同的资源初始化操作、资源释放操作,只是在核心业务不同而已,这时,我们可以封装一个基类。例:

import org.apache.curator.RetryPolicy;

import org.apache.curator.framework.CuratorFramework;

import org.apache.curator.framework.CuratorFrameworkFactory;

import org.apache.curator.retry.ExponentialBackoffRetry;

import org.apache.curator.utils.EnsurePath;

import org.apache.jmeter.config.Arguments;

import org.apache.jmeter.protocol.java.sampler.AbstractJavaSamplerClient;

import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;

import org.apache.jmeter.samplers.SampleResult;

/**

* Curator的Java请求测试基类

*

* @author majian

* @version 1.0, 2016-2-22

* @since 1.0, 2016-2-22

*/

public abstract class CuratorBaseRequest extends AbstractJavaSamplerClient {

protected CuratorFramework client = null;

protected long subCount = 1l;

protected long TOTAL_SUB_COUNT = 100000l;

/**

* 定义可用参数及默认值

*/

public Arguments getDefaultParameters() {

Arguments params = new Arguments();

params.addArgument("connect_str", "192.168.103.136:2181,192.168.103.154:2181");// 设置参数,并赋予默认值0

return params;

}

/**

* 可选,测试前执行,做一些初始化工作,在Jmeter执行的时候,一个Thread只执行一次setupTest方法

*/

public void setupTest(JavaSamplerContext context) {

String connect_str = context.getParameter("connect_str");

RetryPolicy retryPolicy = new ExponentialBackoffRetry(1000, 4);

client =

CuratorFrameworkFactory.builder().connectString(connect_str)

.connectionTimeoutMs(3000).namespace("curator_sample")

.sessionTimeoutMs(5000).retryPolicy(retryPolicy).build();

client.start();

EnsurePath ensure = new EnsurePath("/curator_sample/setData");

try {

ensure.ensure(client.getZookeeperClient());

} catch (Exception e) {

e.printStackTrace();

}

}

/**

* 可选,测试结束时调用,用于资源释放,一个Thread只执行一次

*/

public void teardownTest(JavaSamplerContext context) {

client.close();

}

/**

* 必选,实现自定义请求

*/

public SampleResult runTest(JavaSamplerContext arg0) {

SampleResult resuts = new SampleResult();

resuts.sampleStart();

try {

testHandler();

resuts.setSuccessful(true);

} catch (Exception e) {

resuts.setSuccessful(false);

}

resuts.sampleEnd();

return resuts;

}

/**

* 核心业务执行功能实现,只需实现此接口即可

* @throws Exception

*/

public abstract void testHandler() throws Exception;

}

然后我们可以创建不同的Java请求,继承这个基类,只需实现testHandler()方法即可。如:

curator获取数据的Java Request:

public class GetDataRequest extends CuratorBaseRequest {

public void testHandler() throws Exception {

byte[] bytes = client.getData().forPath("/setData");

}

}

Curaotr设置数据的Java Request:

import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;

public class SetDataRequest extends CuratorBaseRequest {

private byte[] a100 = new byte[100];

public void setupTest(JavaSamplerContext context) {

for (int i = 0; i

a100[i] = 'A';

}

super.setupTest(context);

}

public void testHandler() throws Exception {

client.setData().forPath("/setData", a100);

}

}

这样,可以避免大量的冗余代码。

优化技巧二

在编写完Java Sample后,每次都需要我们打成jar包,然后再复制jar包到${jmeter_home}\lib\ext下,然后再重起jmeter,这样操作比较繁琐。这时,我们可以通过在maven项目中添加一个maven插件来帮助我们简化操作。

org.apache.maven.plugins

maven-antrun-plugin

copy-files

package

overwrite="true" />

run

如此,我们便可在执行mvn package命令的时候,自动将项目打包,并将包复制到指定的目录下了,我们只需再重启jmeter就可以了。

java jmeter_使用Jmeter中的Java Request进行性能测试相关推荐

  1. jmeter里看java的log,jmeter中java协议请求

    5.Export为Runnable Jar File:hello.jar 注意:不需要将整个工程导出,只需要选中包名(test)在file菜单中点击export->选java项的jar file ...

  2. eclipse java 7_在Eclipse中编程Java 7

    我安装了JDK 7和Eclipse 3.6M6.然后,我将JRE 7添加为Eclipse中的新JRE执行环境,并将编译器的遵从性级别设置为Java7.我可以使用javacJDK 7随附的命令行通过命令 ...

  3. 【开发环境】Android 命令行中执行 Java 程序 ( IntelliJ IDEA 中创建 Java / Kotlin 工程 | dx 打包 DEX 字节码文件 | dalvikvm 命令 )

    文章目录 前言 一.IntelliJ IDEA 中创建 Java / Kotlin 工程 二.准备 Java 和 Kotlin 代码 三.编译在 PC 上可执行的 Java / Kotlin JAR ...

  4. linux收缩java位置,找到linux中当前java的安装位置

    先看java -version $java version "1.8.0_111" Java(TM) SE Runtime Environment (build 1.8.0_111 ...

  5. python调用java文件_Python程序中调用Java代码的实践

    1.环境准备 windows 7(64位)+JDK(64位)+Python(64位)+eclipse+pycharm 还需要一个作为桥梁的工具包,jpype1,这个工具包可以启动jvm,使java代码 ...

  6. java钟使用dwr_DWR中各种java方法的调用

    DWR是一个框架,简单的说就是能够在javascript直接调用java方法,而不必去写一大堆的javascript代码.它的实现是基于ajax的,可以实现无刷新效果. 网上有不少DWR的例子,但大都 ...

  7. matlab怎么做到使用java,如何在Matlab中使用java.nio?

    我的目标是检查在网络上的文件夹中是否找到具有特定名称(名称的一部分)的文件,同时还要考虑其下的所有文件夹.为此,我需要一种有效获取给定文件夹内和下的所有文件和文件夹的列表的方法.我的递归函数在本地驱动 ...

  8. java jdt_在JDT中使用Java 8 Lambda

    java jdt 旧 Curmudgeon 认识Smalltalk的Dude 在修改Eclipse Java开发工具 (JDT)项目正在开发的Java 8支持时,我一直在使用这种语言. 我承认我对Ja ...

  9. oracle是java代码块,Oracle中施行java代码

    Oracle中执行java代码 1.在ORACLE数据库中创建功能类(实现签名): create or replace and compile java source named TestName a ...

最新文章

  1. 京东某员工因加班太多引女友不满,下定决心离职:不想被迫加班!
  2. 使用图形工具管理Server Core上的账号和组
  3. 黑马程序员pink老师前端入门教程,零基础必看的h5(html5)+css3+移动端前端视频教程(HTML5和CSS3)
  4. 阿里 Goldeneye 四个环节落地智能监控:预测、检测、报警及定位
  5. WordPress获取当前分类ID的四种方法
  6. dlp防泄密系统卸载_怎样做好数据防泄密?奥赛系统早知道
  7. 调用微信支付接口总结
  8. DecimalFormat的用法
  9. [Ubuntu] 0% [Connecting to archive.ubuntu.com (2001:67c:1360:8001::17)]
  10. Modelsim下载,亲测有效
  11. ubuntu系统如何安装最新版R语言?
  12. fatal: Needed a single revision, invalid upstream “xxxx“ 问题解决
  13. 使用Appinum爬取微信朋友圈
  14. php和durex,做避孕的杜蕾斯突然收购奶粉厂,竟是这样的理由……
  15. iPhone4s刷机教程
  16. 数据库(Mysql)概述
  17. 中国运动控制器市场深度调查及战略研究报告(2022版)
  18. 使用vite和Element Plus,实现部署后不修改代码/打包,新增主题/皮肤包
  19. (附源码)计算机毕业设计ssm合肥市公务员报名管理系统
  20. 【行人检测】检测视频中的行人

热门文章

  1. [BZOJ4530][Bjoi2014]大融合 LCT + 启发式合并
  2. c#扩展方法的理解(二:接口)
  3. iis5.1/6.0/7.0+ 配置url重写 无扩展名伪静态
  4. 文本框输入限制,数字,字母,下划线
  5. 【Q】【poj 1144】【poj 1523】
  6. AdoHelper使用MySQL存储过程示例
  7. 我是新人我最强----团队新手培训计划展开
  8. python中使用什么导入模块-python—模块导入和类
  9. db2增加decimal类型字段小数位_05725.16.1Hive中decimal类型字段.0结尾数据显示异常问题处理...
  10. ssrf漏洞 php,DokuWiki fetch.php SSRF漏洞与tok安全验证绕过分析