使用JMeter进行压力测试
JMeter是apache的jakarta上面的项目,用于软件的压力测试(Load Test),不但可以对HTTP,也可以对数据库(通过JDBC)、FTP、Web Service、Java 对象等等进行压力测试。
项目地址:http://jakarta.apache.org/jmeter
使用: 运行bin目录下的jmeterw.bat,运行jmeter.bat也可以,不过就会有一个命令窗口显示。
要提醒一下的是jmeter根据当前系统的locale显示菜单的语言,为了方便想设置回英文的话,可以修改jmeter.properties文件,设置language=en (我下载的2.1.1版本把“退出”误译为“推出”,怎么看都不顺眼)
使用:
JMeter的测试计划(Test Plan)呈树状结构,树里面有多种元素类型,树状结构的元素之间有的是有继承关系的(其原理有点类似log4j)。下面简述一下元素类型:
1、ThreadGroup
顾名思义就是线程组,测试必须有一个ThreadGroup元素作为基础(否则就没有测试线程在跑了),这个元素可以配置跑多少个线程、每个线程循环多少次,所有线程数的总启动时间(Ramp-up period)等等。
2、Controller
包括Logical Controller和Sampler,前者用来作一些逻辑上的控制,例如轮换、条件、循环等等。Sampler就是真正“干活”的“取样器”,例如“HTTP Request”,就是拿来执行一个HTTP请求的。
3、Listener
Listener对请求过程进行监听,可以简单理解为获取结果的东东。例如Simple Data Writer,可以把结果写到一个文本文件里(其实所有Listener都可以写数据到文件里),还有View Results in Table,就是把结果显示在表格里。
4、 Timer
用来控制执行流程中的时间延迟等功能。
5、 Assertion
断言,加到Sampler里面可以对返回的结果进行判断,例如判断HTTP返回结果里面是否含有某个字符串。如果断言为真,JMeter会标记请求为成功,否则标记为失败。
6、 Configuration Element
配置用的元素,很有用。由于测试计划是树状和有继承关系的,可以在高层次指定一个Configuration Element,低层次的相关Sampler如果没有显式地指定配置,就继承高层次的配置信息。(跟log4j很像吧?)
7、 Pre-Processor/Post-Processor Elements
用来在Sampler运行前和运行后作一些预处理和后处理工作的。例如动态修改请求的参数(预处理),从返回信息里面提取信息(后处理)等等。
举例:要做一个最简单的HTTP压力测试: 用10个线程访问一个URL,每个线程访问100次。
做法:
1、 在Test Plan下面加一个Thread Group,配置里面,线程数填10,循环次数填100
2、 在Thread Group下面加一个HTTP Request,这是一个Sampler,在它的配置里面填写主机信息,端口、协议、路径、参数等信息
3、 在HTTP Request下面加一个View Results in Table,如果你想把记录记到文件,则填写文件路径。
4、 保存一些这个Test Plan,就可以选择Run菜单下面的Run来运行了。直到Run菜单项从灰色变回黑色,就表示运行完了。在View Results in Table下面,你可以看到运行结果。
关于元素的详细描述可以参考官方文档。
JMeter功能很丰富的,还有很强的扩展能力,而且又是免费,值得研究使用。