文档章节

使用JMeter的Java请求功能测试Hetty性能

lateron
 lateron
发布于 2012/10/16 12:53
字数 1051
阅读 6419
收藏 33

1.JMeter介绍

JMeter是Apache组织的开放源代码项目,它是功能和性能测试的工具,100%的用java实现。JMeter可以用于测试静态或者动态资源的性能(文件、Servlets、Perl脚本、java对象、数据库和查询、ftp服务器或者其他的资源)。JMeter用于模拟在服务器、网络或者其他对象上附加高负载以测试他们提供服务的受压能力,或者分析他们提供的服务在不同负载条件下的总性能情况。

2.启动JMeter

进入JMeter的bin目录,然后执行:

sudo ./jmeter.sh

3.原始的测试方法

在没有使用JMeter前,我对hetty的性能测试,都是通过自己写多线程代码去完成的,相当苦逼,相当麻烦,不过也能锻炼自己的编码能力,我先贴出比较原始的测试方法,如下:

public class RpcHessianClient {
	
        public static void main(String[] args) {
	
                String url = "http://localhost:8081/apis/hello";
	
                HessianProxyFactory factory = new HessianProxyFactory();
	
                ExecutorService es = Executors.newFixedThreadPool(10);
	
                int size = 1000000;
	
                final CountDownLatch cdl = new CountDownLatch(size);
	
                try {
	
                        long start = System.currentTimeMillis();
	
                        factory.setUser("client1");
	
                        factory.setPassword("client1");
	
                        factory.setOverloadEnabled(true);
	
                        final Hello basic = (Hello) factory.create(Hello.class,

                                        url);
	
                        for (int i = 0; i < size; i++) {

                                es.submit(new Runnable() {
	
                                        @Override

                                        public void run() {

                                                String u=basic.hello("guolei");
	
                                                //System.out.println(u);
	
                                                cdl.countDown();
	
                                        }
	
                                });

                        }
                        cdl.await();
                        long time = System.currentTimeMillis() - start;

                        System.out.println("SayHello:");

                        System.out.println("耗时:" + (double) time / 1000 + " s");
	
                        System.out.println("平均:" + ((double) time) / size +" ms");

                        System.out.println("TPS:" + (double) size / ((double) time / 1000));
	
                        // System.out.println("Hello, " + s.getMail());

                } catch (MalformedURLException e) {
	
                        e.printStackTrace();
	
                } catch (InterruptedException e) {

                        e.printStackTrace();
	
                }finally{

                        es.shutdown();
                }
        }
}

4.使用JMeter来进行现代化测试

我们要使用JMeter来测试hetty,由于hetty是一款基于hessian和netty的RPC产品,我们必须使用JMeter的JAVA请求功能来进行测试,Java请求是指JMeter对Java Class进行性能测试。首先我们需要编写测试用例:

1)新建JAVA工程。

2)引入ApacheJMeter_java.jar 、ApacheJMeter_core.jar以及测试所需要的jar(jar包在JMeter目录的lib/ext目录中)。

3)继承AbstractJavaSamplerClient类开始编写主业务。如下:

public class HettyTest extends AbstractJavaSamplerClient {

	private static String label = "hettyTest";

	/**
	 * 执行runTest()方法前会调用此方法,可放一些初始化代码
	 */
	public void setupTest(JavaSamplerContext arg0) {
	}

	/**
	 * JMeter测试用例入口
	 */
	public SampleResult runTest(JavaSamplerContext arg0) {
		SampleResult sr = new SampleResult();
		sr.setSampleLabel(label);
		try { // 这里调用我们要测试的java类,这里我调用的是一个Test类
			Map<String,String> map = getDefaultParameters().getArgumentsAsMap();
			sr.sampleStart(); // 记录程序执行时间,以及执行结果
			Test.execute(map.get("ip"),map.get("port"));
			sr.sampleEnd();
			sr.setSuccessful(true);
		} catch (Throwable e) {
			sr.setSamplerData(e.getMessage());
			e.printStackTrace();
			sr.setSuccessful(false); // 用于设置运行结果的成功或失败,如果是"false"则表示结果失败,否则则表示成功
		} 
		return sr;
	}

	/**
	 * JMeter界面中可手工输入参数,代码里面通过此方法获取
	 */
	public Arguments getDefaultParameters() {

		Arguments args = new Arguments();
		args.addArgument("ip", "localhost");
		args.addArgument("port", "8081");
		return args;
	}

	/**
	 * 执行runTest()方法后会调用此方法.
	 */
	public void teardownTest(JavaSamplerContext arg0) {
	}

}
Test类是我测试逻辑,如下:
public class Test {

	public static void execute(String ip,String port) throws MalformedURLException {
		
		
		String url = "http://"+ip+":"+port+"/apis/hello";

		HessianProxyFactory factory = new HessianProxyFactory();

		factory.setUser("client1");

		factory.setPassword("client1");

		factory.setOverloadEnabled(true);

		final Hello basic = (Hello) factory.create(Hello.class, url);

		//System.out.println("SayHello:" + basic.hello("guolei"));
	}
}

代码中都有注释,按照注释实际操作去理解。  System.out等的输出会显示在启动JMeter时的命令窗口内,但过多的输出会影响性能的准确性。


4)将项目打为jar包,放到JMeter目录下的lib/ext下(将项目依赖的jar也放到此目录)。

5)重启JMeter。

5.JMeter使用

1)选中主界面左侧的“测试计划”,右键菜单->添加->Threads(Users)->线程组。

2)再选中刚才新增的"线程组",右键菜单->添加->Sampler->Java请求。

3)再选中刚才新增的"Java请求",右键菜单->添加->监视器->聚合报告。

4)Ctrl + R,开始运行, Ctrl + E,清除历史结果。

6.查看测试结果


聚合报告中基本已经包含我们所关心的几个数据了:

Samples -- 本次场景中一共完成了多少个Transaction

Average -- 平均响应时间

Median -- 统计意义上面的响应时间的中值

90% Line -- 所有transaction中90%的transaction的响应时间都小于xx

Min -- 最小响应时间

Max -- 最大响应时间

PS: 以上时间的单位均为ms

Error -- 出错率

Troughput -- 吞吐量,单位:transaction/sec

KB/sec -- 以流量做衡量的吞吐量



© 著作权归作者所有

上一篇: 时间选择控件
下一篇: ReflectASM的使用
lateron

lateron

粉丝 172
博文 57
码字总数 44492
作品 1
海淀
私信 提问
加载中

评论(3)

c
coolbi
😚
w
wujiamail
学习了!
煮酒科技
煮酒科技
继续努力~
JMeter学习-001-JMeter初识

Apache JMeter是Apache组织开发的基于Java的开源压力测试工具(个人发现也可用于接口测试)。用于对软件做压力测试,它最初被设计用于Web应用测试但后来扩展到其他测试领域。 它可以用于测试...

拎壶冲冲冲
2018/05/29
0
0
压力测试 使用Jmeter进行RPC压力测试

版权声明:本文为博主原创文章,转载请注明来源。开发合作联系luanpenguestc@sina.com https://blog.csdn.net/luanpeng825485697/article/details/83787284 Jmeter 下载地址:http://jmeter....

数据架构师
2018/11/07
0
0
JMeter的介绍和脚本录制以及对WEB进行测试

注释:图片省略,大家如果哪里有疑问,可以留言来讨论。 1.JMeter介绍 到JMeter的网站http://jakarta.apache.org/site/downloads/downloadsjmeter.cgi 下载JMeter的最新版本,将zip文件解压缩...

JavaOlder
2013/03/13
3.8K
0
JMeter-Java Sampler 编写范例

 今天,听段念的培训,学了一下Jmeter写Java请求的过程。   根据某博文,修改其中代码的bug后,贴在下面吧;另外公司一同学Raylupas在半年前也写过关于JMeter写Java Sampler的文章,现在终...

今幕明
2015/03/30
900
0
使用Jmeter自动化压测TCP Server经验

使用Jmeter自动化压测TCP Server经验 • Jmeter简介 • Jemter的主要功能 • Jmeter TCP发送方式 • Jmeter 测试TCP配置 • Jmeter快速上手使用 1、Jmeter简介 Apache JMeter是Apache组织开发...

HowieXue
03/20
0
0

没有更多内容

加载失败,请刷新页面

加载更多

html2canvas 生成的图片变模糊解决方案

需求: 背景图片和二维码还有用户微信头像生成一张图片,可供用户下载。打开页面的时候就是一张图可以保存,html2canvas插件即可实现效果,效果是实现了,但是很郁闷,图片模糊了。。。。 为...

前端老手
7分钟前
2
0
语音翻译器在线翻译语音

对于英语不好的朋友来说,如果出国旅游,多多少少都会使用到翻译软件。通过在线翻译的方式,方便彼此的沟通交流。那么,有朋友就在问哪个英语翻译软件最准确?下面就来和大家一起分享下这个简...

401恶户
8分钟前
2
0
国内25家滤波器公司排名

国内做滤波器的企业都有哪些?哪些企业做滤波器是比较知名的?国内滤波器企业排名如何?以下是解优人才网小编给大家的分享,国内前25家做滤波器的企业详细信息。 1、武汉凡谷电子技术股份有限...

猎头悬赏平台
13分钟前
4
0
即时配送,不再只是巨头的战场

9月4日,第十届中国电子商务物流大会暨2019中国同城即时物流行业峰会于杭州召开。会上出现了蜂鸟即配、达达-京东到家、美团配送、点我达、闪送等一众即时配送行业中的知名企业的身影。 在艾媒...

喵二狸
14分钟前
2
0
Moto G 2014 LTE Root

[TOC] 下载moto专用mfastboot mfastboot-v2.zip 下载对应设备的twrp 我的是这个版本 Moto G 2014 LTE thea 刷入twrp # 1. 开启USE调试# 2. 允许OEM解锁# 3. 查看设备adb devices# 4. 进f...

yeahlife
17分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部