JMeter学习笔记
Apache jmeter是100%纯java桌面应用程序,它可以被用来测试包括基于静态和动态资源程序的性能,例如静态文件,Java Servlets,Java 对象,数据库,FTP 服务器等等。JMeter可以用来模拟一个在服务器、网络或者对象上大的负载来测试或者分析在不同的负载类型下的全面性能。(来自官方网站)
1、测试计划中的元件
1.1 线程组
线程组元件是任何一个测试计划的开始点。在一个测试计划中的所有元件必须在某个线程组下。顾名思义,线程组元件控制JMeter执行你的测试计划时候使用的线程数。对线程组的控制允许你:
设置线程数
设置ramp-up period
设置测试要执行的次数
每个线程都会完全独立的运行测试计划,互补干扰。多线程用于模拟对服务器的并发访问。
ramp-up period 指示JMeter用于达到全部选择的线程的时间。如果选择了10个线程,并且ramp-up period是100妙,那么JMeter将使用100秒钟使10个线程启动并运行。每个线程将在前一个线程启动后10(100/10)秒后启动。如果有30个线程并且ramp-up period是120秒,那么相继的线程将间隔4秒。
缺省情况下,线程组被配置为不确定的循环执行它下面的元件。另外,你可以设置线程组在结束前循环的次数。如果次数设置为1,那么 JMeter在停止前只执行测试计划一次。
1.2监听器
监听器负责收集测试结果,同时也被告知了结果显示的方式
1.2.1理解聚合报告
Average:平均响应时间——默认情况下是单个 Request 的平均响应时间,当使用了 Transaction Controller 时,也可以以Transaction 为单位显示平均响应时间
Median:中位数,也就是 50% 用户的响应时间
90% Line:90% 用户的响应时间
Note:关于 50% 和 90% 并发用户数的含义,请参考下文
Min:最小响应时间
Max:最大响应时间
Error%:本次测试中出现错误的请求的数量/请求的总数
Throughput:吞吐量——默认情况下表示每秒完成的请求数(Request per Second),当使用了 Transaction Controller 时,也可以表示类似 LoadRunner 的 Transaction per Second 数
KB/Sec:每秒从服务器端接收到的数据量,每秒吞吐量
2、JMeter 的主要测试组件如下:
2.1、测试计划是使用 JMeter 进行测试的起点,它是其它 JMeter 测试元件的容器。
2.2、 线程组代表一定数量的并发用户,它可以用来模拟并发用户发送请求。实际的请求内容在Sampler中定义,它被线程组包含。
2.3、监听器负责收集测试结果,同时也被告知了结果显示的方式。
2.4、逻辑控制器可以自定义JMeter发送请求的行为逻辑,它与Sampler结合使用可以模拟复杂的请求序列。
2.5、 断言可以用来判断请求响应的结果是否如用户所期望的。它可以用来隔离问题域,即在确保功能正确的前提下执行压力测试。这个限制对于有效的测试是非常有用的。
2.6、 配置元件维护Sampler需要的配置信息,并根据实际的需要会修改请求的内容。
2.7、 前置处理器和后置处理器负责在生成请求之前和之后完成工作。前置处理器常常用来修改请求的设置,后置处理器则常常用来处理响应的数据。
2.8、 定时器负责定义请求之间的延迟间隔。
3、创建一个web测试计划
2.1、添加用户[添加一个线程组Add --> ThreadGroup(添加->线程组)]
处理每个JMeter测试计划的第一步是:添加线程组元件。线程组告诉JMeter你想要模拟的用户数量,用户应该发送请求的频率和应该发送的数量。
添加一个线程组:首先选择这个测试计划,用鼠标右键点击然后在得到的菜单中选择添加--> 线程组。
设置线程数,比如:20
设置ramp-up period 比如:0
设置测试要执行的次数 比如:2
2.2、添加一个默认的http请求[Add --> Config Element --> HTTP Request Defaults(线程组->添加->配置元件-)http请求默认值)]
2.3[添加一个http请求Add --> Sampler --> HTTP Request(线程组->添加->取样器-)http请求)]
(1)修改http请求名称为:home Page
(2)路径处输入:/,注意你不必要设计服务器的名称域,因为你已经在HTTP请求默认值元件中设定过了。
2.4、添加一个监听器Add --> Listener --> Graph Results(线程组->添加->监听器-)图形结果)
最后需要给测试计划的元件是监听器 。用途是将所有的HTTP请求结果存储在一个文件中并显现出数据的可视模型。
需要指定一个文件路径和输出文件名。可以在文件名域中输入或选择浏览按钮并选择一个路径然后输入文件名。
2.5、添加第二个监听器Add --> Listener --> (线程组->添加->监听器-)聚合报告)
2.6、保存测试计划并运行
保存:选择文件菜单中的"保存测试计划"来保存。
运行:Run 菜单中选择Run。
4、Jmeter的分布式测试功能(Windows下)
Jmeter是纯 JAVA应用,对于CPU和内存的消耗还是很惊人的,所以当需要模拟数以千计的并发用户时,使用单台机器模拟所有的并发用户就有些力不从心,甚至还会引起JAVA内存溢出的错误。不过,JMeter 也可以像 LoadRunner 一样通过使用多台机器运行所谓的 Agent 来分担 Load Generator 自身的压力,并借此来获取更大的并发用户数。
1.在所有期望运行 JMeter 作为 Load Generator 的机器上安装 JMeter,并确定其中一台机器作为 Controller,其他的机器作为 Agent。然后运行所有 Agent 机器上的JMeter-server.bat文件——假定我们使用两台机器 192.168.0.11 和 192.168.0.12 作为 Agent;
(Agent机器上必须安装jdk,并设置环境变量)
2.在Controller 机器的 %JMeter_home%bin下,再找到 JMeter.properties 这个文件,编辑该文件,查找“remote_hosts=”这个字符串,你可以找到这样一行“remote_hosts=127.0.0.1”。其中的 127.0.0.1 表示运行 JMeter Agent 的机器,这里需要修改为“remote_hosts=192.168.0.11:1099,192.168.0.12:1099”——其中的 1099为端口号。一般资料显示1644 为 JMeter 的 Controller 和 Agent 之间进行通讯的默认 RMI 端口号,但是在测试时发现设置为1644运行不成功,后来改成1099后运行通过。
3、启动controller机器上的jmeter.bat,双击即可,选择菜单Run中“远程启动”中的192.168.0.11:10099和192.168.0.12:1099来运行Agent。
常见问题:
1、确定在controller机器上安装jdk,版本和jmeter一致,配置环境变量:Java_home等
在Agent机器上安装jdk,配置环境变量:Java_home和JMeter_home
2、在Controller端上控制某台机器Run,提示"Bad call to remote host"。
解决方法:检查被控制机器上的jmeter-server有没有启动,或者JMeter.properties中remote_hosts的端口配置错误。
3、Agent机器启动Jmeter_server.bat时,后台提示:"could not find ApacheJmeter_core.jar"
解决方法:确定在Agent机器安装jdk,并设置环境变量:java_home、path、classpath和jmeter_home
参考文档:
1、jackei的Jmeter分布式性能测试
http://www.cnblogs.com/jackei/archive/2006/09/14/504638.html
2、Jmeter官方网站:
http://jakarta.apache.org/jmeter/usermanual/index.html
3、Jmeter中文网站:
http://www.bonoy.com/jmeter/