java jmeter_使用Jmeter中的Java Request进行性能测试

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

首先创建一个maven project。

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

ba34ffee0306274b047c19932ed5c040.png

编写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。

创建线程组:

1306bb70bfa968b90b16675e640acd24.png

创建Java Request Sample:

acc33ae8b615aa66476e2d2248275869.png

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

6e5f12c136276e5a3e467fb034297b52.png

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

aea4a753c6c67ed474b1d4ff93ea79c5.png

然后再添加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就可以了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/501887.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

m.2接口和nvme区别_m.2 nvme和m.2有区别吗?

m2接口有两种,一种走sata的,另外一种走pcie(就是nvme)的。走sata的速度跟传统sata接口的没区别,就是接口变成了m2的了。走pcie的,就是我们说的nvme接口是m2的,性能也强了。M.2接口有SATA也有NVMe PCIe协议。这个是同一…

如何查看cplex的help文档_word查看技巧:如何快速找到文档的修改痕迹

不知道大家在工作中有没有遇到过这类的工作场景:当初步拟好一份合作协议或是项目策划书后,发给老板或其他同事审阅和修订,通常会不断地来回修改文档。此时,如果你想要查看文档哪里被修改过?你会怎么操作?很…

mysql set语句_MySQL Prepared语句简介

之前的MySQL版本4.1,查询以文本格式发送到MySQL服务器。 之后,MySQL服务器使用文本协议将数据返回给客户端。MySQL必须完全解析查询,并将结果集转换为字符串,然后再将其返回给客户端。 文本协议具有严重的性能问题。为了解决这个问…

三同轴连接器_一种毫米波频段微带同轴转换结构

在微波电路中,同轴电缆和微带线是微波系统中常见的两种微波传输线,同轴电缆以其频带宽、屏蔽性好、结构简单、可弯曲等特性,常被用作模块或系统之间连接的传输线。在高频段,微带线是混合微波集成电路(Hybrid Microwave Integrated…

nginx https透明代理_Nginx反向代理https,配置lets-encrypt证书教程

前言本站也终于迁移到https了,由于全Docker部署,迁移过程中真是艰难无比(wordpress那块被折腾的想放弃了),也欢迎访问本人博客,(知乎的排版有些乱)Nginx反向代理https,配置lets-encr…

nginx 一个请求发给多台机器_配置Nginx实现负载均衡

企业在解决高并发问题时,一般有两个方向的处理策略,软件、硬件,硬件上添加负载均衡器分发大量请求,软件上可在高并发瓶颈处:数据库web服务器两处添加解决方案,其中web服务器前面一层最常用的的添加负载方案…

怎么用记事本写java_如何用记事本写下第一个Java程序-Fun言

在刚学java的时候,刚开始并未接触类似于Myeclipse这类的编辑器,都是用记事本编写程序,这样虽然很慢,但是能让我们明白其中的原理,所以今天来教大家用记事本来写第一个java程序"Hello World!"准备…

ps发光插件_PS插件自定义区域发光真实辉光插件 Oniric Glow Generator for Photoshop【资源分享1444】...

AE特效PR剪辑C4D影视后期全世界只有不到1%的人关注了你是个很特别的人AE影视后期定期推送「AEPRC4D 影视特效合成 婚庆剪辑调色 电视广告包装 微电影制作 SpeedGrade达芬奇专业调色 摄影等」打造影视后期高端学习平台影视后期 ID:AEPRC4D9【PS插件信息】非常棒的一款…

python 退出_如果读完这篇文章不能让你入门Python,那我将永久退出编程界

(PS:文末福利赠送 无套路,真实有效!)Python是一种动态解释型的编程语言。Python可以在Windows、UNIX、MAC等多种操作系统上使用,也可以在Java、.NET开发平台上使用。【特点】1 Python使用C语言开发,但是Python不再有C语言中的指针…

unity 检测文本有没有自动换行_python3从零学习-5.1.5、文本自动换行与填充模块textwrap...

TextWrapper 模块提供了一些快捷函数,以及可以完成所有工作的类 TextWrapper 如果你只是要对一两个文本字符串进行自动换行或填充,快捷函数应该就够用了;否则的话,你应该使用 TextWrapper 的实例来提高效率。…

红黑树和平衡二叉树的区别_一文搞懂红黑树

文章参考 | https://segmentfault.com/a/1190000012728513前言当在10亿数据进行不到30次比较就能查找到目标时,不禁感叹编程之魅力!二叉树在了解红黑树之前,先要了解二叉树,又叫二叉查找树、二叉搜索树、二叉排序树。二叉树顾名思…

mysql table keys_MySQL Explain详解

在日常工作中,我们会有时会开慢查询去记录一些执行时间比较久的SQL语句,找出这些SQL语句并不意味着完事了,些时我们常常用到explain这个命令来查看一个这些SQL语句的执行计划,查看该SQL语句有没有使用上了索引,有没有做…

程序员肚子越来越大_肚子越来越大,除了肥胖还可能是疾病信号!腰间搓一搓,排出痰浊,消脂防病~...

☀ 定期推送健康知识,生活窍门,演出资讯,旅游信息,商家优惠等诸多优质内容,接地气、重服务的微信平台!关注我们妥妥没错!今天我们所说的“要命的肚子”就是一种肥胖,众所周知导致肥胖…

高级java技术web组件_(重温)JavaWeb--Servlet技术(二)(JavaWeb 的三大组件之一)...

1.HttpServletRequest 类a)HttpServletRequest 类有什么作用。每次只要有请求进入 Tomcat 服务器,Tomcat 服务器就会把请求过来的 HTTP 协议信息解析好封装到 Request 对象中。 然后传递到 service 方法(doGet 和 doPost)中给我们使用。我们可以通过 HttpServletReq…

svm算法原理_机器学习——分类算法(1)

一、 K近邻KNN算法的基本思想就是在训练集中数据和标签已知的情况下,输入测试数据,将测试数据的特征与训练集中对应的特征进行相互比较,找到训练集中与之最为相似的前K个数据,则该测试数据对应的类别就是K个数据中出现次数最多的那…

svn复制出来的java_从svn下载的项目(或从别处拷贝来的)报错的可能情况以及解决经验...

1、sdk版本不符合。举个栗子:如果svn上的项目是用sdk10的,但是你电脑上最低sdk是14的,那么这时候就会报错。解决办法:a、鼠标点击项目,b、快捷键“altenter”,c、左侧点击“Android”,右侧选中一…

spring揭秘_被问到了! Spring 和 Spring Boot 之间到底有啥区别?

相信很多小伙伴和我一样,常用Spring 和Spring Boot 但是就是没有研究二者之间到底有什么区别?今天就来大揭秘 ↓概述对于 Spring和 SpringBoot到底有什么区别,我听到了很多答案,刚开始迈入学习 SpringBoot的我当时也是一头雾水&am…

sql 删除最低分数_软件测试从业者:必备SQL语句21天打卡,前10天

一、价值:1. 根据这些年的经验,帮软件测试从业者精选出:1)日常工作中,需要用到的SQL语句;2)软测面试中,笔试 / 面试 ,需要用到的 SQL问题 & 答案 ;2. SQL这种硬技能 &#xff0c…

php两个手机号正则表达式_php 手机号码验证正则表达式

php 手机号码验证正则表达式比较简洁的代码一:$str ;$isMatched preg_match(/^0?(13|14|15|17|18)[0-9]{9}$/, $str, $matches);var_dump($isMatched, $matches);代码二//正则表达式$tel "15558530459"; //作者的手机号码,如果有疑问可以电话联系我,或…

ssms没有弹出服务器验证_使用SSMS扫描和查找SQL Server数据库的潜在安全漏洞

SQL Server Management Studio 17.4或更高版本的SSMS中提供了SQL Server漏洞侦测(VA)功能,此功能允许SQL Server扫描您的数据库以查找潜在的安全漏洞,并且可以针对SQL Server 2012或更高版本运行。如果您还没有使用SSMS上的较新版本,请不要担…