利用JMeter进行Web性能测试尚飞1.JMeter录制http脚本2.JMeter设置压力测试场景3.JMeter几种监听器(Listener)介绍4.JMeter用于分布式压力测试5.几种JMeter-plugins介绍6.JMeter对java脚本的支持7.JMeter的NonGui运行模式JMeter性能测试JMeter介绍JMeter,是一个纯Java应用,它是Apache组织的开放源代码项目,它是功能和性能测试的工具。JMeter可以用于测试静态或者动态资源的性能(文件、Servlets、Perl脚本、Java对象、数据库和查询、ftp服务器或者其他资源)。原先JMeter是为Web/HTTP测试而设计的,但是它已经扩展以支持各种各样的测试模块。脚本录制利用BadBoy进行脚本录制利用JMeter的代理服务器功能进行脚本录制利用BadBoy录制JMeter脚本利用BadBoy录制JMeter脚本在地址栏(图中红色方框标注的部分)中输入你需要录制的Web应用的URL。点击开始录制按钮(图中蓝色圆圈标注的部分)开始录制。开始录制后,你可以直接在Badboy内嵌的浏览器(主界面的右侧)中对被测应用进行操作,所有的操作都会被记录在主界面左侧的编辑窗口中利用BadBoy录制JMeter脚本选择“File-ExporttoJMeter”菜单,填写文件名“test.jmx”,将录制好脚本导出为JMeter脚本格式。也可以选择“File-Save”菜单保存为Badboy脚本启动JMeter并打开刚刚生成的测试脚本,就可以用JMeter进行测试了。利用JMeter的代理服务器功能进行脚本录制•在测试计划中添加线程组,在线程组中添加逻辑控制器-录制控制器。•在工作台中添加非测试元件-HTTP代理服务器。•端口:即代理服务器的监听端口,我们设为8080。•目标控制器选择:测试计划线程组;•分组选择:每个组放入一个新的控制器。利用JMeter的代理服务器功能进行脚本录制•代理服务器配置好以后,点击启动,代理服务器就会开始记录所接受的HTTP访问请求。•打开浏览器,打开Internet选项,将局域网(LAN)设置中的代理服务器设为:localhost,端口为在代理服务器中设的端口:8080。•在浏览器地址栏中输入地址并进行相关的操作进行脚本录制(注:浏览器默认打开页面设置为空页面)配置脚本运行场景•测试计划(TestPlan)是使用JMeter进行测试的起点,它是其它JMeter测试元件的容器。•名称:你可以为你的测试计划取一个有意义的名字。•注释:对测试计划的注释。•用户定义的变量:用户可以自己定义变量,在用到此变量的时候直接用${变量名}引用即可。例:变量名=param1,值=1234560,在需要使用参数param1时直接用${param1}即可。•Adddirectoryorjartoclasspath:向类路径即%JMeter-HOME%\lib中添加目录及jar包。配置脚本运行场景•名称:为线程组起名字。•线程属性-线程数:设置发送请求的用户数目,即并发数。•线程属性-Ramp-UpPeriod(insecond):线程间的时间间隔,单位是秒。即所有线程在多少时间内启动。•线程属性-循环次数:请求的重复次数,如果选择后面的forever(默认),那么请求将一直继续,如果不选择forever,而在输入框中输入数字,那么请求将重复指定的次数,如果输入1,那么请求将执行一次,如果是0,会出现问题。•调度器配置-启动时间:测试计划什么时候启动,启动延迟会覆盖它。•调度器配置-结束时间:测试计划什么时候结束,持续时间会覆盖它。•调度器配置-持续时间:测试计划持续多长时间,会覆盖结束时间。•调度器配置-启动延迟:测试计划延迟多长时间启动,会覆盖启动时间。配置脚本运行场景•名称:HTTP请求的名字。•Web服务器-服务器名称或IP、端口号,脚本录制时自动添加,也可以使用“用户自定义变量”。•HTTP请求:用默认值即可。•同请求一起发送参数:请求中的参数、值可以在此设置,需要用到参数化及动态数据关联,我们在后面专门介绍。•同请求一起发送文件:我可以制定同请求一起发送哪个文件。•其他任务包括:从HTML文件中获取所有内含的资源、用作监视器、EmbeddedURLsmustmatch。配置脚本运行场景监听器(Listener)负责收集测试结果,同时也被告知了结果显示的方式。我们常用的包括:聚合报告、查看结果树、用表格查看结果,都支持将结果数据写入文件。其他的添加上去看看就行。聚合报告前面我们介绍过,后面是查看结果树和用表格查看结果的截图。配置脚本运行场景定时器(Timer)负责定义请求之间的延迟间隔。配置脚本运行场景定时器(Timer)负责定义请求之间的延迟间隔。配置脚本运行场景•响应断言(Assertions),类似检查点,用于对请求返回的信息,做字符串、数据包大小、HTML、XML、图片等做判断,确保返回的信息的准确性。监视器:聚合报告聚合报告(SummaryReport),反映出测试中每一种请求总的状态监视器:聚合报告Label:每个JMeter的element(例如HTTPRequest)都有一个Name属性,这里显示的就是Name属性的值Samples:表示你这次测试中一共发出了多少个请求,如果模拟10个用户,每个用户迭代10次,那么这里显示100Average:平均响应时间Median:中位数,也就是50%用户的响应时间90%Line:90%用户的响应时间Min:最小响应时间Max:最大响应时间Error%:本次测试中出现错误的请求的数量/请求的总数Throughput:吞吐量——默认情况下表示每秒完成的请求数KB/Sec:每秒从服务器端接收到的数据量,相当于LoadRunner中的Throughput/Sec监视器:察看结果树•察看结果树(ViewResultsTree):通过这个Listener,我们可以看到很详细的每个transaction它所返回的结果,其中红色是指出错的transaction,绿色则为通过的。JMeter进行分布式测试作为一个纯JAVA的GUI应用,JMeter对于CPU和内存的消耗还是很惊人的,所以需要模拟数以千计的并发用户时,使用单台机器模拟所有的并发用户就有些力不从心,甚至还会引起JAVA内存溢出的错误。不过,JMeter也可以像LoadRunner一样通过使用多台机器运行所谓的代理来分担负载产生器自身的压力,并借此来获取更大的并发用户数,我们只需手动配置一下即可。JMeter进行分布式测试在所有期望运行JMeter作为负载产生器的机器上安装JMeter,并确定其中一台机器作为控制器,其他的机器作为代理,然后运行所有代理机器上的JMeter-server.bat在Controller机器的JMeter安装目录下找到bin目录,再找到JMeter.properties这个文件,“remote_hosts=”这个字符串,你可以找到这样一行“remote_hosts=127.0.0.1”。其中的127.0.0.1表示运行JMeter代理的机器,这里需要修改为“remote_hosts=172.20.80.47,172.20.80.68”;保存文件,并重新启动控制器机器上的JMeter,并进入启动-远程启动菜单项。就会看到我们刚才添加的两个代理的地址,选中即可运行,如果想同时启动所有代理,选择远程全部启动即可。几种JMeter-plugins介绍PerfMonMetricsCollector几种JMeter-plugins介绍HitsperSeconds几种JMeter-plugins介绍BytesThroughputOverTime几种JMeter-plugins介绍ResponseCodesperSecond几种JMeter-plugins介绍ResponseTimesOverTimeJMeter对java脚本的支持使用JMeter的JAVA请求功能来进行测试,主要是测试一些JMeterSampler里没有的请求,例如我们测试RPC。使用JMeter的Java请求,需要如下步骤:1)新建JAVA工程。2)在JAVA工程中引入ApacheJMeter_java.jar、ApacheJMeter_core.jar两个JAVA包以及测试所需要的jar(两个jar包在JMeter目录的lib/ext目录中)。3)新建的JAVA类需要继承AbstractJavaSamplerClient类,需要重写runTest(JMeter测试用例入口)和teardownTest两个函数4)JAVA业务类完成之后,打包并将jar包放到JMeter目录下的lib/ext下(将项目依赖的jar也放到此目录),重启JMeterJMeter对java脚本的支持1)选中主界面左侧的“测试计划”,右键菜单-添加-Threads(Users)-线程组。2)再选中刚才新增的线程组,右键菜单-添加-Sampler-Java请求。3)再选中刚才新增的Java请求,右键菜单-添加-监视器-聚合报告。4)Ctrl+R,开始运行,Ctrl+E,清除历史结果JMeter的NonGui运行模式为何使用non-GUI模式:在GUI模式下samples创建的查看结果的Listeners是很消耗内存的对于那些非交互的测试,你可以使用非GUI的模式运行JMeter。使用如下命令:-n指定的JMeter运行在non-GUI模式下-t包含测试计划的JMX文件的名称-l用于记录简单结果的JTL文件名称。-r运行所有的在JMeter。properties中指定的远程主机。(或在命令行中提供的覆盖-H服务器名或IP地址-P端口号【示例】JMeter–n–tproj.jmx–lresult.jtl–H192.168.1.115–P8800Thanks!附录:://jmeter-plugins.org/#/