InfoQ

新闻

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

作者 Alexander Olaru译者 张凯峰 发布于 2008年4月25日 上午12时5分

社区
Java
主题
软件测试,
性能和可伸缩性
标签
CruiseControl,
Ant
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

没有回复

回复

独家内容

Hadoop中的集群配置和使用技巧

本文介绍了Hadoop如何配置分布式框架运行环境,同时特别讲解了其中的一些细节。Hadoop可以单机跑,也可以配置集群跑,这里主要重点说一下集群配置运行的过程。本文是Hadoop入门实践三部曲的第二部。

JavaScript多线程编程简介

虽然有越来越多的网站在采用AJAX技术,但是开发复杂的AJAX应用仍然是个难题。本文探索了如何应用多线程缓解其中一些问题。

Ruby的开放类──或者:怎样避免动态打补丁

Ruby的开放类(Open Classes)功能强大,但很容易被误用。这篇文章关注于怎样减少使用开放类的风险,介绍了一些其他可替代的类似方法,并分析了其他语言如何实现类似的功能。

REST反模式

在本文中,Stefan Tilkov讲解了一些经常出现在自称“符合REST式设计”的应用中的反模式(比如:全部采用GET或POST,忽视缓存及响应代码,误用cookies,忘记超媒体与MIME类型,以及破坏自描述性等),并给出了避免这些反模式的对策。

分布式计算开源框架Hadoop介绍

Hadoop是Apache开源组织的一个分布式计算开源框架,在很多大型网站上都已经得到了应用,如亚马逊、Facebook和Yahoo等等。本文是Hadoop入门实践三部曲的第一部,主要讲述了What和Why的问题。

37 Signals的实用最小主义实践

本文结合37 Signals公司在开发Basecamp等产品时的实践,介绍了实用最小主义开发方法。实践证明,尤其是在开发Web应用时,这一方法非常有效。根据作者的观察,Google现在之所以那么成功,其所遵循的软件开发哲学和最小实用主义非常类似。

与林昊一起探讨OSGi

在今年5月份的网侠大会上,InfoQ中文站有幸与国内OSGi的先锋林昊(BlueDavy)在一起探讨了OSGi的相关话题,包括它的优势、复杂度以及Java下的实现等等。

超越F#基础——异步工作流

Robert Pickering在F#的第三篇文章中,他继续着上次的话题,不过这次他要关注的是异步工作流(Asynchronous Workflows),以及在使用这个特性后获得的性能改善。虽然这篇文章是关于F#的,但是这样的知识对于所有的.NET语言都是适用的。