通过 JMeter 和 Ant 实现自动负载测试

  • Alexander Olaru
  • 张凯峰

2008 年 4 月 25 日

话题:Java语言 & 开发架构

Stelligent 公司 CTO Paul Duvall在“人性自动化Automation for the people)”系列文章中提到,如何把 JMeter 和 Ant 跟持续集成服务器集成到一起,让开发者快速地决断开发的系统在特定负载条件下的行为是否正确,及其是否适应所做的修改。Duvall 首先列举了一些这类测试所能度量的标准:

  • 有多少并发用户能够访问你的软件系统?
  • 可以加载多少数据而不会导致性能下降?
  • 系统的吞吐量需求是怎样的?
  • 这些需求的测试周期有多久?
  • 如果你能确定并验证每天至少满足一次负载和性能的需求,那会怎样?
Duvall 补充道,CI(持续集成)服务器计划执行的自动化测试每天可以在机器利用率较低的时候运行,同时,这也可以“减少当你依赖个人来配置和运行这些测试时所导致的瓶颈和错误”。他描述了建立这样一个环境所需的主要步骤有:

1. 运行 JMeter 并创建一个测试计划JMeter是 Apache 项目,是用来负载功能测试和性能测试的 Java 工具。它同时提供 GUI 和命令行两种调用方式,可以执行由测试计划定义的各种负载测试。它附带的测试计划范例包括 Web 测试计划,FTP 测试计划,Web service 测试计划等等。这些测试计划可以通过 GUI 接口搭建,最后以 XML 格式的保存。这样一来,它将所需配置的值进行参数化,用户因此可以定制运行测试的方式。

2. 使用 Ant 驱动 JMeter 测试。在已经写好的实现的基础上,定义一个 JMeter 的 Ant 任务,比如"<taskdef name="jmeter" classname="org.programmerplanet.ant.taskdefs.jmeter.JMeterTask"/>",然后从 Ant 运行 JMeter 的负载测试。Duvall 提供了一个在 BreweryTestPlan.jmx 文件(测试计划的 XML 格式)中定义的测试搭建示例:

<jmeter

  jmeterhome="${jmeter.home}"

  resultlog="${basedir}/target/JMeterResults.xml">

  <testplans includes="BreweryTestPlan.jmx" dir="${basedir}/tests/load">

  </testplans>

</jmeter>



3. 通过 XSLT 和 HTML 修饰测试结果报告。Duvall 接着演示了测试的输出结果——JMeterResults.xml——它可以通过 JMeter 的 extras 目录中提供的 XSLT 脚本将该结果转换成 HTML 报告。生成的报告上显示了每次负载测试运行的结果,包括测试状态、时间、集合状态以及所有测试花费的时间。

4. 定制 JMeter 测试。运行测试的方式可以通过修改参数和属性来进行定制。为了让测试适应特定环境的需求(比如测试或者分段),用户可以在.jmx 文件中标记一些记号,然后在运行该测试之前,根据环境需要对这些记号进行过滤和修改。Duvall 还演示了如何增加 JVM 内存并指定线程和循环的数目。

5. 在 CI 环境中集成 JMeter 测试。Duvall 提供了一个与持续集成服务器 CruiseControl 集成的例子:在每天上午 11 点时运行 build:



...

<modificationset>

  <svn repositorylocation="${svnrepo.location}">

  <timebuild time="2300"/>

...

  </svn>

</modificationset>
如果在 CruiseControl 的 config.xml 文件中添加几行适当的代码,JMeter 的测试结果报告就可以在 CruiseContrl 项目的 dashboard 中看到。

Krik Pepperdine 在 InfoQ 上的文章迭代、自动化和持续性能Iterative, Automated and Continuous Performance)中谈及了持续性能 [测试](Continuous Performance),Steve Haines 的持续性能管理continuous performance management presentation,可下载 ppt)中也涉及到了这个话题。

查看英文原文:Hands-off Load Testing with JMeter and Ant

Java语言 & 开发架构