jmeter之java代码性能测试_使用Jmeter中的Java Request进行性能测试

本文介绍了如何使用Jmeter中的Java Request组件进行Java代码性能测试,包括创建Maven项目,添加Jmeter依赖,编写Java Sample,实现自定义请求,并提供了基类封装和自动化构建优化技巧。
摘要由CSDN通过智能技术生成

在使用jmeter进行性能测试的时候,有可能会须要经过一些脚本去测试性能,(好比经过sokeeper的api去测试sokeeper的读写性能)。这时,咱们能够经过Java Request实现,如下是操做步骤。java

首先建立一个maven project。apache

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

0cc3230004244df2a5e45204.html

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

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

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

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

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

示例代码:maven

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。测试

建立线程组:优化

0cc3230004244df2a5e45204.html

建立Java Request Sample:ui

0cc3230004244df2a5e45204.html

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

0cc3230004244df2a5e45204.html

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

0cc3230004244df2a5e45204.html

而后再添加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就能够了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值