项目培训和课程设计指导——如何应用开源的Apache JMeter性能测试工具
1.软件应用系统的性能不仅需要优化,还需要测量和监控。

提高软件应用系统的整体性能是一项“系统工程”,需要设计者和开发者从不同的层面和方面实施各种措施来优化软件应用系统的性能。在这一系列文章中,作者主要从J2EE平台下Web应用系统的前端表示层和底层持久层为读者介绍各种实用、高效、低成本的性能优化方法。
在软件应用系统的开发和实现中,设计人员和开发人员不仅要致力于提高软件应用系统的性能和数据访问的效率,还要能够对软件应用系统的性能进行测量和测试。只有科学、客观地测试软件应用系统的性能,才能客观、准确地掌握优化软件应用系统性能的各种措施的最终应用效果,为评估性能优化方案提供科学的测量数据。
在本文及后续的几篇文章中,作者将向读者介绍如何正确应用开源的JMeter性能测试工具来测试软件应用系统的性能,了解软件应用系统的抗负载能力。此外,本文还介绍了如何使用JProfiler性能监控工具监控软件应用系统中的性能变化,找出软件应用系统中可能出现的性能问题及主要原因,及时消除软件应用系统中潜在的性能隐患。
2.应用JMeter完成Web应用系统的压力和性能测试。
Apache JMeter是一个用于压力测试和性能测试的开源、纯Java工具。它不仅可以测试静态和动态资源的性能,还可以测试服务器、网络或对象的负载能力,分析软件应用系统在不同压力类型下的整体性能。
在测试中,JMeter通常会模拟大量数据来测试独立服务器或服务器集群的负载。然后测试人员通过分析JMeter生成的各种性能图表来判断测试结果。JMeter还可以使用cookie和URL重写技术来处理J2EE Servlet验证,因此非常适合测试J2EE Web应用程序。
下图是Apache JMeter官网页面内容的部分截图,读者可以在这里下载JMeter的系统程序,浏览相关的技术参考文档。考虑到本文篇幅有限,下面笔者只重点介绍JMeter的主要技术特点和典型功能。
3.JMeter的主要技术特征和功能
介绍了JMeter的主要技术特点和功能。其实在JMeter的官网上有详细的信息。读者可以自行浏览,也可以参考下面作者截取的样图。可以总结如下:
1)开源且免费。它是在基于Java语言的Java和J2EE技术平台上编写和应用的。它具有很高的可扩展性,允许插件可以扩展其各种功能;
2)支持界面测试、压力测试等不同功能,支持录音回放,操作使用方便;
3)有Java Swing GUI组件技术实现的用户界面,所以有比较完整的UI界面,方便界面调试;
4)提供对多种不同操作系统平台的支持,可运行于Linux、Windows、Mac等系统,并保持统一的UI界面;
5)程序容量小,应用效果轻量级,与其他测试工具相比应用更灵活。
其实JMeter应该是一个性能测试框架——用户可以通过定制插件来扩展其功能,可以在实际应用环境中模拟应用系统的“并发访问”来测试应用系统的整体性能。下图显示了JMeter系统程序的lib/ext子目录中的每个插件程序。
基于Java Swing技术精心设计的GUI界面使用户操作简单方便,并能缓存和离线分析回放测试结果。下面的示例图显示了JMeter的某个功能运行时的界面显示示例图。
4.JMeter中的测试计划
什么是测试计划?
在JMeter性能测试的框架中,一个测试计划描述了JMeter在运行时要执行的一系列测试步骤,测试脚本存储在相应的测试计划中。
一个完整的JMeter测试计划主要包括一个或多个线程组、逻辑控制、实例生成控制器、监听器、定时器、比较、配置元素等。
JMeter提供了一个默认的测试计划。
当测试人员开始运行JMeter的测试工具时,它已经提供了一个默认的测试计划。然而,一个JMeter应用程序的实例只能建立或打开一个测试计划。一般来说,一个测试计划也可以被认为是一个测试用例。
下图显示了在测试计划中添加HTTP请求默认值的配置过程的部分截图。通过增加HTTP请求默认值的配置,可以减少测试过程中参数的重复设置。
5.在JMeter中实现测试计划。
当测试人员在JMeter中配置好一个测试计划所涉及的所有测试参数和工作环境后,测试人员可以通过点击JMeter程序主界面主菜单栏中的【开始】子菜单,启动并执行已经建立的测试计划。请参考下图所示的操作过程的部分截图。
在执行JMeter中创建的测试计划之前,测试人员会被提示先保存测试计划项目。
如果测试人员将这个文件保存在JMeter系统的extras目录下,测试人员就可以在以后使用Apache Ant实现测试的自动化。
6.检查JMeter生成的测试结果图表。
JMeter可能需要一些时间来完成一个测试计划。当测试运行时,测试人员可以在聚合报告窗口中查看测试结果。

上表中反映测试结果的每个数据项的含义如下:
1)标签:每个JMeter的测试目标URL都有一个Name属性,Name属性的值显示在这里。
2)#Samples:指示在该测试中发送了多少个请求。如果模拟8个用户,每个用户迭代10次,那么这里显示80。
3)Average:平均响应时间,默认为单个请求的平均响应时间。使用事务控制时,平均响应时间也可以用事务单位显示。
4)中位数:中位数,即50%用户的响应时间。
5) 90%线:90%的用户响应时间。
6)Min:最小响应时间。
7)Max:最大响应时间。
8)错误%:此测试中有错误的请求数/请求总数。
9)吞吐量:吞吐量,默认情况下是指每秒完成的请求数。
10)KB/Sec:每秒从服务器接收的数据量。
当然,JMeter测试工具程序不仅可以生成聚合报告,还可以生成一些其他形式的报告。因为JMeter工具会生成不同形式的测试结果图表——如汇总报告、样条曲线、图形结果等。-根据测试人员在测试计划中添加的监听器类型。下面的示例图是测试人员将测试结果设置为样条曲线类型测试结果的操作流程示例图的部分截图。
下图所示的示例图中的部分截图是样条曲线类型的测试结果的部分截图。从这个示例图可以知道,JMeter测试工具生成的反映测试结果的统计报告非常简单直观。
7.集成JMeter测试工具和Badboy工具。
安装并启动Badboy实用程序。
Badboy是一个用C++语言开发的动态应用测试工具。它具有强大的屏幕录制和回放功能,并能提供图形结果的分析功能。同时,Badboy还提供了直接导出Web测试脚本生成JMeter系统格式脚本的功能。Badboy是一个免费的Web自动化测试工具,经常与JMeter测试工具集成和结合。
读者可以从开源Badboy的官网下载它的系统安装程序。官网提供免费试用版和付费版,如下例图所示。Badboy系统下载后是*的可执行文件。在Windows系统平台下运行。直接双击文件安装Badboy系统。
Badboy程序的安装过程和Windows系统下的一般应用程序没有什么区别。安装完成后,可以在桌面和Windows操作系统的开始菜单中看到相应的快捷键,或者直接点击Badboy工具程序安装目录中的Badboy.exe程序文件,双击即可启动Badboy系统程序。下图是启动Badboy程序后窗口信息的部分截图。
使用Badboy工具程序直接导出Web测试脚本,生成JMeter测试工具的测试脚本。
使用JMeter测试工具时,手工制作JMeter测试工具的测试脚本非常耗时。这时候一般可以用Badboy这样的工具程序记录测试过程,从而相应地创建相关的测试脚本,然后导出生成JMeter测试工具格式的测试脚本,方便项目开发后期可能进行的重复测试过程、回归测试和自动化测试。
测试人员可以在地址栏中输入要记录的Web应用系统的URL地址,然后点击工具栏中的【GO】按钮,开始记录测试过程。
此时,测试人员可以在Badboy测试程序内嵌的浏览器中直接操作被测Web应用系统的各种测试功能,所有操作都会被记录在Badboy程序主界面左侧的编辑窗口中;一旦记录了测试操作过程,测试人员只需点击工具栏中的【停止记录】按钮,即可完成测试脚本的记录过程。
所以我们可以知道,Badboy程序实际上记录了测试人员的操作过程,然后根据操作过程中涉及的每一个操作步骤,创建并整理出相应的测试脚本。当然,测试人员仍然需要在测试脚本的排序和参数化方面做一些工作,这大大减少了测试人员创建测试脚本的工作量。
将记录的测试脚本导出到JMeter测试工具脚本格式的测试脚本中。
测试人员只需要在Badboy测试程序的[文件]菜单中选择[导出到JMeter],然后在弹出的[文件另存为]对话框中填写最终保存的文件名即可。Badboy工具程序会将录制好的脚本导出为JMeter脚本格式的测试脚本——请看下图所示的操作过程部分截图。
启动JMeter测试工具,打开刚刚生成的测试脚本。
此时,测试人员只需要启动JMeter测试工具,然后在JMeter测试工具中打开新生成的测试脚本文件——请看下图所示的操作过程部分截图。
当测试人员在JMeter测试工具中打开测试脚本文件时,然后在测试脚本文件中添加一个监听器类型的测试结果显示模式——例如,可以选择聚合报告形式或其他图表形式;最后执行Badboy工具程序导出的测试计划中的测试脚本,就会生成如下例图所示的测试结果。

如何优化Web应用数据访问的实现来提高软件应用系统的响应性能?
如何应用EhCache缓存框架提高J2EE Web应用系统持久层的响应性能
课程设计指南——如何应用OSCache缓存框架提高网页响应性能
课程设计指南——如何在Struts框架中应用FreeMarker模板技术的一个例子
如何应用XML+XSLT+AJAX组合技术实现无刷新数据查询的应用实例


