JMerter1Jmeter的安装Jmeter的主要功能模块Jmeter的使用Jmeter的安装2JMeter的下载地址为,将最新版本下载到本地电脑,直接解压即可。由于JMeter是基于Java的桌面应用程序,所以在使用JMeter之前必须确保本机装有JDK,并配置好JDK的环境变量。装好JDK1.6以上版本后,在JMeter的bin路径下找到Jmeter.bat,双击启动JMeterJmeter的打开页面3Jmerter的主要功能模块41测试计划。启动JMeter之后,就默认打开了一个测试计划。一个完整的测试计划包含一个或者多个线程组、逻辑控制、取样发生控制、监听器、定时器、断言和配置元件。2线程相当于LoadRunner中的虚拟用户,每个JMeter测试计划的第一步就是添加线程组。在线程组里设置要模拟的并发用户量、并发时间或并发次数、线程的启动频率。3取样器(Sampler)性能测试中向服务器发送请求并等待响应的最小单元,每个采样器有不同的属性可以设置。4逻辑控制器(LogicController)。逻辑控制器可以自定义JMeter发送请求的行为逻辑,它与Sampler结合使用可以模拟复杂的请求序列。常用的逻辑控制器有ifController、whileController、RuntimeController事务控制器、随机控制器、交替控制器、吞吐量控制器、模块控制器等5监听器(Listener)。对JMeter测试结果进行收集处理并进行可视化展现的一系列元件,包括发送的请求数据、返回的结果数据、响应时间的统计、吞吐量、错误率、返回结果状态等信息。Jmerter的功能模块256配置元件(ConfigElement)维护Sampler需要的配置信息,并根据实际的需要修改请求的内容,常用来做参数化7定时器(Timer)相当于LoadRunner中的思考时间。8断言(Assertions)相当于LoadRunner中的检查点,9前置处理器(PerProcessors)常用来修改请求的设置。10后置处理器(PostProcessors)相当于LoadRunner中的关联。Jmeter脚本的录制badboy6Badboy提供了强大的屏幕录制和回放功能,我们可以用Badboy录制脚本,然后将录制的脚本导出为JMeter格式的脚本,最后将该脚本导入到JMeter,借助于JMeter强大的测试功能模拟大量的虚拟用户,进行复杂的性能测试.下载地址。安装完成后打开界面脚本的录制过程71)单击“开始录制”按钮(地址栏后的绿色箭头)开始录制。2)开始录制后,可以直接在Badboy内嵌的浏览器(主界面的右侧)中对被测应用进行操作,所有的操作都会记录在主界面左侧的编辑窗口中。3)录制完成后,单击工具栏中的“停止录制”按钮,完成脚本的录制。4)保存脚本。在菜单中选择File→ExporttoJMeter命令,填写文件名xxx.jmx,将录制好的脚本导出为Jmeter5)JMeter打开Badboy录制的脚本。启动JMeter,打开刚利用Badboy录制生成的测试脚本这样就可以用JMeter进行测试了Jmeter的参数化81.使用用户自定义变量1)在测试计划中单击“用户定义的变量”下的“添加”按钮,开始添加自定义变量。2)在“名称”中定义变量的名称,例如这里定义的变量名称是key;在“值”中定义变量对应的值,这里key变量对应的值是:192.168.113.128。完成自定义变量的添加后,到需要进行参数化的位置进行参数化,找到需要进行参数化的地方后,将值中的内容用${key}替换(JMeter中的变量都是用${}替换即可Jmeter参数化29使用配置元件中的CSVDataSetConfig进行参数化设置在线程组上单击鼠标右键,选择添加→配置元件→CSVDataSetConfig,打开CSVDataSetConfig设置界面。1Filename:文件名,指参数化的文件目录:这里d:\user.txt。2VariableNames(comma-delimited):参数名称,这里是user,password,如果有多个参数,就写多个参数的名称,每个名称中间用分隔符分隔开3Allowquoteddata:是否允许引用数据,默认为False,为ture时会把参数化文件中双引号里的内容当作响应的参数化取值。4RecycleonEOF结束后是否循环:True表示循环读入数据False则表示不循环读入数据。5StopthreadonEOF:到了参数化文件尾处,是否停止线程①当RecycleonEOF选择True时,StopthreadonEOF选择True或者False没有任何意义②当RecycleonEOF选择Flase时:StopthreadonEOF选择True,如果设置线程数目为10,而参数化文件里只有5行数据,那么只会请求5次。StopthreadonEOF选择Flase,如果设置线程数目为10,而参数化文件里只有5行数据,那么会请求10次;Jmeter参数化310使用函数助手里的随机函数进行参数化JMeter中有一个函数助手的功能,里面内置了多个函数,可以利用其中的_Random函数、_threadNum函数或者CSV相关函数来进行参数化设置。多个参数同时取值时,如(username,password),参数文档中用逗号分隔,每一个参数取参数化文件中对应的列。这里函数助手最终生成的函数为${__CSVRead(D:\user.txt,0)}Jmeter脚本的关联11JMeter也有类似于LoadRunner的关联,不过JMeter的关联是用基于正则表达式和XPathExtractor等实现的。首先在需要获得数据的请求上右击,依次选择“添加”→“后置处理器”→“正则表达式提取器”,正则表达式写好之后,把脚本中的请求复制一份,并将复制请求中要关联的值用正则表达式中设置的变量名${formhash}替换。Jmeter检查点12JMeter与LoadRunner一样,也有检查点,不过JMeter的检查点是用断言实现的,JMeter中集成了BSF断言、响应断言、XML断言等,其中使用比较多的是响应断言。通过“添加”→“断言”→“响应断言”就能添加响应断言了。如果添加了断言,就需要在对应的监听器添加“断言结果”才能在执行后查看断言结果是否正确。Jmeter检查点13断言相关界面解释如下。1名称:该节点的名称,可自行定义。2注释:对该节点的注释,有意义即可。3Applyto:默认即可。4要测试的响应字段:可以选择文本、代码,一般选择文本即可。5模式匹配规则:包括:返回结果包括指定的内容,一般断言的时候,匹配规则选择包括即可。匹配:返回的结果与指定的内容进行精确匹配,因为响应的内容一般还包含其他的信息,如HTML标签,所以很难准确匹配。Equals:返回结果与指定结果一致。Substring:返回结果是指定结果的子串。否:不进行匹配。Jmeter集合点14LoadRunner中的集合点可以设置多个虚拟用户等待到一个点,同时触发一个事务,以达到模拟真实环境下多个用户同时操作,实现性能测试的最终目的。JMeter中也有集合点这个概念,JMeter中使用SynchronizingTimer实现集合点的功能,模拟多用户并发测试,即多个线程在同一时刻并发请求。将测试元件的SynchronizingTimer添加到请求之前或某个Sampler的子节点,右击左侧窗格的“测试计划”,在弹出的菜单中依次选择“添加”→“定时器”→SynchronizingTimer名称:该节点的名称,可自行定义。·注释:对该节点的注释,有意义即可。··NumberofSimulateduserstoGroupby:集合点集合够N个用户才开始执行并发,在使用中发现最后一批线程数不够集合点数目时,JMeter会停止不动,如果碰到这种情况,就只能杀掉JMeter进程重新执行测试。Timeoutinmilliseconds:如果设置为0,发生超时时间间隔后如果用户等待的数量没有达到计时器将停止等待Jmeter聚合报告15·Samples:本次测试一共运行了多少个请求。·Average:测试结果的平均响应时间,单位为ms。··Median:测试结果中的中间值。·90%Line:测试结果中90%用户的响应时间不超过该值。·Min:测试结果中的最小响应时间。·Max:测试结果中的最大响应时间。·Error%:本次测试错误率,性能测试的前提是保证业务的正确性,如果错误率过高,那么性能结果一般也是不能接受的。行业内一般要求是99.99%,当然,这个不是绝对的。·Throughput:吞吐量。·KB/Sec:每秒从服务器端接收到的数据量。用表格查看结果树16·Sample:每个请求的序号。·StartTime:每个请求运行开始时间。·ThreadName:每个线程的名称。·Label:请求名称。·SampleTime(ms):每个请求所花的时间,单位为ms·Status:请求状态,如果为勾则表示成功,如果为叉表示失败;但如果是勾,也并不能认为请求就一定完全成功了,因为还得看Bytes的字节数是否是所请求网页的正常大小值,如果不是则说明发生了丢包现象,所以如果Status为勾也不代表一定是成功的。·Bytes:请求的字节数。17