有时候会需要在linux的命令行上运行JMeter,简单说一下做法: 在图形界面上创建测试计划,并保存生成的test_plan.jmx文件; 将生成的test_plan.jmx文件上传到linux服务器; 在linux的命令行执行如下指令: 其中-n说明不是在图形界面下执行,-t指示了测试计划文件的位置。 还是写一个简单的示例吧。接下来创建一个HTTP请求的测试计划。 创建测试计划: 添加一个监听器: 这里将监听结果保存到文件。因为没办法直接通过图形界面查看运行结果,需要通过文件查看监听结果。 最后在命令行执行测试计划: 执行结束后可以将执行结果文件拷贝出来,在jmeter中打开查看。
[阅读更多...]-
在命令行执行JMeter测试计划
-
使用JMeter + PerfMon做远程监控
本文假设已经安装好了JMeter 下载插件 PerfMon并不是JMeter原生的工具。要使用这个工具还需要下载一些插件。下载地址是jmeter-plugins.org。在JMeter Plugins的下载页面可以看到如下需要下载的内容: 下载用红框圈起来的前两个压缩包即可。 下载完成后。将第一个压缩包JMeterPlugins-Standard-1.3.1.zip解压到JMeter的安装目录下。第二个压缩包ServerAgent-2.2.1.zip解压后可以放在要监控的服务器上的任何位置。 使用 将第二个压缩包解压后,目录下有两个启动文件startAgent.sh和startAgent.bat。视平台选择启动文件启动PerfMon。 打开JMeter,添加线程组,在线程组下添加监听器jp@PerfMon Metrics Collector。 然后在PerfMon Metrics Collector中按自己的需求稍作配置即可。 此时照说是应该配置完了。我在官网和其他的地方找到的一些文章也说就这样就可以了。但是坑爹的是,做一下就会发现只这样还是不行的——一运行就会退出。我们还需要添加一个采样器Sampler。什么采样器都行,有了采样器就不会一点运行就退出。 关于怎么使用JMeter这里说的非常简略。想要多了解些可以看一下下文中的参考文档。这里不想反复说一些大家都知道的内容,只是稍作补充并略述心得而已。 最终还是发现PerfMon不是一个好的监控方案。因为CPU的消耗太大,一启动就会占用84%的CPU。用着真心不好,可以替代的方案也太多了,比如jvisualvm。 ######### 参考文档 JMeter Plugin官网: http://jmeter-plugins.org/ JMeter 服务器性能监测插件介绍:http://blog.csdn.net/defonds/article/details/41650813 Jmeter测试工具:http://www.cnblogs.com/zhangchaoyang/articles/2530731.html
[阅读更多...] -
基于JMeter进行分布式测试
我工作中的笔记本配置还可以。但是在测试一个简单的TCP连接时,发现把线程数设置为10000时,我的笔记本会很快死掉。最终实验出我的笔记本可以承受的安全线程数是5000。可是对应用的最低性能要求就是能承受1w的并发。此时可以采用基于JMeter的分布式测试方案。 如刚才提到的,要求测试应用在1w并发下的表现,而一部计算机所能承受的线程数是5000,那么需要两部计算机。 步骤 具体步骤如下: 为两部机器都安装JMeter; 定义两部机器的角色,一部是master,一部是slave;我们直接操作master,而slave只是负责分担master的压力; 获取slave的ip地址,比如是192.168.1.12; 在master的JMeter目录下打开bin目录,编辑jmeter.properties文件。找到“remote_hosts=127.0.0.1”这一行,将之修改为“remote_hosts=127.0.0.1,192.168.1.112:1099”。其中1099是master和slave的RMI通信端口。编辑完后记得保存; 打开master上的JMeter,点击运行菜单项,运行->远程启动->选择要启动的slave的IP;如果需要全部启动,运行->远程全部启动即可。 注意事项 有几点需要注意: 1. 启动jmeter-server服务时,提示: 这个是开始没有找到ApacheJmeter_core.jar,后来去JMETER_HOME目录下去查找,最后找到了,如果不希望看到Could not find的字样,可以配置一下jmeter_home的路径(即bin目录的上一级目录),这样启动jmeter-server服务时,就只会看到Found ApacheJMeter_core.jar,当远程访问时,会看到控制台上打印出一行:Starting the test on host [ip]:1099 @….(大概是这样的,@后面是执行开始的时间),远程执行结束,会打印一行:Finished the test on host [ip]:1099 @…,表示远程执行结束。 2. 留意一下1099端口,目前暂未确定这个端口是不是可以改的(按理说这个是可以从配置文件中修改的,目前还没有找到如何修改Agent上面的配置,Controller上面的还好修改) 3. Jmeter分布式控制过程中,各个Agent启动的线程数等于线程组中的配置,不是均分线程组中的配置。 参考文档 http://blog.chinaunix.net/uid-26884465-id-3419474.html http://www.51testing.com/html/12/252512-223613.html
[阅读更多...] -
JMeter监听器说明
JMeter的监听器可以理解为JMeter提供的测试分析工具(或者测试结果报告)。JMeter监听器的监听范围是当前节点及其子节点。JMeter提供了多种测试监听器,这里简单说几个用过的监听器。 创建测试计划 为了演示监视器的作用,我这里做了一个简单的HTTP请求测试。 如何创建测试计划就不多说了,可以参看这篇文章:《使用JMeter》 下图是线程组的配置: 下图是HTTP请求的配置参数: 启动测试,很快就可以生成测试结果报告。 用表格查看结果 下图是表格结果: 还有几个重要的指数: 简单说下表格中的字段: Sample#——每个请求的ID; StartTime——每个请求启动时间; SampleTime——响应每个请求的时间(以毫秒为单位); Status——请求状态,如果为勾则表示成功,如果为叉表示失败; Bytes——请求的字节数; Latency——延迟时间; ConnectTime——请求连接用时。 几个指数: 样本数目——样本总数(线程数*循环次数),或者说是发送给测试应用的请求总数; 最新样本——服务器响应最后一个请求的时间; 平均——请求响应时间的平均值; 偏离——请求响应时间的标准差。 聚合报告 下图是本次测试的聚合报告: Label——取样器名称; Samples——发给被测试应用的请求总数; Average——请求响应时间的平均值; Median——请求响应时间中值,即50%的请求响应时间都小于该值(一个统计学的概念); 90%Line——请求响应时间90%线,即90%的请求响应时间都小于该值; Min——最小响应时间; Max——最大响应时间; Error%——出错率(出错的请求数/所有的请求数); Throughput——吞吐量,每秒/每分钟(具体看“/”后面的单位)处理的请求数; KB/sec——每秒从服务器端接收到的数据量,相当于LoadRunner中的Throughput/Sec; 【注意】总体值并不是各列对应记录的累加。是以所有Samples为样本的统计值,如:总体Min=min{各个Samples的Min},总体Max=max{各个Samples的Max}。 Summary Report(总结报告) 下图是本次测试的Summary Report: 觉得这个和聚合报告一起看有点意思。 Label——取样器名称; Samples——发给被测试应用的请求总数; Average——请求响应时间的平均值; Median——请求响应时间中值,即50%的请求响应时间都小于该值(一个统计学的概念); 90%Line——请求响应时间90%线,即90%的请求响应时间都小于该值; Min:最小响应时间; Max:最大响应时间; Std.Dev——所有请求响应时间的标准差,即是“用表格查看结果”中的偏离; Error%——出错率(出错的请求数/所有的请求数); Throughput——吞吐量,每秒/每分钟(具体看“/”后面的单位)处理的请求数; KB/sec——每秒从服务器端接收到的数据量,相当于LoadRunner中的Throughput/Sec; Avg.Bytes——服务端返回给Request数据的平均值(服务端返回所有数据/请求数)。 图形结果 本次测试的图形结果如下图: 这里的几个指数上面都有提到。还是再说一次吧: 样本数目——样本总数(线程数*循环次数),或者说是发送给测试应用的请求总数; 最新样本——服务器响应最后一个请求的时间; 平均——请求响应时间的平均值; 偏离——请求响应时间的标准差; 吞吐量——每秒/每分钟(具体看“/”后面的单位)处理的请求数; 中值——请求响应时间中值,即50%的请求响应时间都小于该值。 查看结果树 下图是查看结果树: 简单说几个概念: 取样器结果——显示的是请求样本相关参数(客户端参数与响应参数) 请求——发送请求的具体值 响应数据——服务端返回的相应参数 ALL! 参考文章 http://www.51testing.com/html/12/252512-223091.html http://www.cnblogs.com/jackei/archive/2007/01/17/623166.html http://www.cnblogs.com/Carrie_Liang/archive/2008/11/10/1330997.html http://zuoye.baidu.com/question/1d937880d6e95b419397e16b267a71ba.html
[阅读更多...] -
使用JMeter
JMeter是一款基于java开发的压力测试应用。最初是为测试 Apache JServ(tomcat的前身)的性能而开发的。不久以后,JMeter也成为了jakarta的一个子项目。 安装 截至目前(20150408),JMeter最新的版本是2.13。用户可以在JMeter官网下载最新的稳定版本。官网提供了.zip和.gz两种格式的下载文件。JMeter2.13需要JDK1.6或更高版本的环境。 下载解压完成后,可以尝试启动jmeter。在linux环境下,运行bin目录下的jmeter脚本,在windows环境下,需要调用jmeter.bat文件。建议将bin目录添加到系统环境变量下,以便调用。下图是JMeter的主窗口: 可以看到,整个界面分为两部分。左侧是测试中需要使用的元素,包括测试计划和工作台。在这篇文章里,我们主要说说测试计划的使用。右键点击测试计划(或工作台),可以添加新的测试计划(或工作台)元素。右键点击新增的测试计划(或工作台)内容,可以选择将之删除。右侧面板则展示了测试计划或工作台的详细信息。 现在可以准备使用JMeter了,但是有两点需要注意: 不可以将JMeter和被测试的应用在同一台机器上运行。因为JMeter会占用大量的系统资源,如果被测试的应用在同一台机器上的话,应用的性能会受到影响; 尽量避免测试受到网络因素的影响。最好可以让网络管理员建立一个隔离的子网络来运行JMeter和被测试的应用。 一个简单的测试 首先,我们进行一个非常简单的测试。在这个测试里,我们将建立一个测试计划,并对一个web应用进行测试。通过这个测试,你可以了解到JMeter的一些常用概念,并基本掌握使用JMeter进行测试的能力。 在实施测试前,我们需要先创建一个测试计划。测试计划描述了使用JMeter进行测试的步骤。一个测试计划包括一个或多个线程组、逻辑控制器、配置元件、定时器、前置处理器、后置处理器、Sampler、断言、监听器等等。如果不懂这些东西是做什么的,先不要担心,我们会在后面的部分说清这些元素的用法。 一个测试计划需要有至少一个线程组。线程组是测试计划实施的起点,它可以包含JMeter实施测试的其它元素。在测试中,线程组负责控制JMeter模拟的用户线程。 现在我们从创建线程组开始。右键点击测试计划,添加->Threads(Users)->线程组,这样就可以在测试计划下新增一个线程组元素了。点击新建的线程组,可以看到下图: 简单介绍下面板中的几个属性: 名称——线程组的名字。可以用一个简短的名称来描述线程组,也可以在注释中给它添加说明; 线程数——JMeter创建的线程数。每个线程代表一个用户。如果想测试10个用户同步操作,那么输入10; Ramp-Up Period——这里标识JMeter创建所有的线程所需要的时间,时间单位是秒。如果线程数是10,Ramp-Up Period是20秒,那么就表示JMeter将在20秒内创建10个线程,即每2秒创建一个线程。如果要20个线程立刻创建完成的话,那么输入0; 永远——如果勾选的话,这个选项会使JMeter无限次地发送请求给被测试应用。如果不勾选的话,那么JMeter只会重复发送指定循环次数的请求; 循环次数——这个属性只会在“永远”复选框没有勾选的情况下发挥作用。这个属性是用来告诉JMeter循环发送多少次请求。 在我们这个小测试中,按照下图来填充测试时的属性。我们模拟了两个用户,每个用户会发送三次请求。这次我们使用了几个非常小的数,这是为了方便我们接下来解释测试结果。在真正的测试环境中,我们更喜欢使用一些很大的数字。 接下来,我们将添加一些测试HTTP 请求的元素。右键点击线程组,添加->Sampler->HTTP请求,这样就添加了一个HTTP请求元素。点击“HTTP请求”,可以看到如下图所示的界面: 在“HTTP请求”面板上,可以设置HTTP请求的参数。这里,有如下几个属性: 名称——HTTP请求的名称。名称需要有足够的代表性,要知道一个线程组中一般会有多个HTTP 请求; 服务器名称或IP——测试应用所在的主机名称或IP地址; 端口号——测试应用所占用的端口号; 协议——所使用的协议,如HTTP或HTTPS; 方法——请求方法,如GET或POST; 路径——资源请求的路径; 跟随重定向——如果有重定向的话是否跟随; Use KeepAlive——如果勾选的话,在请求头中将会包含“Connection = Keep-Alive”;一般的浏览器,在使用HTTP1.1协议发送请求的时候会默认使用“Connection = Keep-Alive”作为连接头。因此,这个复选框一般都会被勾选上; Parameters——请求中所发送的参数列表,可以使用添加、删除按钮添加或删除参数; 同请求一起发送文件——模拟文件上传。 现在,弄清“HTTP请求”中的配置参数了吧。我们还有最后一个要添加到ThreadGroup中的元素,就是监听器。监听器在JMeter中的作用类似于报表。JMeter提供了多种报表,包括图形报表和表格报表。在这次测试中,我们使用最简单的表格报表。右键点击线程组元素,添加->监听器->用表格查看结果,添加表格报表。 好了,一切就绪,可以运行我们的测试计划了。在这之前还有最后一个忠告:在执行测试计划前一定要先保存测试计划,因为JMeter有可能会导致系统崩溃(在线程和循环次数较多的情况下可能会发生这样的情况)。现在,点击绿色的启动按钮运行我们的测试计划吧。 在测试计划运行期间,工具栏右侧有个小方块会变成绿色(有时需要将窗口最大化)。 因为一个测试不会无限期的执行下去,当测试计划执行完毕时,JMeter会自动将之关闭。若JMeter无法自动关闭测试,就需要我们做出干预。点击红色的停止或关闭按钮,关闭所有的连接,结束当前的测试计划。 运行我们的测试计划,得到的结果如下图: 表格中的信息还是比较容易理解的。一共产生了6个测试样本(2个线程,3个循环次数,2*3=6)。表格的第6列标识所有的样本都已测试成功。表格的第5列是样本响应时间,分别是33,32,11,11,10,10。平均响应时间是(33+32+11+11+10+10)/6 = 17(这里是向下取整)。 另外一个重要的指数是偏离度。偏离度是每个样本的响应时间与平均值之间偏差的平方之和的平方根(有点绕,实际上就是标准差,可以据此分析离散性,概率论相关概念)。这个数值标识了被测试应用的稳定性。如果偏离度比较高的话,说明一部分用户会得到非常快速的响应,而另一部分用户却会等上很长的时间。总之,偏离度这个值是越小越好。 练习了这样一个简单的测试后,也就可以从容应对一些复杂的测试了。在进行Web应用的压力测试时,可以逐步提高线程数和循环数,以便观察被测试应用是怎样应对高负载压力的。 接下来的几节将说明一些使用JMeter进行压力测试的一些比较重要的内容。 监听器 JMeter提供了多种监听器(或者说是报表)。在刚才的测试中,我们使用了表格来展示测试结果。如果表格报表不能满足需求的话,还可以为线程组选择一个或者多个监听器。其中比较常用的一个监听器是“图形结果”,如下图所示: 复合HTTP请求 一个web应用可能同时包含静态的和动态的资源。如果想查看这些资源的性能,JMeter可以很轻松地实现发送复合式的HTTP请求。实现这个测试,只需要添加一定数目的“HTTP请求”元素,并分别进行配置即可。当建立了多个HTTP请求元素时,你可能会希望为所有的HTTP请求创建默认值,下一节会说明如何建立HTTP请求默认值元素。 HTTP请求默认值 右键点击线程组元素,添加->配置元件->HTTP请求默认值,添加HTTP请求默认值元素。正如其名,HTTP请求默认值元素指定了同一个线程组下所有的HTTP请求元素的配置参数默认值。HTTP请求默认值是一个非常有用的元素。在绝大多数情况下,HTTP请求总会有些相同的配置参数属性,比如服务器和端口。 HTTP Cookie 管理器 许多web应用都使用了cookie。JMeter通过HTTP Cookie管理器提供了cookie管理功能。在线程组中添加了cookie管理器后,就可以像浏览器一样发送cookie信息了。右键点击线程组元素,添加->配置元件->HTTP Cookie 管理器,可以添加HTTP Cookie管理器,下图是cookie管理器的配置页: 总结 这次我们只是做了一个十分简单的测试,而使用JMeter能做的事情远远不止这些。通过我们提到的这些元素,可以使用JMeter进行各种测试并取得详尽的测试结果报告。这样得到有价值的结果也很容易了。 OK! 本文是翻译的一篇英文文章。难免有词不达意的地方,还请见谅。 原文在这里:http://www.onjava.com/pub/a/onjava/2003/01/15/jmeter.html 还有,这是JMeter的用户手册,虽然说得比较简略,可还是聊胜于无:http://jmeter.apache.org/usermanual/index.html
[阅读更多...]