发布新日志

  • Jmeter和loadrunner的异同

    2007-12-20 20:45:04

     1.jmeter 的架构跟loadrunner原理一样,都是通过中间代理,监控&收集并发客户端发现的指令,把他们生成脚本,再发送到应用服务器,再监控服务器反馈的结果的一个过程.

    2.分布式中间代理功能在Jmeter中也有,这个分布式分理是指可设置多台代理在不同PC,通过远程进行控制,即通过使用多台机器运行所谓的 Agent 来分担 Load Generator 自身的压力,并借此来获取更大的并发用户数.loadrunner也有些功能.

    3.Jmeter 安装简单,只需要解压jmeter文件包到C盘上就可以了,其实是没有安装.要是你想执行调试测试脚本,前提是:装上jdknetbean插件.loadrunner安装包有1G多,在一台P3.0,1G内存的PC上安装要一个多小时.要是装过较旧的盗版还不能再装新版,解决办法倒是有,但麻烦且花时间.

    4.Jmeter 没有IP欺骗功能,IP欺骗是指在一PC台上多个IP地址来分配给并发用户.这个功能对于模拟较真实的客户环境来说,是较有用.loadrunner有此功能.

    5.Jmeter也提供了一个利用本地Proxy Server(代理服务器)来录制生成测试脚本的功能,但是这个功能并不好用,测试对象的个别参数却要手工增加上去,还得附带装个IE代理,GoogleToolbarDownloader这些插件来捕捉参数.但是有一个工具bodboy,利用这个工具可以录制操作,然后选择将脚本保存为Jmeter脚本,然后利用Jmeter可以打开并修改脚本

    6.jmeter的报表较少,对于要分析测试性能不足以作为依据.如要知道数据库服务器或应用程序服务的CPU,memory等参数,得在相关服务器上另外写脚本记录服务器的性能.

    7.Jmeter做性能测试,主要是通过增加线程组的数目,或者是设置循环次数来增加并发用户,而loadrunner可以通过在场景中选择要设置什么样的场景,然后选择虚拟用户数。

    8.jmeter可以通过逻辑控制器实现复杂的测试行为,相当于loadrunner中的测试场景

    9.Jmeter可以做web程序的功能测试,利用jmeter中的样本,可以做灰盒测试,loadrunner主要用作性能测试

    10 jmeter是开源的,但是使用的人较少,网络上相关资料不全面,需要自己去揣摩,而loadrunner是商业软件,如果是正版,有技术支持,同时,网络上的资料相当多。

    11.jmeter的脚本修改,主要是对jmeter中各个部件的熟悉程度,已经相关的一些协议的掌握情况,而不依赖于编程,而loadrunner除了复杂的场景设置外,还需要掌握函数,修改脚本。

  • Jmeter——监视器结果

    2007-12-19 18:55:42

    监视器结果Monitor Result)是为Tomcat 5设计的,用来实时反映服务器的性能情况,如果你的AppServer不是Tomcat 5,使用监视器结果得不到结果,但是任何servlet container都可以移植status servelet并使用此monitor,如果需要对其他的AppServer使用该Monitor,需要移植Tomcat 5status servelet

    添加JMeter监视器结果利用的是Tomcat本身的特性,就是直接访问Tomcat服务器的/manager/status,获得相应的服务器状态数据并进行呈现。因此,在JMeter中添加监视器结果来监视服务器状态的步骤如下:

    1.                  增加一个HTTP RequestSampler

    2.                  选中该新增的HTTP Request,修改其属性:

    修改“名称”为服务器状态(非必须)

    修改“路径”为manager/status,必要时给出服务器的IP地址和Port的值

    增加一个参数 ,该参数的名称为大写的XML,值为小写的true

    选中下方的用作监视器

    如下图所示:

     

    3.                  增加一个“http授权管理器”因为访问Tomcat的应用服务器的/manager/status需要给出用户名和口令。如下图所示

     

    4.                  添加一个监视器结果的节点

    执行后,会在监视器结果中的性能页面显示图。其中healthy/Warning/非活动是根据服务器上的可用线程数/最大可用线程数得出,而Load用来衡量应用服务器的压力状况。

  • Jmeter——CSV Data Set Config

    2007-12-12 14:39:30

    利用Jmeterhttp请求的时候,如果我们要添加不同的数据,而每一条数据都不一致,我们将每一天数据作为一个测试用例,则我们可能需要为每个测试用例建立一个http请求,十分麻烦,比如,就登录来说,有用户,密码,每个用户的用户名,密码都不一致,如果我们要建立多个用户登录的请求,每个用户使用不同的用户名和密码,我们可能要将每个用户名单独作为一个http请求,这样十分不方便。

    我们是否可以将所有的用户名和密码写入一个文件,然后将http请求中的用户名和密码参数化,读取写有用户名和密码的文件呢?

    利用JmeterCSV Data Set Config,可以实现这个功能,具体如下:

    1. 新建一个文本文件,里面保存要登录的用户名,密码,文件内容如下:

    admin,123

    manager,456

    test,test

    说明:这里用英文逗号为分隔符,也可以用其他为分隔符,在CSV Data Set Config中可以设置。

    2. 右键点击Jmeter中需要参数化的某个请求,选择添加——配置原件——CSV Data Set Config,会添加一个CSV Data Set Config,需要设置相关的一些内容,具体如下:

    Filename:文件名,,指保存信息的文件目录,可以相对或者绝对路径(比如:D:\ceshi.Txt

            Variable Names:参数名称(如:有几个参数,在这里面就写几个参数名称,每个名称中间用分隔符分割,分隔符在下面的“Delimitet”中定义,为了和文件中的“,”对于,这里也用“,”分割每个参数名,(比如:use,password

    Delimitet:定义分隔符,这里定义某个分隔符,则在“Variable Names”用这里定义的分隔符分割参数。

    Recycle on EOF是否循环读入,因为CSV Data Set Config一次读入一行,分割后存入若干变量中交给一个线程,如果线程数超过文本的记录行数,那么可以选择从头再次读入

    设置CSV Data Set Config如下图所示:

    3. 在需要使用变量的地方,比如在登录操作中,需要提交的表单字段包含用户名密码,我们就可以用${变量名} 的形式进行替换,例如${user}${password}

    4.  附带说一下,通常有用户认证的地方都要用到cookie或者session,那么最好在测试计划中加入一个http cookie 管理器,直接添加一般不需要任何设置,否则可能会出现登录失败(在测试结果中,如果看到多次请求不同页面返回的字节数却是相同的,那多半是登录失败了)

    5.  最后,添加后,可以通过添加-监视器-查看结果树(请求部分)”, 来检验参数化是否成功,运行线程组,如果失败,那么检查一下文本的路径,变量大小写等等,手册上说使用相对文本路径时,要以测试配置文件(默认是jmeterbin目录)的目录为参考,但是我试过似乎不行,换成绝对路径就可以了

     

    说明:以上内容部分参考网络资料,但是核心内容为原创,请转载者注明出处,也欢迎大家一起探讨Jmeter的使用。

    JmeterQQ群:43429627

     

  • Jmeter断言的操作(带实例)

    2007-12-11 17:06:07

    jmeter进行测试的时候,有时候,我们需要确定Jmeter究竟有没有正确工作,因为有时候,我们利用监听器查看的时候,监听器返回的结果是正确的,但是,实际上,我们发送的请求中的有些参数可能是错误的,系统并没有按照我们预期的方式进行相应,比如,一般典型的 web 应用一般都会:

     

    1. 有一个登录页,它是整个应用的入口。当用户登录之后,应用会将用户相关的安全信息放到 session 中。

    2. 有一个 filter,它拦截请求,检查每个请求相关的 session 中是否包含有用户安全信息。如果没有,那么请求被重定向到登录页,要求用户提供安全信息。

     

    在这种配置下应用前面介绍的测试计划,那么除了登录页之外的其它请求都将因为缺少用户安全信息,而使请求实际定位到登录页。如果不加断言,那么在监听器看来所有的请求都是成功。而实际上,这些请求最终都没有到达它们应该去的地方。显然,这种测试结果不是我们所期望的。

     

    如果我们要确定Jmeter有没有按照我们的预期进行工作,我们应当考虑使Jmeter提供的断言,加到Sampler里面可以对返回的结果进行判断,例如判断HTTP返回结果里面是否含有某个字符串。如果断言为真,JMeter会标记请求为成功,否则标记为失败。为了最大限度的灵活性,JMeter允许使用正则表达式创建断言。

     

    要在JMeter中添加断言,我们首先要知道我们期望返回什么结果,比如我们利用jmeter测试http请求,向程序添加数据,同时,Jmeter又有查询的http请求,那么,我们当然要验证我们利用jmeterhttp请求,是否成功添加了数据,这个时候,我们可以在查询的http请求中添加断言,如下图所示:

     

     

    我们一般选择响应断言,如下图所示:

     

    我们可以根据自己的需要选择要测试的响应字段,文本,还是代码,一般选择响应文本,然后,我们选择匹配规则,一般选择“包含”,如果要精确匹配,则可以选择“匹配”,但是选择“匹配”,因为响应的内容一般还包含其他的信息,比如html语言标签,所以很难准确匹配。然后在在要册似乎的模式下面,添加你要响应的内容。

     

    添加好断言后,要添加一个监听器,以监听响应断言,选择添加——监听器——断言结果,则,如果在执行的时候,http请求返回的数据符合添加的断言内容,断言结果则为运行成功的灰色,否则,则为运行失败的红色。

     

    以下是一个添加断言的例子,在这个例子中,主要是添加一条数据,然后再查询该数据,如下图所示:

    在这个测试计划中,我们添加房型的时候,传递的roomTypeBean.roomID值是一个带参数的值,因为这个值是唯一的,所以,我们利用jmetertime参数,给它一个参数化的值,这样每次添加的时候,该值都会根据时间的不同而变化。然后,在查询的时候,我们可以将这个值当作查询的条件,这样,每次执行,只要添加了数据,则查询的时候,就能够查询到新添加的数据,然后,在查询的时候,我们可以将这个值当作是断言。

     

    因为Jmeter是根据测试计划中的元件顺序执行的,如果直接在查询的时候,将添加的时候,参数化的值当作断言,则因为取time的时间不一致,断言结果肯定是错误的,我们要先定义一个基于线程组的用户参数,将time函数当作一个用户参数,然后再在添加和查询,以及断言的时候,调用定义的用户参数,则可以解决这个问题。

     

    添加jmetertime函数,选择选项——函数助手,然后选择__time函数,如下图所示:

    在“ormat string for SimpleDateFormat (optional)”中输入值“MMddhhmmss”,表示取月日时分秒。然后,点击生成,怎生成了time参数。

     

    然后再在线程组中定义一个用户参数,具体是添加——前置处理器——用户参数,出现添加用户参数的界面,如下图所示:

     

    在用户参数中,名称写你参数名称,如“current”,用户,输入在函数助手中生成的time参数${__time(MMddhhmmss,)}

     

    添加好用户参数后,在添加和查询的时候,在需要参数化的地方输入定义的用户参数,具体格式是${参数名},比如,上面我们定义的参数名是curent,则参数值应该是${curent},在断言中,断言内容也应该是${curent}这个。

     

     

  • Jmeter做性能测试——HTTP请求

    2007-12-04 15:13:07

    建立线程组

    Jmeter测试最多的是http请求,要创建这个测试计划,你要做的第一步就是添加线程组元件,这个线程组会告诉JMeter你想虚拟的用户数量,发送请求的频率以及发送请求的数量。继续,首先,选中测试计划,右键单击选择添加菜单,然后再选择线程组打开线程组配置页面如下图所示:

    下一步,你需要修改缺省的值,如果你还没有选中它的话,在这个树里选中线程组。你现在应该可以在JMeter窗口的右边看到线程组控制面板(见下图)。

    首先给这个线程组起一个有意义的名字,在名字域里,输入“测试”.

    然后,在线程数里输入5,下一个输入域,Ramp_Up Period,保持不变。这个值是告诉JMeter在开始各个线程之间延迟多长时间。例如,如果你输入5JMeter将会在5秒前完成该线程里的所有操作。因此,如果我们有5个线程和5Ramp_Up Period,延迟在开始线程之间会是1 秒(5个线程/5=1秒)。如果你设置此值为0JMeter则会立刻开始此线程的所有操作。

    最后,清除循环次数的复选项“永远”,然后输入2。这个值是告诉JMeter你的测试重复多少次。如果你输入1,那么JMeter只会运行一次你的测试。要不停的运行你的测试计划,选中“永远”复选框。

    在大多应用里,你必须手工接受你在控制面板里做的改动,但是,在JMeter里,控制面板能自动地接受你的变动如同你改动它们一样。如果你更改元件的名字,树将在你离开控制面板后被更新,以新文本显示(例如,当选择其它树元件)。

    添加HTTP请求

    这里利用一个虚拟的网址来说明如何建立http请求。给新添加的测试线程组添加第一个HTTP请求(添加->取样器-> HTTP请求)。然后填写其属性,如下图所示:

    说明:

    名称: HTTP 默认请求值 该元素的名称

      服务器名称或IPl测试服务器的IP或者名字

      端口号:80 服务器提供服务的端口号,服务器是Tomcat,所以端口号是80

      协议: http 发送测试请求时使用的协议,通常都用HTTP协议

    方法:http请求中使用的方法,如get post等。你要测试服务器对http请求的相应,你首先需要确定该http请求中使用的是什么方法,确定方法:查看网页源代码或者jsp,查找“method”,代码中method后面的值就是http请求中使用到的方法

      路径: 此处填写你要测试的页面的路径,不包括服务器地址

      同请求一起发送的参数:因为我测试的是登录,故添加了四个同请求一起发送的参数。要确定同请求一起发送的参数,你也需要查看网页源代码或者jsp,查找“input”,将该标签中的name值作为参数名,而将相应的value作为参数值。如下图所示:

    添加监视器来查看测试结果

    你还要给测试计划添加一个监视器。来将所有的HTTP请求结果存储到一个文件中并且显现出数据的可视模型。

    选择登录元件,然后添加一个图形结果监视器(添加->监视器->图形结果)。然后,你需要指定一个目录和一个输出的文件名。你可以输入到文件名域里,也可以选择“浏览”按钮来浏览目录并输入文件名。

     

  • 认识jmeter测试计划里的元件2

    2007-12-04 13:54:49

    3.                断言:

    断言允许你断言从被测的服务器端接收到的响应的事实。使用断言,你能“根本上测试”你的应用返回的你预期的结果。例如,你可以断言一个查询将返回包括一些特定文本的记录。这个文本可能是PERL格式的正态表达式,并且你可以指明这个返回将包括文本或它应该可能匹配整个反应。

    你可以添加断言到任意一个取样器里,例如,你可以添加断言到一个HTTP请求来检查文本“</HTML>”。JMeter会检查这个文本是否在HTTP响应里,如果JMeter找不到,它将把这个请求标记为“失败的请求”。

    要查看断言结果,添加断言监听器到这个线程组。

    如果想让JMeter在请求的回复上做基本的验证,添加一个断言到请求控制器。例如,在对WEB应用做压力测试时,服务器会返回一个成功的“HTTP回复”代码,但页面可能会有错误或缺少内容。你可以添加断言来检查某些特定的HTML标签,一般的错误字符串,等等。JMeter允许你使用正则表达式创建这些断言。

    4.                监听器

    JMeter运行时,监听器可以提供访问JMeter所收集的关于测试用例的信息。图像结果监听器在一个图表里绘制响应时间。查看结果树监听器具体的显示取样器的请求和响应,然后以HTMLXML格式显示出来。其它的监听器提供汇总或组合信息。

    此外,监听器能处理一个为日后所用,收集到一个文件里的数据。在JMeter里的每个监听器都可以指定一个文件,用来存储数据。

    你可以在测试的任何地方添加监听器。它们只会收集从这个元件开始到这一层最低层的数据。

    5.                定时器

    默任, JMeter线程发送出的每个请求是不间断的。我们建意你通过添加一个可用的定时器到你的线程组里来指定延迟时间。如果你不添加延时,JMeter可能在较短的时间内发送大量的请求致使你的服务器瘫痪。定时器将可以让JMeter在线程组里,在每个请求间,延迟一定时间。

    如果你想在一个线程组里添加一个以上的定时器,JMeter会在执行你所应用的那个取样器之前累加所有的计时器,然后以那累加后的时间来做停顿。

    6.                 配置元件

    配置元件工作和取样器很接近,尽管它不能发送请求(HTTP代理服务器除外),它可以补充或修改请求。

    只有在你放置元件的树分枝里面,才能访问配置元件。例如,如果你把HTTP Cookie管理器放在某个线程组里,那么只有你放在该线程组里的HTTP请求控制器才能访问这个Cookie管理器如下图所示:

     

     “地区查询”和可以访问这个http Cookie1管理器,“商圈添加”和“商圈管理”可以访问http Cookie2管理器,商圈查询不能访问任何的Cookie管理器。并且,在树分枝里的配置元件比在父级分枝同样的元素有更高的优先权。例如,我们定义两个http请求默认值,“请求默认值1和“请求默认值2。因为我们把“请求默认值1放在商圈查询这个子节点中,所以这个线程组里,只有“商圈查询”可以访问它而商圈添加和商圈修改则可以访问请求默认值2。因为我们把它放在商圈这个线程组里。

    7.                 前置处理器

    前置处理器在取样器请求前执行一些操作。如果前置处理器附有取样器元件,那么它将先于这个取样器元件执行。前置处理器常用于在取样器元件运行前修改它的设置,或是更新从响应文本里投取不出来的变量。当执行前置处理器时,再具体参看作用范围规则。

    8.                 后置处理器

    后置处理器在取样器请求后执行一些操作。如果后置处理器附有取样器元件,它将在那个取样器元件运行之后运行。后置处理器多用于处理响应数据,从里面抽取出有价值的东西。当执行后置处理器时,再具体参看作用范围规则。

     

  • 认识jmeter测试计划里的元件1

    2007-12-04 13:50:26

    要使用Jmeter,必须要熟悉Jmeter里面相关的内容,Jmeter的应用主要体现在测试计划里面,所以,首先要认识Jmeter测试计划里面的元件

    1. 线程组

    线程组元件是任何一个测试计划的开始点。在一个测试计划中的所有元件都必须在某个线程组下。顾名思义,线程组元件控制JMeter执行你的测试计划时候使用的线程数量。右键点击测试计划,选择添加,在弹出的菜单中,选择线程组,则会添加一个线程组,如下图所示:

    对线程组的控制允许你:

    设置线程组名称,注释

    在取样器错误后要执行的动作:如果是继续,表示某个线程错误后,后面的线程继续运行,如果是停止线程,则表示后面的线程都停止运行,返回出错之前的测试结果如果是停止测试,则停止测试,不返回测试结果

    设置线程数:此处设置的线程数表示同时运行多少个线程,发送多少个请求

    设置ramp-up periodramp-up period指示JMeter用于达到全部选择的线程的时间。如果选择了10个线程,并且ramp-up period2秒,那么JMeter将使用2秒使10个线程启动并运行。每个线程将在前一个线程启动后0.22/10)秒后启动。如果将此设置为0,则表示并发,也就是所有线程在统一时间启动。Ramp-up需要足够长的时间来避免在开始测试时产生太大的负荷,并且有足够短的时间使最后一个线程在第一个线程结束之前运行。(除非你想那样做)

     

    开始的Ramp-up = 线程数+必须的调节数

    循环的次数:线程循环的次数,如果次数设置为1,那么JMeter在停止前只执行测试计划一次。

    调度器:在1.9以后的版本中多了调度器这个功能,通过这个功能,你可以设置什么时候开始测试,什么时候结束测试,如果你设置了开始测试时间,就算是你在Jmeter上运行了测试,如果没有到你设置的开始时间,jmeter是不会执行测试的,直到到了你设置的开始时间,才会开始执行测试,同样的,如果你设置了结束时间,一旦到了结束时间,不管当前执行的循环有没有结束,jmeter都会停止执行。而启动延迟可开始时间差不多,你可以设置开始测试时多长时间才开始真正执行测试,而持续时间,则设置当前线程组总共执行多长时间,通过调度器的设置,你可以更加灵活的对你的测试计划进行设置,使得测试计划可以符合更复杂的场景。

     

    2. 控制器

    JMeter有两种类型的控制器:取样器和逻辑控制器。

    取样器:指示JMeter向一个服务器发送请求。例如,如果你想让JMeter发送HTTP请求,那么添加一个HTTP请求器,添加方法为右键点击线程组,选择添加,在弹出的菜单中,选择samper,然后选择http请求。你可以向一个取样器中添加一个或多个配置元件来定制请求。

    Jmeter有多个取样器可以使用,每种取样器表示一种请求,每个取样器有几个可以设置的属性。你可以向取样器添加一个或多个配置元件来进一步的控制取样器,比如添加断言,添加监听器等。如果你在一个线程组中添加了多个取样器,JMeter以你向树中添加取样器的顺序发送请求。

    如果你想向一个服务器发送同种类型(例如:HTTP请求)的多个请求。考虑使用缺省配置元件(Defaults Configuration Element)。每个控制器有一个或多个缺省元件。

    逻辑控制器:逻辑控制器允许你定制JMeter何时发送请求。逻辑控制器可能包话如下的子元件:取样器(请求),配置元件,其它的逻辑控制器。逻辑控制器能够更改它的子元件中的请求的顺序。他们可以自己修改请求,使JMeter重复请求,例如,你可以添加交替(Interleave)逻辑控制器来在两个HTTP请求取样器之间轮流。

    要理解逻辑控制器对测试计划的影响,假设如下的测试树:

    l                    测试计划

    n                                  线程组

    u                                               仅一次控制器

    ²                                                             登录请求

    u                                               加载搜索页

    u                                               交替控制器

    ²                                                             搜索‘A

    ²                                                             搜索‘B

    ²                                                             默任HTTP请求

    u                                               默任HTTP请求

    u                                               Cookie管理器

     

    这个测试首先是执行登录请求,它在整个测试过程中只执行一次。后面的反复执行将跳过它。这是由于使用了仅一次控制器。

     

    登录后,取样器接着会加载搜索页(想像一个用户登录进去,然后打开搜索页来搜索信息这样一个WEB应用。)这只是一个简单的取样器请求,没有用任何逻辑控制器过滤。

     

    加载完搜索页后,我们想搜索一下,事实上,我们想做两种不同的搜索。然而,我们想在每个搜索之间重新加载搜索页面。我们可以通过使用四个简单的HTTP请求元件(加载搜索页面,搜索‘A’,加载搜索页面,搜索‘B’)。或者使用交替控制器,它一次传递一个子请求到这个测试。按子元件的排列顺序。交替2个子请求可能有点大材小用,但是如果有8或是20个子请求,那么它使用它将很简单。

     

    注意HTTP默任请求是在交替控制器里。设想一下,“搜索A”和“搜索B”共享相同的目录信息(一个规范的HTTP请求包括域,端口,方法,协议,路经,参数和一些其它可选选项)两个搜索请求,都使用相同的后台搜索引擎(我们可以暂说它是一个servlet或是cgi脚本)。胜于配置两个使用相同路经信息的HTTP取样器,我们能够把信息提取到单独的一个配置元件。当交替控制器把请求从“搜索A”传递到“搜索B”时,它会把HTTP默任请求配置元件值填在空白值里。因此我们把那些请求的路经信息置空,把那些信息放在配置元件里。在这个例子里,只利用一点它的优势,以后还来会再论述它。

     

    这个树的下一个元件是另一个HTTP默任请求,这次单独把它放在线程组里。线程组有一个内置的逻辑控制器,因些,它可以向上面说的那样,精确的使用配置元件。它会填上空白处来传递任何一个请求。它在网站测试时,置空你所有的HTTP取样器的域值,把那些信息放在HTTP默任请求元件里,然后加到线程组时特别有用。通过这样做,你可以在不同的服务器上通过简单的改变你的测试计划里的一个值来测试你的应用。否则,你不得不在每个取样器,每个值修改一次。

     

    最后一个元件是HTTP Cookie管理器。你因该在所有的网站测试里添加一个Cookie管理器,否则JMeter会忽略Cookie。通过添加它到线程组这一层,我们可以确保所有的HTTP请求可以共享相同的Cookie。典型的 web 应用一般都会:(1)有一个登录页,它是整个应用的入口。当用户登录之后,应用会将用户相关的安全信息放到 session 中。(2)有一个 filter,它拦截请求,检查每个请求相关的 session 中是否包含有用户安全信息。如果没有,那么请求被重定向到登录页,要求用户提供安全信息。如果你不添加Cookie管理器,在这种配置下应用上面的测试计划,那么除了登录页之外的其它请求都将因为缺少用户安全信息,而使请求实际定位到登录页。如果不加断言,那么在监听器看来所有的请求都是成功。而实际上,这些请求最终都没有到达它们应该去的地方。显然,这种测试结果不是我们所期望的。

     

    Jmeter还有其他一些逻辑控制器,你可以添加多个逻辑控制器来达到各种不同的结果。

     

  • 认识Jmeter

    2007-12-03 10:37:38

    1. 前言

        JMeter Apache组织的开放源代码项目,是一个100%Java桌面应用,主要用于压力测试和性能测量。它最初被设计用于Web应用测试但后来扩展到其它测试领域。

        现在网络上的资料主要介绍了用Jmeter怎么做性能测试,主要方法是利用Jmeter模拟大量的服务器负载、网络负载、软件对象负载,在不同压力类别下测试软件的强度,然后使用JMeter提供的图形化界面,分析性能指标或者在高负载情况下被测试的服务器/脚本/对象的性能以及软件的整体性能。

    利用JMete也可以做web的功能测试,主要是将客户端提交的请求通过jmeterhttp请求向服务器发送请求,然后查看返回结果,如果http发送成功,服务器会做出相应,并且将请求数据存储。

        本文主要介绍如何使用JMeter,从熟悉Jmeter的开始,逐步讲解Jmeter的各个部分,已经如何用jmeter做性能和功能测试,因为对jmeter使用不是完全熟悉,对有些内容不理解的,当作待解决问题。

     

    2 安装Jmeter

     

    官方网址 http://jakarta.apache.org/jmeter/在这里,可以查看Jmeter的相关资料。

    下载地址:http://jakarta.apache.org/site/downloads/downloads_jmeter.cgi

           Jmeter的最新版本是2.3.1下载页面有两种类型的下载包,如果是使用,则选择Binary,然后选择zip格式的下载包进行下载。Jmeter不需要安装,所以,解压的时候选择好你要解压的地址就可以。

        运行Jmeter程序需要先安装JDK(1.4以上),如果你的电脑上没有安装JDK,要先安装JDD, JDK文件安装到C盘的\Program Files\Java目录下面。安装完JDK后,需要配置环境变量。具体的环境配置方法请参考网络相关的资料。

    安装好JDK后,在命令行中输入javac,如果返回一些信息内容,则表示jdk安装成功,则可以运行Jmeter程序,具体方法如下:

        假如将下载的.zip文件解压缩到D:/JMeter目录下。进入Jmeter的解压目录,点击D:/JMeter/bin下面的jmeter.bat批处理文件来启动JMeter的可视化界面,如下图所示:

     

        启动Jmeter后,在Jmete界面上,会有测试计划和工作台两个菜单,测试计划描述了执行测试过程中JMeter的执行过程和步骤,一个完整的测试计划包括一个或者多个线程组(Thread Groups)、逻辑控制器(Logic Controller)、配置元件(Sample Generating Controllers)、监听器(Listener)、定时器(Timer)、断言(Assertions)、配置元素(Config Elements)。打开JMeter时,它已经建立一个默认的测试计划,一个JMeter应用的实例只能建立或者打开一个测试计划。而工作台主要是用来录制脚本的,在录制脚本的时候,通过工作台设置HTTP代理服务器。

     

     

  • 使用 JMeter 分布式性能测试

    2007-11-14 19:51:43

    利用JMeter进行负载测试的时候,使用单台机器模拟测试超过1000个行程的并发就有些力不从心,在执行的过程中,JMeter自身会自动关闭,要解决这个问题,可以使用分布式测试,运行多台机器运行所谓的 Agent 来分担 JMeter自身的压力,并借此来获取更大的并发用户数,但是需要进行相关的一些修改,具体如下:

    1.     在所有期望运行 JMeter 作为 Load Generator 的机器上安装 JMeter,并确定其中一台机器作为 Controller,其他的机器作为 Agent。然后运行所有 Agent 机器上的JMeter-server.bat文件——假定我们使用两台机器 192.168.0.1 和 192.168.0.2 作为 Agent;

    2.     在Controller 机器的 JMeter 安装目录下找到 bin 目录,再找到 JMeter.properties 这个文件,使用记事本或者其他文字编辑工具打开它;

    3.     在打开的文件中查找“remote_hosts=”这个字符串,你可以找到这样一行“remote_hosts=127.0.0.1”。其中的 127.0..0.1 表示运行 JMeter Agent 的机器,这里需要修改为“remote_hosts=192.168.0.1:1099,192.168.0.2:1099”——其中的 1099 为 JMeter 的 Controller 和 Agent 之间进行通讯的默认 RMI 端口号;

    4.      保存文件,并重新启动 Controller 机器上的 JMeter.bat,并进入 Run -> Remote Start 菜单项,在这里可以看到远程启动菜单下面有192.168.0.1 ,192.168.0.1两个IP地址

    5    如果要让某个电脑执行,可以点击改电脑的IP地址就可以,如果两个都要执行,可以点击Run 菜单下的“远程运行全部”菜单

    6   有时候用作代理的机器太少,仍不能满足需要,则需要将作为Controller的电脑也当作Agent,则同样需要修改JMeter.properties文件,将Controller的IP地址写入。同时,这个时候,需要打先打开Controller 电脑中JMeter下bin目录下的jmeter-server.bat,然后再打开JMeter.bat,此时,进入Run -> Remote Start菜单,可以看到Controller也作为远程机器进行运行。

  • Jmeter参数化变量的方法

    2007-11-07 13:40:58

    1         利用Jmeter函数助手选择“_Random”函数

    步骤:点击Jmeter选项,选择函数助手对话框(或者使用快捷键“CtrlF”),在选择一个功能的下拉框中选择“_Random”,然后在函数参赛中会出现三个参数有用户来设置,第一个参数是一个范围内的最小值,即所要取的随机数的最小值,我们设置成1;第二个参数是一个范围内的最大值,即所要取的随机数的最大值,我们设置成100;第三个参数是函数名称,即用于存储在测试计划中其他的方式使用的值,我们设置成Random。设置好上面的三个参数后,点击生成按钮,这样就会在对话框的最下面生成一个字符串“${__Random(1,100,Random)}”,在我们编写的脚本中,找到要替换的参数,把它的值换成前面生成的字符串就可以了,然后每次运行的时候,这个参数会变成一个1100之间的随机数。

     

    说明:这个功能可以利用在测试需要添加多条数据记录而且某些字段需要唯一性的测试脚本中,随机生成的参数是数字,如果需要字母或者其他字符,则不能利用该功能实现,请看第二种方法

    2         利用Jmeter函数助手选择“_ StringFromFile函数

    功能:这个函数是从一个文件中取到一个字符串

    步骤:

    首先需要一个文本文件,可以手工生成,也可以通过数据库查询工具查出结果,然后拷贝到一个文本文件中。

    点击Jmeter选项,选择函数助手对话框(或者使用快捷键“CtrlF”),在选择一个功能的下拉框中选择_ StringFromFile”。生成文本文件后就可以设置这个函数的参数了,参数分别是输入文件的全路径函数名称“Start file sequence number”Final file sequence number”。第一个参数就是咱们前面生成的文件的完整路径,即文件路径+文件名.扩展名(文件路径可以写成相对路径或绝对路径)。第二个参数是用于存储在测试计划中其他的方式使用的值(其实我也一直不明白这个参数的用处,不设置有些函数也能正常使用,不过最好还是随便设置一下吧,因为还有一些函数不能缺省)。第三个参数是文件开始的序号,也就是文件读取的其起始行数。第四个参数是文件的结束序号,也就是要读取文件的最后行。假如咱们生成的文本文件有200行,如果开始序号设置成50,结束行设置成150,那么这个函数会按顺序从第50行,一直读取到150行,如果测试的循环次数超过了文件行数,比如循环了102次,那么最后一次循环读取的文件内容和第一次的一样,函数会自动循环读取。文件的起始序号和结束序号也可以不用设置,这样函数会从第一行读取到最后一行,然后再循环读取。

    3         利用JmeterCSV Data Set Config

    步骤:右键点击Jmeter中需要参数化的某个请求,选择添加——配置原件——CSV Data Set Config,会添加一个CSV Data Set Config,需要设置相关的一些内容,具体如下:

    Filename:指定文件及所在路径(如:D:\test.txt),说明,在txt文件中,每一行只能有一条数据,也就是类似于QTP的数据池中的数据,如果每一行是多条数据,则只能添加第一条数据,我实验用EXCEL,但是不成功,只能txt文件才可以。

       Variable Names:参数名称(如:ceshi)

    Delimitet:在脚本中输入的参数(如:${ceshi}

    Recycle on EOF:某前没有明白什么意思,不过选择True就可以

    添加后,可以通过添加-监视器-查看结果树(请求部分)”, 来检验参数化是否成

     

     

302/2<12
Open Toolbar