1. 下载安装Jmeter
1.1 下载Jmeter
下载地址:http://jmeter.apache.org/download_jmeter.cgi
目前最新版为4.0,其余文件如源代码等也可从如下官网下载:
http://jmeter.apache.org/download_jmeter.cgi
1.2 环境配置
安装Jmeter之前需要先配置Java环境,我们下载的是jmeter2.9,所以java版本最好是选用java6以后的版本。
安装JDk1.6的步骤如下:
点击下载的JDK文件-dk-6u18-windows-i586.exe,点击下一步直至安装完成,然后开始配置环境:
点击我的电脑----属性----高级----环境变量----在系统变量中----点击新建,
在变量名中输入:JAVA_HOME
变量值中输入:C:\Program Files (x86)\Java\jdk1.6.0_18
这里注意,不需要加“;”,我加了“;”结果导致javac命令无效。
再次点击新建:
在变量名中输入:CLASSPATH,
变量值中输入:.;%JAVA_HOME%/lib/dt.jar;%JAVA_HOME%/lib/tools.jar;
然后再系统变量中找到Path,点击编辑,在变量值中加上:
%JAVA_HOME%/bin;%JAVA_HOME%/jre/bin;(如果前面没有“;”需要加上)
配置完成之后,点击确定保存,然后cmd打开命令窗口输入:java或者javac,出现大串字符串表示配置成功。
也可以输入:java -version 查看java版本来查看是否配置成功。
OK,JDK安装成功之后,就可以下一步安装Jmeter了。
1.3 安装Jmeter
解压apache-jmeter-2.9.zip文件至目录,我的是D:\Program Files目录。
点击我的电脑----属性----高级----环境变量----在系统变量中----点击新建,
变量名输入:JMETER_HOME
变量值输入:D:\Program Files\apache-jmeter-3.1
然后编辑CLASSPATH变量,加上%JMETER_HOME%\lib\ext\ApacheJMeter_core.jar;%JMETER_HOME%\lib\jorphan.jar;%JMETER_HOME%\lib\logkit-2.0.jar;然后确定即可
操作完上面的步骤,我们就可以点击Jmeter中bin目录下面的jmeter.bat文件即可打开Jmeter了。
注意:打开的时候会有两个窗口,Jmeter的命令窗口和Jmeter的图形操作界面,不可以关闭命令窗口。
界面如下图所示:
2. 录制和运行脚本
录制Jmeter脚本有两种方法,一种是设置代理;一种则是利用badboy软件,badboy软件支持导出jmx脚本。
这里我们介绍第二种方法,利用badboy录制脚本,然后导出Jmeter需要的jmx文件。
首先,在地址栏中输入要录制脚本的地址,然后点击绿色按钮即可开始录制(工具栏中的红色按钮也可以点击进行录制),点击红色圆形按钮旁边的正方形黑色按钮结束脚本录制(如果使用过loadrunner,那么步骤是一样的),在内嵌的浏览器上面操作你需要测试的动作即可,它会自己记录你的相关行为动作。
然后点击黑色按钮录制完成之后,我们可以导出jmx文件:
保存为“登录开发者.jmx”。
3. 使用Jmeter开始测试
3.1 打开脚本
用Jmeter打开我们上面保存的文件。
打开之后如图所示:
4. 配置元件
4.1 HTTPCookie 管理器
获得cookie中的JSESSIONID
第一步:登录画面,路径选择“跟踪重定向”、“Use KeepAlive”
第二步:运行脚本,查看“查看结果树”登录画面JSESSIONID的值。
配置cookie中JSESSIONID的值
第一步:将登录画面JSESSIONID的值配置到cookie中。
第二步:禁用登录画面
第三步:清空全部,再次运行。然后查看“查看结果树”中的请求和响应数据。如果响应数据返回结果不是首页,为该画面的内容,则成功。
4.2 CSV Data Set Config参数化
如下面图,我们为请求发送的参数来参数化。
上述的例子为登录的用例,登录有两个参数:EMAIL和DEVELOPER_PASSWORD,在实际测试中,当我们需要用到不同的用户来登录的时候,我们就可以用到参数化。
1)、我们新建一个文件,这里我新建的是一个txt文件,命名为c.txt,里面的内容为
web@qq.com,111111
col@qq.com,111111
2)、在jmeter中的【选项】中选择【函数助手对话框】,将会弹出如下对话框:
其中:
CSV file to get values from | *alias:要读取的文件路径,为绝对路径
CSV文件列号| next| *alias:从第几列开始读取,注意第一列是0
如上图所示,我们读取的是c.txt里面的第一列用户名(如果要读取第二列的密码,只需将0改成1即可,往后类推),点击【生成】按钮即可生成函数,我们使用时即拷贝生成的函数字符串:${__CSVRead(E:\c.txt,0)}。
5. 线程组
在测试计划里面选择添加既可以看到线程组。
如上图:
名称:可以随意取,我们保持创建是自动分配的名称
注释:随意
在取样器错误后要执行的动作:我们选择继续,错误之后依然继续执行
线程数:一般我们用来表示多少个用户,即我们测试时的用户数量
Ramp-up Period(in Seconds):表示每个用户启动的延迟时间,上述我设为1秒,表示系统将在1秒结束前启动我设置的1000个用户,如果设置为1000秒,那么系统将会在1000秒结束前启动这1000个用户,开始用户的延迟为1秒, 如果我设置为0秒,则表示立即启动所有用户。
循环次数:如果你要限定循环次数为10次的话,可以取消永远的那个勾,然后在后面的文本框里面填写10;在这里我们勾上永远,表示如果不停止或者限定时间将会一直执行下去, 是为了方便调度器的调用。
调度器的配置:我们勾选调度器时,将会出现这个面板
启动时间:表示我们脚本开始启动的时间,当你不想立即启动脚本测试,但是启动脚本的时间不会再电脑旁的时候,你可以设定一个启动的时间,然后再运行那里点击启动,系统将不会立即运行,而是会等到你填写的时间才开始运行。
结束时间:与启动时间对应,表示脚本结束运行的时间。
持续时间:表示脚本持续运行的时间,以秒为单位,比如如果你要让用户持续不断登录1个小时,你可以在文本框中填写3600。如果在1小时以内,结束时间已经到达,它将会覆盖结束时间,继续执行。
启动延迟:表示脚本延迟启动的时间,在点击启动后,如果启动时间已经到达,但是还没有到启动延迟的时间,那么,启动延迟将会覆盖启动时间,等到启动延迟的时间到达后,再运行系统。
注意:如果我们需要用到调度器来设定持续时间,如果线程数不够多到持续时间结束,我们就必须将循环次数勾选为永远,特别地,如果线程组里面有其他的循环,我们也需将该循环次数勾选为永远(如我上面录制的脚本中的Step1也是一个循环,需要将永远勾选),否则,按我如上配置,将永远去掉勾选,文本里填1,那么无论你将持续时间启动时间结束时间等设置多少,系统运行1000次后,将会停止不再运行。
6. Sampler
6.1 Http请求
关于HTTP请求,我们录制的脚本里面就有,这里就介绍一些常用的属性。
如图所示:
点击HTTP请求,将会出现如下界面:
其中:
名称:可以随意取,我们可以根据录制脚本的路径来命名
注释:可以对该界面做一个简单介绍
服务器名称或IP:即我们的服务器或者IP的地址,我因为是在本机上的项目,故填写localhost,可以填写127.0.0.1。
端口号:我用的是tomcat,自己设置的端口号为8086(tomcat默认为8080)
后面的超时定义可以不用填写。
Implementation:这里我们录制时默认填写为JAVA
协议填写为:http
方法为:GET
Content encoding:编码可以不用填写
路径:即页面的路径;下面的重定向等选择可以根据需要勾选,这里我们保持录制不修改。
Parameters参数:即跟着路径一起发送的参数及文件
下面的代理服务器等可以忽略,按需要填写。
7. 定时器
7.1 集合点
集合点:简单来理解一下,虽然我们的“性能测试”理解为“多用户并发测试”,但真正的并发是不存在的,为了更真实的实现并发这感念,我们可以在需要压力的地方设置集合点,还拿那个用户和密码的地方,每到输入用户名和密码登录的地方,所有的虚拟用户都相互之间等一等,然后,一起访问。
首先创建脚本,然后在需要集合测试的请求线程组添加集合点,点击【线程组】-【添加】-【定时器】-【Synchronizing Timer】。
进入定时器页面进行设置。
Number of Simulated Users to Group by:表示集合多少个用户开始访问
Timeout in milliseconds: 如果设置为0,Timer将会等待线程数达到了"Number of Simultaneous Users to Group"中设置的值才释放。如果大于0,那么如果超过Timeout in milliseconds中设置的最大等待时间(毫秒为单位)后还没达到"Number of Simultaneous Users to Group"中设置的值,Timer将不再等待,释放已到达的线程。默认为0 。
注意:
如果设置Timeout in milliseconds为0,且线程数量无法达到"Number of Simultaneous Users to Group by"中设置的值,那么Test将无限等待,除非手动终止。
Synchronizing timer 仅作用于同一个JVM中的线程,所以,如果使用并发测试,确保"Number of Simultaneous Users to Group by"中设置的值不大于它所在线程组包含的用户数。
如果希望定时器仅应用于其中一个sampler,则把该定时器作为子节点加入 ,如下图所示。
8. 逻辑控制器
jmeter中逻辑控制器(Logic Controllers)的作用域只对其子节点的sampler有效,作用是控制采样器的执行顺序。
jmeter提供了17种逻辑控制器,它们各个功能都不尽相同,大概可以分为2种使用类型:
①.控制测试计划执行过程中节点的逻辑执行顺序,如:Loop Controller(循环控制器)、If Controller(如果if控制器)等;
②.对测试计划中的脚本进行分组,方便JMeter统计执行结果以及进行脚本的运行时控制等,如:Throughput Controller(吞吐量控制器)、Transaction Controller(事务控制器)等
jmeter提供如下17种逻辑控制器:
8.1 临界区控制器(critical section Controller)
作用:临界区控制器确保其子节点下的取样器或控制器将被执行(只有一个线程作为一个锁)
名称和注释很简单,就是给控制器添加一个备注,使人明白这个控制器的解释含义的意思
Lock name:锁名称,这里可以填入其子节点下执行的线程的名称,这个线程作为一个全局锁存在
8.2 遍历循环控制器(ForEach Controller)
作用:用来遍历当前元素的所有可执行场景;在用户自定义变量中读取一系列相关的变量,该控制器下的采样器或控制器都会被执行一次或多次,每次读取不同的变量值,所以它总是和用户自定义变量一起使用
输入变量前缀:在其中输入需要遍历的用户参数(User Parameter)
Start index for loop(exclusive):循环指数开始(唯一)→ 遍历查询的变量范围,开始的值(这里如果不填写,默认从1开始,如果没有1开始的变量,执行时会报错)
End index for loop(inclusive):循环指数结束(包含)→ 遍历查询的变量范围,结束的值
输出变量名称:将遍历查询到的符合条件的用户参数赋值给输入变量(Vname),然后就可以在控制器下的取样器使用,格式为${输出变量名}
Add”_”before number:输入变量名称中是否使用“_”进行间隔
PS:这个控制器一般配合配置元件→ 用户定义的变量来一起使用
8.3 包含控制器(Include Controller)
作用:用于引用外部的Jmx文件;从而控制多个测试计划组合
include Test Plan:包含测试计划的文件名,可以点击浏览,从文件夹保存的JMX文件夹目录下选择对应的JMX文件
使用方法:创建一个测试计划,下面可添加取样器/控制器等,然后保存测试计划,为了方便起见, 线程组也可以添加外部JMX文件中用于调试;
如果测试使用Cookie或用户定义的变量,这些应放置在顶层(包括文件),否则无法正常工作;此元素不支持变量/函数在文件名字段中;但是,如果属于包含控制器定义的内容,则使用前缀路径名。
当使用包含控制器中包含相同的JMX文件,则要确保文件名不同,以避免无法读取;如果文件不能被发现,那么控制器会尝试打开文件名相对于JMX启动目录。
8.4 生命周期/运行周期控制器(Runtime Controller)
作用:用于控制该控制器下的取样器/控制器的运行时间
Runtime(seconds):运行时间,单位为:秒
8.5 转换控制器(Switch Controller)
作用:通过给该控制器中的value赋值,来指定运行哪个取样器(也可以理解为开关控制器)
Switch value:控制器具体赋值的value值字段
有两种赋值方式:
①.第一种是数值,Switch控制器下的子节点从0开始计数,通过指定子节点所在的数值来确定执行哪个元素。
②.第二种是直接指定子元素的名称,比如采样器的Name来进行匹配。当指定的名称不存在时,不执行任何元素。
当Value为空时,默认执行第1个子节点元素。
8.6 当/判断控制器(While Controller)
作用:运行其子节点下的取样器/控制器,直到条件为“假”
Condition(function or variable):条件(函数或变量):里面可填入判断依据的条件,参照
使用方法:可能的条件值有:
①.空白:最后一个示例循环失败时退出循环
②.最后一个值:最后一个示例循环失败时退出循环。 如果之前的最后一个示例只是循环失败,不进入循环。
③.否则:退出时(或不输入)循环条件等于字符串“ 假 ”
条件可以是任何变量或函数,最终等于字符串” 假 ”。需要注意的是:条件是评估两次,一次取样前,一次随机取样
8.7 事务控制器(transaction controller)
作用:生成一个额外的采样器来测量其下测试元素的总体时间;值得注意的是,这个时间包含该控制器范围内的所有处理时间,而不仅仅是采样器的
Generate parent sample:生成父样本(不同的模式选择)
include duration of timer and pre-post processors in generated sample:包含时间的计时器和前后处理器生成的示例(不同的模式选择)
对于Jmeter2.3以上的版本,有两种模式的操作
①.事务采样器是添加到其下采样器后面的
②.事务采样器是作为其下采样器的父采样器
生成的事务采样器的测量的时间包括其下采样器以及其他的一切时间。由于时钟频率问题,这个时间可能略大于单个采样器的时间之和;时钟开始时间介于控制器记录开始时间与第一个采样器开始之间,时钟结束时间亦然。
事务采样器只有在其子采样器都成功的情况下才显示成功。
在父模式下,事务控制器下的各个采样器只有在结果树里才能看到;同时,子采样器的数据也不会在CSV文件中显示,但是在XML文件中可以看到。
8.8 交替控制器(creatleave controller)
作用: 交替控制,使得该控制器包含的取样器步骤交错执行在每个循环中
忽略子控制器模块(Ignore sub-contorller blocks):如果勾选此项,交错控制器将sub-controllers像单一请求元素一样,一次只允许一个请求/控制器
使用方法:假使该控制器下有2个取样器A和B,交替执行A和B2个请求,即每次传递一个子请求到这个测试,按子元件的排列顺序
8.9 仅一次控制器(once only controller)
作用:在多线程循环的时候,将使其子节点下的取样器请求只运行一次
8.10 流量控制器(throughput controller)
作用:jmeter自带的翻译这里是错误的,因为它并不能控制吞吐量(吞吐量的概念请自行百度);其实质作用是允许用户控制执行的频率
总共有两种执行模式:百分比执行和总执行
总执行(Total Executions):使控制器停止执行一定数量的测试计划
百分比执行(Percent Executions):使控制器按一定比例执行迭代的测试计划
流量(Throughput):对应上面的执行数量或者比例
每个用户(Per User):每个用户
如果勾选此项,将导致控制器计算是否应该执行在每个用户(每个线程)的基础上;如果不加以控制,那么将计算全球所有用户
8.11 如果控制器(If Controller)
作用:允许用户控制该控制器下面的取样器/控制器是否执行测试
条件(默认JavaScript)(Condition(default javascript)):使用JavaScript的函数或变量进行评估判断条件为真或假
条件解释为变量表达式(interpret condition as variable expression):如果勾选该项,那么变量表达式会进行求值,并与“ture”或“false”进行比较,而无需使用JavaScript
对所有子条件评估(evaluate for all children):如果勾选该项,则变量表达式可以返回任何值,而不用与“ture”或“false”进行比较
默认情况下,该控制器可以对包含在其下面的所有可运行的元素进行评估,但只能评估一次
填写多个条件并用“,”号隔开时表示且的关系,只有所有条件同时满足才可运行。
8.12 录制控制器(Recording Controller)
作用:类似代理服务器的作用,在测试执行期间记录测试样本
清除所有记录的样本(Clear all the recorded samples):点击可以清除所有已经记录的测试样本
一般情况下,在测试执行时候,它没有效果,但是在执行HTTPS测试脚本时,会记录下所有测试样本
8.13 循环控制器(Loop Controller)
作用:该控制器下的取样器请求可以循环运行
循环次数(Loop Count):在输入框中输入需要循环的次数,控制器下的请求即可循环运行
永远(forever):如果勾选该项,那么控制器下的请求可一直运行
8.14 模块控制器(Module Controller)
作用:测试控制器子节点下的某一个模块,而不是整个测试计划
寻找目标元素(Find target element):寻找测试计划中需要特定测试的元素,模块;也可理解为该控制器可以控制已经封装好的模块元素
△:一个测试计划由一个控制器和所有的测试元素(取样器等)组成,测试计划可以位于任何线程组或工作台;如果计划位于线程组,则可以禁用其他控制器,防止正在运行的测试计划被影响(除了模块控制器)
模块控制器的优势在于:当存在多个线程组时,该控制器可以轻松切换,只需要选择对应的取样器,方便快捷,替代了创建很多测试计划的繁琐操作
△:任何一个模块所用的控制器名字必须唯一,因为其名字被用来找到目标控制器时重新加载;出于这个原因,最好保证控制器名字不同,否则执行测试时候可能发生意外
△:模块控制器与远程测试不应使用或非gui测试与工作台部件,因为工作台测试元素并没有测试计划的一部分 jmx 文件。 任何这样的测试就会失败
8.15 简单控制器(Simple Controller)
作用:用来组合取样器和其他逻辑控制器
简单控制器是最基本的控制器,对jmeter测试运行没有任何影响,可用来命名某些操作
8.16 随机控制器(Random Controller)
作用:类似交替控制器,但该控制器随机选取某一个取样器请求并执行
忽略子控制器模块(Ignore sub-controller blocks):如果勾选此项,交错控制器将sub-controllers像单一请求元素一样,一次只允许一个请求/控制器
8.17 随机顺序控制器(Random Order Controller)
作用:类似于简单控制器,将执行每个每个子节点下的取样器请求一次,但是执行是随机的
9. 后置处理器
9.1 正则表达式提取器
Jmeter关联的方式
Jmeter中关联可以在需要获取数据的请求上 右键-->后置处理器 选择需要的关联方式,如下图有很多种方法可以提取动态变化数据:
正则表达式提取器
1、比如需要提取如下响应文本中的 “<title>百度一下,你就知道</title>” 里面的 “百度一下,你就知道”:
2、设置正则表达式提取器:
说明:
(1)引用名称:下一个请求要引用的参数名称,如填写title,则可用${title}引用它。
(2)正则表达式:
():括起来的部分就是要提取的。
.:匹配任何字符串。
+:一次或多次。
?:不要太贪婪,在找到第一个匹配项后停止。
(3)模板:用$$引用起来,如果在正则表达式中有多个正则表达式,则可以是$2$$3$等等,表示解析到的第几个值给title。如:$1$表示解析到的第1个值
(4)匹配数字:0代表随机取值,1代表全部取值,通常情况下填0
(5)缺省值:如果参数没有取得到值,那默认给一个值让它取。
3、使用2中获取到的值:
关于正则表达式的举例说明
1、提取单个字符串:
假如想匹配Web页面的如下部分:name =
"file" value = "readme.txt">并提取readme.txt。一个合适的正则表达式:name = "file" value = "(.+?)">。
():封装了待返回的匹配字符串。
.:匹配任何单个字符串。
+:一次或多次。
?:不要太贪婪,在找到第一个匹配项后停止。
2、提取多个字符串:
假如想匹配Web页面的如下部分:name =
"file.name" value = "readme.txt">并提取file.name和readme.txt。一个合适的正则表达式:name = "(.+?)" value = "(.+?)"。这样就会创建2个组,分别用于$1$和$2$
比如:
引用名称:MYREF
模板:$1$$2$
如下变量的值将会被设定:
MYREF: file.namereadme.txt
MYREF_g0: name =
"file.name"value = "readme.txt"
MYREF_g1: file.name
MYREF_g2: readme.txt
在需要引用地方可以通过:${MYREF}, ${MYREF_g1进行使用。
10. 断言
在web测试中,有的时候,即使我们测试返回的response code为200,也不能保证该测试是正确的,这时候,我们可以用到响应断言,通过对比响应的内容来判断返回的页面是否是我们确定要返回的页面。
选择我们要判断的页面,点击添加断言----响应断言,将会出现如下图:
名称:随意,这里我们不做改动
注释:随意
Apply to:这里我们选择默认值
要测试的响应字段:这里我们选择响应的文本,即返回的页面信息
模式匹配规则:这里我们选择包括,即响应的文本是否包括我们验证的信息
要测试的模式:开发者名称,即我们需要验证,开发者名称是否在响应文本中存在,也可以添加更多的字段来验证。
11. 监听器
我们做性能测试的时候,经常需要各种数据来验证我们的测试结果,Jmeter里面也提供了相关的功能,这里主要说一下Aggregate Report聚合报告。
点击添加---监听器,选择:查看结果树,和聚合报告,如果需要看到断言信息也可以选择断言结果,将设置的一切保存之后,然后点击启动,系统将会运行,将结果在监听器中表现出来。
12. 分析结果
12.1查看结果树
如图所示:成功的为绿色,失败则显示为红色。如果测试的结果太多,你只需要看到错误的页面,则勾选【仅日志错误】
12.2 聚合报告(Aggregate Report)
其中:
Label:标签,即我们上面的请求名称
#Samples:本次场景中一共发出了多少个请求
Average:平均响应时间
Median:中位数,也就是50%的用户的响应时间
90%Line:表示90%的用户的响应时间,如果最小值和最大值相差很大的话,我们一般选择这个作为最终测试结果
Min:最小响应时间
Max:最大响应时间
Error%:出错率,本次测试中出现错误的请求的数量/请求的总数
Throughput:吞吐量
KB/sec:每秒从服务器端接受到的数据量
12.3 结果分析(监听器)
1.聚合报告
Aggregate Report 是 JMeter 常用的一个 Listener,中文被翻译为“聚合报告”。今天再次有同行问到这个报告中的各项数据表示什么意思,顺便在这里公布一下,以备大家查阅。
如果大家都是做Web应用的性能测试,例如只有一个登录的请求,那么在Aggregate Report中,会显示一行数据,共有10个字段,含义分别如下。
Label:每个 JMeter 的 element(例如 HTTP Request)都有一个 Name 属性,这里显示的就是 Name 属性的值
#Samples:表示你这次测试中一共发出了多少个请求,如果模拟10个用户,每个用户迭代10次,那么这里显示100
Average:平均响应时间——默认情况下是单个 Request 的平均响应时间,当使用了 Transaction Controller 时,也可以以Transaction 为单位显示平均响应时间
Median:中位数,也就是 50% 用户的响应时间
90% Line:90% 用户的响应时间
Note:关于 50% 和 90% 并发用户数的含义,请参考下文
http://www.cnblogs.com/jackei/archive/2006/11/11/557972.html
Min:最小响应时间
Max:最大响应时间
Error%:本次测试中出现错误的请求的数量/请求的总数
Throughput:吞吐量——默认情况下表示每秒完成的请求数(Request per Second),当使用了 Transaction Controller 时,也可以表示类似 LoadRunner 的 Transaction per Second 数
KB/Sec:每秒从服务器端接收到的数据量,相当于LoadRunner中的Throughput/Sec
2. 图形报表
图表底部参数的含义如下:
样本数目是总共发送到服务器的请求数。
最新样本是代表时间的数字,是服务器响应最后一个请求的时间。
吞吐量是服务器每分钟处理的请求数。
平均值是总运行时间除以发送到服务器的请求数。
中间值是代表时间的数字,有一半的服务器响应时间低于该值而另一半高于该值。
偏离表示服务器响应时间变化、离散程度测量值的大小,或者,换句话说,就是数据的分布。
3. 监视器结果
“监视器结果”(Monitor Result)是为Tomcat 5设计的,用来实时反映服务器的性能情况,如果你的AppServer不是Tomcat 5,使用“监视器结果”得不到结果,但是任何servlet container都可以移植status servelet并使用此monitor,如果需要对其他的AppServer使用该Monitor,需要移植Tomcat 5的status servelet。
添加JMeter的“监视器结果”利用的是Tomcat本身的特性,就是直接访问Tomcat服务器的/manager/status,获得相应的服务器状态数据并进行呈现。因此,在JMeter中添加“监视器结果”来监视服务器状态的步骤如下:
1.增加一个HTTP Request的Sampler;
2.选中该新增的HTTP Request,修改其属性:
修改“名称”为服务器状态(非必须)
修改“路径”为manager/status,必要时给出服务器的IP地址和Port的值
增加一个参数,该参数的名称为大写的XML,值为小写的true
选中下方的“用作监视器”
如下图所示:
3.增加一个“http授权管理器”因为访问Tomcat的应用服务器的/manager/status需要给出用户名和口令。如下图所示
4. 添加一个“监视器结果”的节点
执行后,会在监视器结果中的性能页面显示图。其中healthy/Warning/非活动”是根据服务器上的可用线程数/最大可用线程数得出,而Load用来衡量应用服务器的压力状况。
13. 监控内存及CPU等
13.1 JMeterPlugins的下载地址
地址:http://code.google.com/p/jmeter-plugins/downloads/list,选择需要的版本,下载
13.2 JMeterPlugins的配置使用
将下载的文件解压,得到如下目录:
将JMeterPlugins.jar包复制到Jmeter的lib目录下面的ext目录下面,重新启动Jmeter,我们点击添加就可以看到出现了很多的jp@gc-开头的文件.
这里监控内存我们使用的是:jp@gc - PerfMon Metrics Collectot
在使用之前,我们需要运行/serverAgent/startAgent.bat这个文件,我们需要将serverAgent目录及下面的文件复制到我们测试的服务器上,然后点击打开(我这里是本机,直接在本机上面打开这个应用系统即可),它的默认端口为4444。
一切准备好后,点击启动,即可得到如下图:
你就可以得到系统运行时,你所需要的常用的性能值了。
14. 监控内存及CPU等(jconsole)
最近逛论坛的时候,发现了一个比较好的监控内存CPU等的小工具,本着开源小工具多多益善的原则,记录一下。
打开这个小工具的步骤很简单,如果你已经配置好了Jmeter运行的环境,那么你也就不用去做其他的配置,直接 点击:开始——》运行——》输入cmd——》然后在出现的命令行界面输入“jconsole”即可弹出一个【java监视和管理控制台】,
将会弹出如下界面:
这里我们选择本地进程,并点击一下sun.tools.jconsole.JConsole这一行,然后点击连接,就可以查看我们的内存和CPU的使用情况了。
当然,我们要得到服务器的内存使用等信息,也可以选择 本地进程下面的远程进程,在文本框中输入我们需要测试的服务器的IP地址:端口,然后在下面输入用户名和密码,点击连接,看看会出现什么情况。
15. 问题集锦
中文乱码解决方法
第一步:
CSV Data Set Config元件提供比较丰富的参数设置:编码方式、分隔符、循环使用、共享模式;这里有一个注意点:“Allow quote data”选项选为“true”的时候对全角字符的处理出现乱码。请按如下配置,就没有乱码问题了。别忘记了吧File encoding 设置为gb2312
第二步:
修改文件,路径:jmeter\bin\jmeter.properties
默认编码为:ISO-8859-1
# The encoding to be used if none is provided (default ISO-8859-1)
#sampleresult.default.encoding=ISO-8859-1
根据测试系统修改对应的编码,如为utf-8
则增加编码设置为:
sampleresult.default.encoding=utf-8
修改配置后,要重启jmeter才会生效
处理请求时出错解决方法
(1) 检查HTTP信息头管理器的配置信息是否填写有误,空格也会导致出错。
(2) 检查HTTP Cookie 管理器的配置信息是否填写有误。