简介
Apache JMeter是100%纯java桌面应用程序,被设计用来测试C/S结构的软件(例如web应用程序)。它可以被用来测试包括基于静态和动态资源程序的性能,例如静态文件,Java Servlets,Java 对象,数据库,FTP 服务器等等。JMeter可以用来模拟一个在服务器、网络或者对象上大的负载来测试或者分析在不同的负载类型下的全面性能。
另外,JMeter能够用断言创造测试脚本来验证应用程序是否返回了我们期望的结果,从而帮助我们进行回归测试。为了得到最大的灵活性,JMeter允许我们使用正则表达式创建断言。
安装
windows版本
下载最新版本
http://jmeter.apache.org/download_jmeter.cgi
编写本文时最新版本 2.12 (要求 Java 6 或更高)
解压zip/tar文件到任意目录。
确保正确安装JRE/JDK并且设置环境变量JAVA_HOME。
避免在一个有空格的路径安装 Jmeter,这将导致分布式测试出现问题。
运行
用户界面模式
运行 bin 目录中的 JMeter (for Unix) 或者 JMeter.bat (for Windows) 文件。
服务器模式
为了分布测试 ,可以使用服务器模式运行JMeter,然后通过用户界面/或命令行控制每一台服务器。
运行 bin 目录中的 jmeter-server (for Unix) 或者 jmeter-server.bat (for Windows) 文件。
命令行
使用命令行运行:jmeter -n -t filename.jmx
-n 这是指定JMeter在非用户界面模式运行
-t [包含测试计划的JMX文件的名字]
作为分布式的其中一台主机:jmeter-server -H my.proxy.server -P 8000
-H [代理服务器主机名或者ip地址]
-P [代理服务器端口,默认1099]
控制分布式主机执行脚本:jmeter -n -t filename.jmx -R 192.168.101.116:1099,192.168.101.113:1099
通过代理服务器连接网络:jmeter -H my.proxy.server -P 8000
-H [代理服务器主机名或者ip地址]
-P [代理服务器端口]
测试计划
一个测试计划描述了一系列JMeter运行时要执行的步骤。一个完整的测试计划包含一个或者多个线程组(thread groups),逻辑控制(logic controllers),取样发生控制(sample generating controllers),监听器(listeners)定时器(timers),断言(assertions)和配置元件(configuration elements)。
添加和删除元件 ( Elements )
在一个树上通过右击可以添加元件到一个测试计划 ,从“add”列表中选择一个新元件。或者通过选择“open”选项从文件加载。
删除元件,确保元件被选中,在元件上右击,然后选择"remove"选项。
加载和保存元件
从文件加载元件,右击目标元件,选择“open”选项,然后选择你的元件保存文件。JMeter将载入文件中的所有元件。
保存树元件,在一个元件上右击,选择“save”选项。JMeter会保存已选的元件,加上所有下面的子元件。用这种方法,你能够保存测试树的一段、单独元件、或者整个测试计划。
运行一个测试计划
运行一个测试计划,从“run”菜单项选择“start”。停止你的测试计划,从同样的菜单选择“stop”。
线程组
线程组是任何一个测试计划的开始点. 所有的测试计划中的元件都要在一个线程组中。
如名字显示那样,线程组控制了一组线程, JMeter使用这些线程来执行你的测试,你可以做如下操作:
- 控制thread group
- 设置线程的数量
- 设置ramp-up周期
- 设置测试执行的循环次数
每一个线程都会完全和独立的执行测试计划而不影响其他线程。多线程可以用于模拟到你的服务器程序的并发连接。
Ramp-up period 告诉JMeter需要多长时间来“ramp-up”去装载全部的线程,如果30个线程被使用,而ramp-up period为120秒,那么JMeter会花120秒来使得所有的30个线程运行,每个线程将在上个线程开始后4秒开始。延迟时间=ramp-up period时间数/线程数
默认的,一个thread group被设置为不限定的循环。你可以设置thread group循环的次数,如果设置为一次,那么JMeter将执行测试一次然后停止。
Controllers
JMeter有两种controller:Samplers和Logical Controllers
Samplers告知JMeter发送请求到服务器。 例如,如果你想JMeter发送一个HTTP请求,就添加一个HTTP Request Sampler。当然你也可以定制一个请求,在Sampler中添加一个或多个Configuration Elements。
Logical Controllers使你可以定制JMeter发送请求的逻辑。例如,你可以添加一个Interleave Logic Controller来控制交替使用两个HTTP Request Samplers。同样,一个特定的Logic controller,作为Modification Manager,可以让你修改请求的结果。
Samplers
Sampler 告知JMeter发送请求到server端。JMeter现在有如下的samplers:
- FTP Request
- HTTP Request
- JDBC Request
- Java Object Request
- LDAP Request
- SOAP/XML-RPC Request
- Web Service (SOAP) Request (Alpha Code)
每个sampler都有一些可以设置的properties。 你也可以在一个sampler中添加Configuration Elements来做更多的设置。当然, 值得注意的是JMeter按照request在tree中添加的次序来发送请求。
如果你想同时发送多个并发的同一种类的request,例如HTTP request,到同样一台服务器。可以考虑使用一个Defaults Configuration Element。每个Controller拥有一个或多个默认元素。
Listeners提供了获取在JMeter运行过程中搜集到的信息的访问方式。最简单的Listener,Graph Results Listener图示出了响应时间。Listeners提供了一种图型化的方式来查看JMeter运行过程中产生的数据。
另外, Listeners能够直接将搜集的到数据存入到文件中以备后用。任何一个listener都拥有一个设置该文件存储地址的域。
Listener能够加到测试中的任何位置。他们将仅仅收集同级别和所有低级别的elements产生的数据。