JMeter学习笔记.docx

上传人:b****8 文档编号:11019782 上传时间:2023-02-24 格式:DOCX 页数:27 大小:379.27KB
下载 相关 举报
JMeter学习笔记.docx_第1页
第1页 / 共27页
JMeter学习笔记.docx_第2页
第2页 / 共27页
JMeter学习笔记.docx_第3页
第3页 / 共27页
JMeter学习笔记.docx_第4页
第4页 / 共27页
JMeter学习笔记.docx_第5页
第5页 / 共27页
点击查看更多>>
下载资源
资源描述

JMeter学习笔记.docx

《JMeter学习笔记.docx》由会员分享,可在线阅读,更多相关《JMeter学习笔记.docx(27页珍藏版)》请在冰豆网上搜索。

JMeter学习笔记.docx

JMeter学习笔记

JMeter学习笔记

1.安装JMeter

1.安装JDK 以上版本。

2.设置环境变量:

i.在用户变量中,新建变量名“JAVA_HOME”,变量值为:

安装JDK的目录,如我的为:

“C:

\ProgramFiles\Java\

ii.再新建变量名为“CLASSPATH”,变量值为:

“%JAVA_HOME%\lib\;%JAVA_HOME%\lib\;%JAVA_HOME%\bin;”。

    

iii.在系统变量的“Path”变量值后加上:

“%JAVA_HOME%\bin;”。

3.|

4.安装Jmeter,解压“到E盘根目录下:

“E:

\。

5.设置环境变量:

i.在用户变量中,新建变量名“JMETER_HOME”,变量值为:

“E:

\。

ii.修改“CLASSPATH”,添加:

“%JMETER_HOME%\lib\ext\;%JMETER_HOME%\lib\;%JMETER_HOME%\lib\。

6.运行jmeter:

直接打开E:

\即可。

2.JMeter的主要测试组件总结如下:

1.测试计划是使用JMeter进行测试的起点,它是其它JMeter测试元件的容器。

2.线程组代表一定数量的并发用户,它可以用来模拟并发用户发送请求。

实际的请求内容在Sampler中定义,它被线程组包含。

%

3.监听器负责收集测试结果,同时也被告知了结果显示的方式。

4.逻辑控制器可以自定义JMeter发送请求的行为逻辑,它与Sampler结合使用可以模拟复杂的请求序列。

5.断言可以用来判断请求响应的结果是否如用户所期望的。

它可以用来隔离问题域,即在确保功能正确的前提下执行压力测试。

这个限制对于有效的测试是非常有用的。

6.配置元件维护Sampler需要的配置信息,并根据实际的需要会修改请求的内容。

7.前置处理器和后置处理器负责在生成请求之前和之后完成工作。

前置处理器常常用来修改请求的设置,后置处理器则常常用来处理响应的数据。

8.定时器负责定义请求之间的延迟间隔。

3.常用测试

本文以这三种节点为例,介绍如何使用JMeter来完成针对于它们的压力测试。

Web服务器

对于大多数的项目来说,并不会自行开发一个Web服务器,因此Web服务器压力测试的对象实际就是--发布到Web服务器中的软件。

最简单的Web测试计划只需要三个JMeter的测试元件,如下图:

 

其中:

在线程组中定义线程数、产生线程发生的时间和测试循环次数。

在http请求中定义服务器、端口、协议和方法、请求路径等。

表格监听器负责收集和显示结果。

?

这种设置对于包含了安全机制的web应用是不够的,典型的web应用一般都会:

1.有一个登录页,它是整个应用的入口。

当用户登录之后,应用会将用户相关的安全信息放到session中。

2.有一个filter,它拦截请求,检查每个请求相关的session中是否包含有用户安全信息。

如果没有,那么请求被重定向到登录页,要求用户提供安全信息。

在这种配置下应用上面的测试计划,那么除了登录页之外的其它请求都将因为缺少用户安全信息,而使请求实际定位到登录页。

如果不加断言,那么在监听器看来所有的请求都是成功。

而实际上,这些请求最终都没有到达它们应该去的地方。

显然,这种测试结果不是我们所期望的。

为了成功的测试,至少有2种方法:

方法一,去掉程序的安全设置,如filter,使得不需要用户安全信息也能访问受限内容;

方法二,不修改程序,使用JMeter提供的"HttpURL重写修饰符"或"HttpCookie管理器"。

对于第一种方法,有其局限性:

.

需要修改程序配置,如去掉中关于安全filter的设置。

需要维护多个版本的,如压力测试和功能测试分别各自的,增加了维护成本,而且有可能会在测试之后忘记将修改回来。

对于一些需要用户安全信息的页面无能为力,如某些业务审计操作需要用户安全信息来记录。

因为缺少这样的信息,注定了测试的失败。

如果解决为了这个问题进一步的修改程序,那么因为存在多个版本的程序,那么其维护难度将大大增加。

虽然,第二种方法配置难度增加了,但是它不用修改程序。

而且还可将测试计划保存成文件,以便重复使用。

因此,选用第二种方法是较为理想的做法。

下面以一个简化的例子说明使用方法二的配置步骤。

1.例子由以下几个文件组成:

,过滤器负责检验session中是否存在用户信息。

如果没有,那么就转向到。

它的主要方法doFilter内容如下:

publicvoiddoFilter(ServletRequestrequest,

ServletResponseresponse,

FilterChainchain)

throwsIOException,ServletException{

HttpServletRequestreq=(HttpServletRequest)request;

HttpServletResponseres=(HttpServletResponse)response;

HttpSessionsession=();

Useruser=(User)("user");

if(null==user){

Stringuri=();

sp

2.创建如下结构的Web测试计划:

 

其中主要测试元件说明如下:

http请求默认值负责记录请求的默认值,如服务器、协议、端口等。

第一个http请求,请求,并附加验证所需要的参数(user=foxgem,pwd=,Submit=Submit);其包含的响应断言验证url中包含"",这一点可以从程序中反应。

第二个http请求,请求是;其包含的响应断言验证响应文本中包含"foxgem",它是页面逻辑的一部分。

httpcookie管理器负责管理整个测试过程中使用的cookie,它不需要设置任何属性。

循环控制器设置发送第二个请求的循环次数,表格监听器负责收集和显示第二个请求的测试结果。

启动测试计划之后,执行的顺序是:

首先,第一个请求登录页进行登录;成功登录之后,使用循环控制器执行第二个请求。

请求时,响应断言用来验证是否确实是来处理请求,而不是因为其它页。

在这个测试计划中需要注意的是httpcookie管理器。

正是由于它的作用,使得第二个请求能顺利的发送到进行处理,而不是因为缺少用户安全信息转发到。

在这个例子中,我们并没有在程序中使用cookie(使用的是session),那么httpcookie管理器怎么会起作用呢这是因为在servlet/jsp规范中对于session的状态跟踪有2种方式:

使用cookie,保留和传递sessionid。

它不要求程序对于url有什么特殊的处理,但是要求浏览器允许cookie。

在这个例子中,就是这种情形。

使用url重写,每次显式的在浏览器和服务器之间传递sessionid。

它要求程序对url进行编码,对浏览器没有要求。

对于第二种情形,可以使用JMeter前置管理器中的httpurl重写修饰符来完成。

对于Tomcat,Session参数是jsessionid,路径扩展使用";"。

使用url编码时需要注意,必须将浏览器的cookie功能关闭。

因为url编码函数,如encodeURL,会判断是否需要将sessionid编码到url中。

当浏览器允许cookie时,就不会进行编码。

如果cookie而不是session来保存用户安全信息,那么直接使用httpcookie管理器就行了。

此时,需要将使用的cookie参数和值直接写到管理器中,由它负责管理。

对于其它的cookie使用,也是如此操作。

登录问题解决之后,对于Web服务器的测试就没什么难点了。

剩下的就是根据实际需要,灵活运用相关的测试组件搭建编写的测试计划。

(当然,对于安全问题还有其它的使用情景。

在使用时需要明确:

JMeter是否支持,如果支持使用哪种测试组件解决。

数据库服务器

'

数据库服务器在大多数企业项目中是不可缺少的,对于它进行压力测试是为了找出:

数据库对象是否可以有效地承受来自多个用户的访问。

这些对象主要是:

索引、触发器、存储过程和锁。

通过对于SQL语句和存储过程的测试,JMeter可以间接的反应数据库对象是否需要优化。

JMeter使用JDBC发送请求,完成对于数据库的测试。

一个数据库测试计划,建立如下结构即可:

 

其中:

JDBC连接配置,负责配置数据库连接相关的信息。

如:

数据库url、数据库驱动类名、用户名和密码等等。

在这些配置中,"绑定到池的变量名"(VariableNameBoundtoPool)是一个非常重要的属性,这个属性会在JDBC请求中被引用。

通过它,JDBC请求和JDBC连接配置建立关联。

(测试前,请将所需要的数据库驱动放到JMeter的classpath中)。

JDBC请求,负责发送请求进行测试。

图形结果,收集显示测试结果。

在实际的项目中,至少有2种类型的JDBC请求需要关注:

select语句和存储过程。

前者反应了select语句是否高效,以及表的索引等是否需要优化;后者则是反应存储过程的算法是否高效。

它们如果效率低下,必然会带来响应上的不尽如人意。

对于这两种请求,JDBC请求的配置略有区别:

Select语句

 

 

存储过程

 

 

如果对于Oracle,如果测试的是函数,那么也可以使用select语句来进行配置,此时可以使用:

select函数(入参)fromdual形式的语句来测试,其中dual是oracle的关键字,表示哑表。

对于其它厂商的数据库产品,请查找手册。

JMS服务器

MOM作为消息数据交换的平台,也是影响应用执行效率的潜在环节。

在Java程序中,是通过JMS与MOM进行交互的。

作为Java实现的压力测试工具,JMeter也能使用JMS对应用的消息交换和相关的数据处理能力进行测试。

这一点应该不难理解,因为在整个测试过程中,JMeter测试的重点应该是消息的产生者和消费者的本身能力,而不是MOM本身。

根据JMS规范,消息交换有2种方式:

发布/订阅和点对点。

JMeter针对这两种情形,分别提供了不同的Sampler进行支持。

以下MOM我们使用ActiveMQ,分别描述这两种消息交换方式是如何使用JMeter进行测试。

1.测试前的准备(两种情况都适用)

下面就是实际使用jmeter进行jms测试

首先需要启动activemq,直接运行ACTIVEMQ_HOME/bin/(ACTIVEMQ_HOME即activemq的安装目录)批处理脚本,当看到如下图所示内容,说明activemq已经成功启动。

下面开始启动jmeter。

在运行jmeter之前需要完成几件事情。

由于jmeter是通过jndi来获得jms中相关对象的,如ConnectionFactory和Destination,所以在jmeter的classpath中需要添加一个属性文件,用于配置jndi。

这个文件配置的是activemq相关的jndi,有关activemq与jndi的集成可以参考  。

文件的内容如下:

 

connectionFactoryNames=connectionFactory

=

=

=

保存并把这个文件复制到JMETER_HOME/bin(JMETER_HOME为jmeter的安装目录)目录中。

由于bin目录并不在jmeter的classpath中,所以需要执行一些额外的工作来把添加到jmeter的classpath中,这儿使用一种最简单的办法:

把打包到jmeter的启动jar包中。

jmeter的启动jar包为JMETER_HOME/bin/,所以需要把打包到这个jar文件中。

执行如下操作,打开命令行窗口,并定位到JMETER_HOME/bin目录,运行如下命令jaruf就可以,如图所示

下图是运行jaruf命令之前,中所包含的目录或文件

 

下图是运行jaruf命令之后的情况

可以看到,文件中已经包含了文件。

jmeter在测试jms的时候会使用到activemq提供的jms的实现类,这些类并没有随jmeter一起分发,所以需要把这些类添加到jmeter的classpath中。

只要把ACTIVE_HOME/文件复制到JMETER_HOME/lib目录中即可。

下面可以运行jmeter了,直接运行JMETER_HOME/bin/批处理文件就可以启动jmeter了。

(jmeter启动的时候默认会在JMETER_HOME/bin目录中生成一个日志文件,如果运行过程中有什么问题可以查看这个日志文件)jmeter启动之后如下图所示

 

下面我们来一步一步建立测试计划。

首先是创建线程组

线程组的具体配置为

创建完线程组之后创建jms point to point sampler

jms配置如下所示

最后创建一个监听器

下面就可以开始测试了

下面两张图片是通过activemq基于web的管理控制台查看到的队列上等待传递的消息的条数。

图1

图2

可以看到运行这一次测试发送了5条消息,这些消息的内容为

 

上面就是一个简单的使用jmeter测试jms应用的过程。

 

从上面准备测试的过程可以看出,在准备activemq方面的jndi的配置的时候有点麻烦,尤其是需要修改jndi配置的时候尤其麻烦,还有就是直接把activemq的jar包放到lib目录中会使jmeter的jar包与测试依赖的混在一起,下面就通过修改jmeter启动类源代码的方法来解决这两个问题。

要通过修改jmeter的启动类,在lib目录下增加两个目录:

user和conf,user目录用于存放测试依赖的jar包,conf用于存放类似这样的配置文件,这两个目录都必须添加到jmeter运行时的classpath中。

查看可以知道,是通过运行bin目录中文件来启动jmeter的。

查看文件的清单文件可知启动类为。

下载jmeter的源代码,查看类。

查看NewDriver的源代码可知,jmeter的启动方式是,扫描lib目录以及lib目录下的子目录ext和junit下的jar包,通过这些jar包构建一个URLClassLoader,然后把这个类加载器设为当前线程的上下文类加载器,然后使用这个类加载器加载类,并运行它的start方法(activemq也是以这样的方式来编写启动类的)。

下面只要把user添加到扫描目录中,并把conf目录添加到classpath中。

修改后的源代码,以及编译打好的包都在附件中,需要的可以下载。

只要下载并把它复制到bin目录中,替换jmeter原来的即可,然后在lib目录下创建两个子目录user和conf。

user用于存放测试依赖的jar包,conf用于存放配置。

?

2.发布/订阅

在实际测试时,发布者和订阅者并不是需要同时出现的。

例如,有时我们可能想测试单位时间内消息发布者的消息产生量,此时就不需要消息发布者,只需要订阅者就可以了。

本例为了说明这两种Sampler的使用,因此建立如下的测试计划:

 

其中JMSPublisher和JMSSubscriber的属性:

选择"使用",连接工厂是connectionFactory,主题是MyTopic,其它使用默认配置。

对于JMSPublisher,还需提供测试用的文本消息。

启动ActiveMQ,运行测试计划。

如果配置正确,那么与ActiveMQ成功连接之后,在JMeter的后台会打印出相关信息。

在测试过程中,JMeter后台打印可能会出现信息,这个是正常现象,不会影响测试过程和结果。

这一点可以从bin下的看出。

3.点对点

对于点对点,JMeter只提供了一种Sampler:

JMSPoint-to-Point。

在例子中,建立如下图的测试计划:

 

其中:

Communicationstyle是RequestOnly。

对于另一种风格:

RequestResponse,会验证收到消息的JMSHeader中的JMSCorrelationID,以判断是否是对请求消息的响应。

4.jmeter结果分析

采用Jmeter测试工具对web系统作的负载测试,得出的响应报表,数据比较难懂,现作一具体说明以下是在一次具体负载测试中得出的具体数值,测试线程设置情况为:

线程数:

200,等待时间(ramp-up):

0秒,循环次数为永远,另线程组——这些元件用于指定运行的线程数和等候周期。

每个线程模拟一个用户,而等候周期用于指定创建全部线程的时间。

例如,线程数为5,等候时间为10秒,则创建每个线程之间的时间间隔为2秒。

循环数定义了线程的运行时间。

使用调度器,还可以设置运行的起始时间

取样器——对于服务器HTTP、FTP或LDAP请求,这些元件是可配置请求。

该教程仅侧重于WebServices请求监听器——这些元件用于请求数据的后期处理。

例如,可以将数据保存到文件或用图表来说明结果。

此时JMeter图表并没有提供许多配置选项;然而它是可扩展的,它始终可以添加额外的可视化效果或数据处理模块,得出的图形报表和聚合报告如下所示:

图形报表

图表底部参数的含义如下:

样本数目是总共发送到服务器的请求数。

:

最新样本是代表时间的数字,是服务器响应最后一个请求的时间。

吞吐量是服务器每分钟处理的请求数。

平均值是总运行时间除以发送到服务器的请求数。

 

中间值是代表时间的数字,有一半的服务器响应时间低于该值而另一半高于该值。

 

偏离表示服务器响应时间变化、离散程度测量值的大小,或者,换句话说,就是数据的分布。

聚合报告

图表含义说明如下:

Label:

说明是请求类型,如Http,FTP等请求。

#Samples:

也就是图形报表中的样本数目,总共发送到服务器的样本数目。

Average:

也就是图形报表中的平均值,是总运行时间除以发送到服务器的请求数。

Median:

也就是图形报表中的中间值,是代表时间的数字,有一半的服务器响应时间低于该值而另一半高于该值。

90%line:

是指90%请求的响应时间比所得数值还要小。

Min:

是代表时间的数字,是服务器响应的最短时间。

Max:

是代表时间的数字,是服务器响应的最长时间。

Error%:

请求的错误百分比。

Throughput:

也就是图形报表中的吞吐量,这里是服务器每单位时间处理的请求数,注意查看是秒或是分钟。

KB/sec:

是每秒钟请求的字节数。

使用分析

在测试过程中,平均响应时间是我们性能测试的一个重要衡量指标,但是在测试中,特别是在聚合报告中,得出的90%Line,我这里参考《《LoadRunner没有告诉你的》之一——描述性统计与性能结果分析》,我认为90%Line等同于该文作者提出的90%响应时间,这个数值对我们性能测试分析也很有参考价值。

90%响应时间是说在发送的请求中,90%的用户响应时间都比得到的数值上要短,同时说明,一个系统在应用时,90%的用户响应时间都能达到这个数值,那么就为系统性能分析提供了很好的参考价值。

viewResultsTree以树状列表查看结果

通过这个Listener,我们可以看到很详细的每个transaction它所返回的结果,其中红色是指出错的transaction,绿色则为通过的。

  如果你测试的场景会有很多的transaction完成,建议在这个Listener中仅记录出错的transaction就可以了。

要做到这样,你只需要将Log/Display:

中的Errors勾中就可以了。

5.使用JMeter进行脚本的录制。

Jmeter中的脚本录制

'

方法一:

(1)选中TestPlan单击鼠标右键,在弹出菜单中选择Add->ThreadGroup;

  

(2)接下来选中WorkBench单击鼠标右键,在弹出菜单中选择Add->Non-TestElements->HTTPProxyServer;

  (3)在“HTTPProxyServer”窗口中TargetController下拉框选择TestPlan>ThreadGroup(表示脚本生成在这个线程组下),Grouping下拉框选择Puteachgroupinanewcontroller(表示把每组脚本放到一个新的组中,避免生成的脚本杂乱且无法组织);

  (4)单击窗口最下方的Start;

  (5)打开浏览器,设置代理服务器的设置为localhot,端口号为8080(在“HTTPProxyServer”窗口中设置了使用8080端口进行侦听);

Fromthetoolbar,click“tools->internetoptions”.Thisshouldbringuptheoptions.

Selectthe“connection”tab

Click“lansettings”buttonnearthebottom.

Ontheconnectionstab,check“UseaproxyserverforyourLAN”.Theaddressandport

fieldsshouldbeenablednow.

Address–enter“Localhost”ortheIPaddressofyoursystem(:

8080)

Click“ok”button

Click“ok”buttonagain.Thisshouldreturnyoutothebrowser

(6)在地址中键入要录制页面的URL对页面进行操作,Jmeter就会自动把所进行的操作录制成为脚本

了,可以看到ThreadGroup节点下面多了许多的子节点就是录制生成的脚本;

  (7)操作完毕后在Jmeter中单击Stop先停止录制,然后把浏览器的代理设置改为原来的设置即可。

方法二:

JMeter提供了一个利用本地ProxyServer(代理服务器)来录制生成测试脚本的功能,但是这个功能并不好用。

所以在本文中介绍一个更为常用的方法——使用Badboy录制生成JMeter脚本。

简单的介绍一下Badboy。

Badboy是一款不错的Web自动化测试工具,如果你将它用于非商业用途,或者用于商业用途但是安装Badboy的机器数量不超过5台,你是不需要为它支付任何费用的。

也许是一种推广策略,Badboy提供了将Web测试脚本直接导出生成JMeter脚本的功能,并且这个功能非常好用,也非常简单。

你可以跟着下面的试验步骤来迈出你在

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高中教育 > 高考

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1