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

简介:
 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时的命令窗口内,但过多的输出会影响性能的准确性。

 代码中都有注释,按照注释实际操作去理解。  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 -- 以流量做衡量的吞吐量


最新内容请见作者的GitHub页:http://qaseven.github.io/

相关文章
|
15天前
|
数据采集 监控 机器人
浅谈网页端IM技术及相关测试方法实践(包括WebSocket性能测试)
最开始转转的客服系统体系如IM、工单以及机器人等都是使用第三方的产品。但第三方产品对于转转的业务,以及客服的效率等都产生了诸多限制,所以我们决定自研替换第三方系统。下面主要分享一下网页端IM技术及相关测试方法,我们先从了解IM系统和WebSocket开始。
33 4
|
1月前
|
XML Java 数据库连接
性能提升秘籍:如何高效使用Java连接池管理数据库连接
在Java应用中,数据库连接管理至关重要。随着访问量增加,频繁创建和关闭连接会影响性能。为此,Java连接池技术应运而生,如HikariCP。本文通过代码示例介绍如何引入HikariCP依赖、配置连接池参数及使用连接池高效管理数据库连接,提升系统性能。
59 5
|
14天前
|
算法 Java 测试技术
Benchmark.NET:让 C# 测试程序性能变得既酷又简单
Benchmark.NET是一款专为 .NET 平台设计的性能基准测试框架,它可以帮助你测量代码的执行时间、内存使用情况等性能指标。它就像是你代码的 "健身教练",帮助你找到瓶颈,优化性能,让你的应用跑得更快、更稳!希望这个小教程能让你在追求高性能的路上越走越远,享受编程带来的无限乐趣!
61 13
|
20天前
|
并行计算 算法 测试技术
C语言因高效灵活被广泛应用于软件开发。本文探讨了优化C语言程序性能的策略,涵盖算法优化、代码结构优化、内存管理优化、编译器优化、数据结构优化、并行计算优化及性能测试与分析七个方面
C语言因高效灵活被广泛应用于软件开发。本文探讨了优化C语言程序性能的策略,涵盖算法优化、代码结构优化、内存管理优化、编译器优化、数据结构优化、并行计算优化及性能测试与分析七个方面,旨在通过综合策略提升程序性能,满足实际需求。
49 1
|
26天前
|
缓存 Ubuntu Linux
Linux环境下测试服务器的DDR5内存性能
通过使用 `memtester`和 `sysbench`等工具,可以有效地测试Linux环境下服务器的DDR5内存性能。这些工具不仅可以评估内存的读写速度,还可以检测内存中的潜在问题,帮助确保系统的稳定性和性能。通过合理配置和使用这些工具,系统管理员可以深入了解服务器内存的性能状况,为系统优化提供数据支持。
32 4
|
26天前
|
监控 JavaScript 前端开发
如何在实际应用中测试和比较React和Vue的性能?
总之,通过多种方法的综合运用,可以相对客观地比较 React 和 Vue 在实际应用中的性能表现,为项目的选择和优化提供有力的依据。
33 1
|
1月前
|
测试技术 持续交付 Apache
Python性能测试新风尚:JMeter遇上Locust,性能分析不再难🧐
Python性能测试新风尚:JMeter遇上Locust,性能分析不再难🧐
68 3
|
1月前
|
缓存 测试技术 Apache
告别卡顿!Python性能测试实战教程,JMeter&Locust带你秒懂性能优化💡
告别卡顿!Python性能测试实战教程,JMeter&Locust带你秒懂性能优化💡
52 1
|
1月前
|
Java 测试技术 Maven
Java一分钟之-PowerMock:静态方法与私有方法测试
通过本文的详细介绍,您可以使用PowerMock轻松地测试Java代码中的静态方法和私有方法。PowerMock通过扩展Mockito,提供了强大的功能,帮助开发者在复杂的测试场景中保持高效和准确的单元测试。希望本文对您的Java单元测试有所帮助。
160 2
|
1月前
|
Java 数据库连接 数据库
优化之路:Java连接池技术助力数据库性能飞跃
在Java应用开发中,数据库操作常成为性能瓶颈。频繁的数据库连接建立和断开增加了系统开销,导致性能下降。本文通过问题解答形式,深入探讨Java连接池技术如何通过复用数据库连接,显著减少连接开销,提升系统性能。文章详细介绍了连接池的优势、选择标准、使用方法及优化策略,帮助开发者实现数据库性能的飞跃。
31 4