云南省住房和城乡建设厅网站首页,教人怎么做网页的网站,海报设计模板网站,网站建设前台后台教程在使用jmeter进行性能测试的时候#xff0c;有可能会需要通过一些脚本去测试性能#xff0c;(比如通过sokeeper的api去测试sokeeper的读写性能)。这时#xff0c;我们可以通过Java Request实现#xff0c;以下是操作步骤。首先创建一个maven project。因Jmeter的Java Reque…在使用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);// 设置参数并赋予默认值0return 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);// 设置参数并赋予默认值0return 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 Requestimport 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.pluginsmaven-antrun-plugincopy-filespackageoverwritetrue /run如此我们便可在执行mvn package命令的时候自动将项目打包并将包复制到指定的目录下了我们只需再重启jmeter就可以了。