在 让开发自动化 的这一期,自动化专家 Paul Duvall 将向您描述如何创建一个运行 JMeter 测试的预订集成构建,发现和修复开发周期中出现的问题。
您的软件系统可 供多少用户同时访问?在不引起性能下降的前提下可以加载多少数据?您的系统有多大的吞吐量需求?间隔多久测试一次这些需求?如果您每天至少可以指定并确认 一次这些负载和性能需求得到了满足,又会怎样?通过将负载测试作为预定的自动构建的一部分来运行,您可以更快地确定您的系统在某些负载条件下的执行情况, 并快速适应变化。
|
我 曾经参与过的一个项目建立了一组很好的自动化测试,可以对应用程序进行负载测试,同时它还可以运行多个事务。问题是,这些测试需要进行一些手动调节,所以 开发团队无法在没有人工干预的情况下运行这些测试。这限制了测试器可用时(通常仅工作几个小时)进行测试的次数。在实践中,测试要隔好几天才进行一次 — 间隔时间太长,无法及时检测问题。
在本文中,我将探讨如何使用 JMeter 创建自动化测试、将测试作为自动构建的一部分运行,以及将测试设置为每天自动运行(通常当机器的使用率低时)。将测试作为预定构建的一部分运行可以让您:
- 在任何时候执行负载测试
- 在开发过程的初期检测并解决负载和性能问题
- 监视构建服务器的最新的负载测试和性能测试报告
- 减少依靠单个人配置和运行测试时可能出现的瓶颈和错误
Apache JMeter 是一个开放源码项目,您可以用来在服务器上模拟重负载(有关 JMeter 的更多信息,请参阅 参考资料)。JMeter 的文档集描述了如何使用它的很多功能,并提供了大量例子。
下载并解压缩 JMeter ZIP 文件(请参阅 参考资料 获得下载 JMeter 的链接)之后,使用命令提示符进入您解压缩 JMeter 的位置,并键入 cd bin
更改 bin 目录。从 bin 目录键入 jmeter
打开 JMeter Swing 应用程序,如图 1 所示:
图 1. JMeter GUI
|
您可以使用 JMeter GUI 创建测试计划。JMeter 中的不同测试计划类型包括:
- Web 测试计划
- 数据库测试计划
- FTP 测试计划
- LDAP 测试计划
- 扩展 LDAP 测试计划
- Web 服务测试计划
- JMS 点对点测试计划
- JMS 主题测试计划
- 监视器测试计划
- 侦听器
每 个测试计划都以 XML 格式存储在一个后缀名为 .jmx 的文件中。这种非二进制的格式使以后编辑计划更容易。尽管您可以通过以下 JMeter XML 模式来创建测试计划,但是使用 GUI 要容易得多。稍后您将看到一个例子,该例子用参数表示 JMeter 的配置值,以自定义测试的运行方式。
|
使用 GUI 运行测试,需要一个人 来亲自执行它们。这会增加过程瓶颈和知识筒仓的可能性。 通过自动构建(比如 Ant 构建)运行测试,您可以配置 JMeter 测试来运行,而无需打开 JMeter 应用程序。另外,该测试每次都以同样的方式运行 — 不会增加额外的工作。
学 习了如何使用 GUI 软件工具后,我想看看它是否可以从命令行运行某些实用工具,这样我就不需要反复执行同样的操作。例如,每次打开 JMeter 应用程序时,我喜欢选择 File > Open 来打开文件,然后运行一次或多次测试。我可以为这些组操作编写一个脚本,每次以同样的方式运行它们。幸运的是,已经有人编写了一个 Ant 任务来为 JMeter 做这件事:它执行负载测试,同时提供了一种传入可选参数和属性的方式。
|
在清单 1 中,我使用 Ant 的 taskdef
任务定义 JMeter 任务,我将其命名为 jmeter
,这样我可以在该 Ant 脚本的其他地方使用它。要使用该脚本,您的 Ant 类路径中必须存在 ant-jmeter.jar 文件(请参阅 参考资料 获得下载链接)。
清单 1. 在 Ant 中定义 JMeter 任务
<taskdef name="jmeter" classname="org.programmerplanet.ant.taskdefs.jmeter.JMeterTask"/> |
清单 2 中的示例代码运行一个 JMeter 负载测试 BreweryTestPlan.jmx。要运行某个目录中的所有测试,只需输入 *.jmx
,而不是特定的文件名。jmeter
任务所需的属性为 jmeterhome
、testplan
(s
)以及 resultlog
或 resultlogdir
。(清单 2 未显示 resultlogdir
,因为它使用 resultlog
。)
清单 2. 从 Ant 运行 JMeter
<jmeter |
清单 2 中的 Ant 代码创建了一个名为 JMeterResults.xml 的输出文件,用于创建 HTML 报告。
将 JMeterResults.xml 文件作为清单 3 中的 xslt
Ant 任务的输入,可以为清单 2 中运行的所有 JMeter 测试生成一个 HTML 报告。在 JMeter extras 目录中提供的 XSL 样式表(jmeter-results-detail-report_21.xsl)用于将 JMeterResults 文件转换为 HTML。
清单 3. 使用 XSLT 创建 JMeter HTML 报告
<xslt in="${basedir}/target/JMeterResults.xml" |
JMeter 也提供了一个不太详细的 XSL 样式表文件,用于总结负载测试的结果。