Apache JMeter--网站自动测试与性能测评

2013-02-28 15:48:05

标签:Jmeter

From:http://bdql.iteye.com/blog/291987

出于学习热情,翻译总结Emily H. Halili的《Apache JMeter》一书的部分内容。

JMeter的简介

可以肯定的是,JMeter至少符合以下几条自动测试标准:

  • 零购置成本--直接从http://jakarta.apache.org/site/downloads/downloads_jmeter.cgi下载得到。
  • 学习曲线平滑--只需要基本的html和正则表达式知识。
  • 功能全面--不仅只能测试web应用。
  • 架构可伸缩--其组件被设计为可通过合并完成大规模测试。测试可以在多台主机上同时运行。
  • API可扩展--API开放,并可由用户扩展编程。
  • 技术支持良好--在线用户指南、用户论坛、网络文章也包括这本书。

本章引导您开始第一次的JMeter试用。将向您介绍JMeterm同时使您对它的能力有一个整体的认识。除此之外,还会带您认识JMeter的操作界面,让你亲身感受到几个重要的JMeter组件。

让我们开始... 
JMeter是一个桌面应用,被设计为用于测试c/s结构的应用程序,如web应用或FTP应用。是到目前为止,一个使用得最广泛的开源测试工具。它是由纯java编写的,通过其API可以对它进行扩展。JMeter位于c/s中的客户端工作,它可以测试服务器的响应时间,CPU负载,内存占用和资源的使用。

绝大多数的JMeter测试脚本或测试计划都涉及到创建一个循环,按照预先定义的时间间隔和线程组来模拟向服务器发出请求。这些测试脚本可以定制和扩展。一个基本的JMeter测试计划应该至少包括三个部分:线程组,监听器,采样器。 
线程组用来模拟一组用户(用户数至少一个)。 
采样器使请求发往目标服务器。 
监听器捕获每个请求后收到的响应数据。

通过界面认识它 
一个典型的测试计划由一个或多个线程组,逻辑控制器,监听器,定时器,断言和配置等元素组成。 
线程组:一个线程模拟一个用户。所有的测试计划的元素都必须放在一个线程组元素下。 
监听器:监视JMeter运行测试用例时接收到的数据。 
控制器:其逻辑可以自定义,如让检验员告诉JMeter向服务器发出请求。 
定时器:设定一个线程发出的两次请求间的间隔时长。 
断言:测试返回的结果是否是期望的值。 
配置:与检验员相关,可以增加和修改请求。

以下为界面截屏图。 

JMeter界面上有两个面板,一旦JMeter投入运行,你可以看到它们。测试计划和工作区面板,如下图所示。一个测试计划描述了JMeter投入运行后的测试步骤。工作区提供临时的数据存放空间。工作区数据与测试计划分开存放。

左边的面板以树形显示了我们测试计划,其中节点的添加和删除可以通过右击节点进行。右边的面板显示了每个节点的详细配置。

下面是由一个线程组和其它一些元素组成的一个测试计划例子。

在我们使用JMeter进行性能测试时,线程组是必选元素。这个元素可以通过模拟多个用户对服务器进行压力测试。你甚至可以对测试进行的时间进行预设,下图是线程组的详细显示。

另一方面,同样一个测试计划可以扩展成为包括功能或回归测试。如下图所示添加Assertion(断言)元素。

正式开始使用...

安装JMeter 
你需要首先从以下网址下载最新发布的版本http://jakarta.apache.org/site/downloads/index.html,下载完成后,解压缩到你想要的目录就完成了安装。 
提醒:为了进行远程测试请避免在压缩时使用带空格的目录名。

设置环境变量 
首先机器上建议安装jdk1.4或更高版本。并设置JAVA_HOME环境变量。

运行JMeter 
在你的JMeter的安装目录下有bin目录。在windows系统中,运行jmeter.bat。如果你运行在unix系统中,你需要运行jmeter。 
在这个过程中,JMeter会自动在它的lib目录或lib/ext目录中找所需要的jar包。因此,如果将来您自己开发了JMeter的组件,你也需要把它们拷贝到JMeter的lib/exit目录中。 
如果你运行JMeter在代理或防火墙的后面,你需要提供服务器名和端口号,用命令行的参数指定。 
例如 
jmeter -H 129.198.1.1 -P 8000 -u someusername -a someuserpassword -N localhost

测试计划

JMeter的测试计划封装了你需要手动编写的测试脚本。 
什么是测试计划? 
测试计划定义了如何进行测试的框架。最简单的测试计划包括以下元素: 
线程组:用于指定运行线程的个数和坡道期,循环次数。每个线程模拟一个用户,坡道期指定创建所有线程的时间。例如指定5个线程和10秒的坡道期,表示每个线程的创建时间为2秒。循环次数定义了测试重复的次数。而且可以指定开始和结束的具体时间。

采样器:用于发出http/ftp/soap/xml/jdbc/ldap请求到服务器。

监听器:用于后处理请求数据。例如你可以保存数据到文件或者以图表显示。

开始运行JMeter,测试计划就会出现工作区左边的面板窗口中。

具体描述如下: 
User Defined Variables:你可以定义静态变量,它们是允许你在测试中重复提取的值,如服务器名,端口号等。例如你要测试一个www.example-jmeter.net的应用,你可以定义一个"server"变量,那么测试脚本中的"${server}"就会该值替代。

Functional Test Mode:它会记录下从服务器返回的数据。如果你要进行压力测试,请不要选择它因为它会影响结果。 
Run each Thread Group separately:单独运行每个线程组。如果您有二个或更多的线程组在你的测试计划中。选中该项,表示JMeter会顺序地运行它们,否则会并发运行它们。

Add directory or jar to classpath:如果你自己扩展了JMeter组件,可以使用该项添加jar包。记住需要重启后才能生效。另外,你也可以直接把jar包拷贝到JMeter/lib目录下。或者通过编辑JMeter.properties文件来包含额外的jar,如"#user.classpath=../classes;../jars/jar1.jar,这样可以避免出现路径中包含空格引发的问题。

测试计划的组成 
测试计划必须由至少一个线程组组成。每个线程组中都可以包含一个或多个以下组合: 
采样器,逻辑控制器,配置,监听器和定时器。每个采样器能够关联一个或多个预处理元素,后处理元素和断言元素。让我们更进一步了解它们。

线程组 
线程组是测试计划的入口,它包含所有其它的JMeter元素,一个线程组控制所有由JMeter创建的仿真线程,它们模拟多用户请求。 
线程组代表着一组执行特定测试用例的用户,在线程组的控制面板里,显示在下图。如果有多个线程组那么它们会彼此独立地执行。

详细描述如下: 
Action to be taken after a Sampler error:一旦采样器在测试过程中报错,你可以作出以下的选择:Continue继续进行下测试,stop Thread停止当前测试的线程,Stop Test完成停止测试,便于进行错误原因的查看。 
Number of Threads:模拟用户的人数或者是web应用的连接数。 
Ramp-Up Period:定义JMeter创 建所有测试线程的时长。例如设定线程数为10,坡道期为60秒,那么每个线程会以6秒/个的速度连续创建。在60秒以后,所有的线程将会投入运行。比较好 的策略是将你的坡道期设置得足够长以避免在测试一开始就造成很大的工作负载,但不要过长,你可以一开始将坡道期设置为等于要创建的线程数,稍后根据情况进行调整。 
Loop Count:定义测试执行的次数,默认情况下,测试仅执行一次。点击Forever选项框那么测试会一直重复执行直到你手动停止它。 
Scheduler Configuration:1.9之后的版本具有该项,允许你设定测试的开始和结束时间。只有时间到达开始时间,测试才会真正开始。在每个测试循环之 后,除非结束时间到了,测试将会继续下去一直到达loop count的上限。startup delay用于设定JMeter在第一个测试线程启动前的开始等待时间,duration用于设定整个测试的进行时间。前者用于覆盖start time的设定,后者覆盖end time的设定。

控制器 
JMeter有两类控制器: 
1.Samplers:允许发送特定类型的请求给服务器。稍后我们会发送http请求给服务器,所以我们会选用Http Rquest采集器。可以通过Configuration元素给采集器进行设定。

2.Logic Controllers:允许自定义何时发出请求的逻辑。例如你可以用Random Controllers来向服务器随机发出http请求。

采集器 
JMeter采集器允许你定义发往服务器的请求,模拟一个用户通过网页向服务器发出的请求。每个采集器生成结果包含以下一些,如性能、延迟时间、呑吐量等。默认情况下,JMeter会按照采样器出现在测试计划树中的顺序发送请求命令。当然,为了处理的采样的顺序可以使用逻辑控制器进一步定制。这将在后面的“逻辑控制器”中进一步解释 。

您可以自定义每个采样器通过设置其属性,或者您也可以添加配置元素。在这本书中,因为我们将发出许多HTTP请求到相同的服务器,我们可以使用默认配置元素,它预先定义了发送的http请求。

一个http请求的采样器面板显示如下:

如果你希望JMeter进行验证,你可以添加Assertion元素,关于Assertion的更多内容,后面再详细介绍。 
在一个Http请求采样器面板中的响应Assertion显示如下:

以下是JMeter提供的所有采样器列表:

HTTP Request 
FTP Request 
JDBC Request 
Java Request 
SOAP/XML-RPC Request 
WebService (SOAP) Request 
LDAP Request 
LDAP Extended Request 
Access Log Sampler 
BeanShell Sampler 
BSF Sampler 
TCP Sampler 
JMS Publisher 
JMS Subscriber 
JMS Point-to-Point 
JUnit Request 
Mail Reader Sampler 
Test Action

逻辑控制器:用于定义采样器的执行顺序。一个逻辑控制器的子元素有:采样器、配置,其它逻辑控制器。JMeter可能会随机选取(使用随机控制器) ,重复(使用回路控制器) ,交换(使用交错控制器)等。

几个逻辑控制器可以结合起来,实现不同的结果。

一个循环控制器的面板显示如下:

以下列出JMeter提供的所有的逻辑控制器:

Simple Controller 
Loop Controller 
Once Only Controller 
Interleave Controller 
Random Controller 
Random Order Controller 
Throughput Controller 
Runtime Controller 
If Controller 
While Controller 
Switch Controller 
ForEach Controller 
Module Controller 
Include Controller 
Transaction Controller 
Recording Controller

监听器 
显示采集器的结果为表、图、树或者日志文本。仅显示定义在监听器下的元素的数据。 
每种监听器以自己的方式来显示数据,例如为了显示图,可以使用"Aggregate Report"监听器。"Aggregate Report"或"Summary Report"监听器显示表。所有的监听器都会把数据写到输出文件,扩展名为jtl。 
一个Aggregate Graph监听器的面板显示如下:

所有监听器的公共属性: 
Configure button:用于选择写到文件中的信息,保存为xml或cvs格式,扩展名为jtl,其中cvs格式使得文件较小。一旦选择,Save Configuration Window将会出现。

Browser button:如果你想读或者显示以前保存的结果。 
一个监听器会耗费相当多的内存,如果它关联多少个采集器。JMeter会变慢,如果你选择激活多个监听器。因此尽量选择合适的监听器来使用。 
一个减少内存占用的方法是用CSV默认的格式来保存数据,并且使用Simple data Writer监听器。 
你可以改变默认的格式为xml,通过编辑jmeter.properties。将jmeter.save.saveservice.output_format=csv,改为xml即可。

以下为所有的监听器列表:

Sample Result Save Configuration 
Graph Full Results 
Graph Results 
Spline Visualizer 
Assertion Results 
View Results Tree 
Aggregate Report 
View Results in Table 
Simple Data Writer 
Monitor Results 
Distribution Graph (alpha) 
Aggregate Graph 
Mailer Visualizer 
BeanShell Listener 
Summary Report

定时器 
定时器组件是可选组件,它会引起JMeter暂停,因为默认情况下JMeter会在一个请求结束后马上发出下一个请求,这样能会造成服务器过载。通过添加定时器会降低服务器崩溃的危险。这项功能在进行功能性测试时非常有用。 
不管怎样,你需要小心在一个测试计划中添加了过多的定时器。JMeter会在两次请求间暂停可使用的所有定时器指定时间的总和。

Constant Timer控制面板如下:

以下是所有JMeter提供的定时器列表: 
Constant Timer 
Gaussian Random Timer 
Uniform Random Timer 
Constant Throughput Timer 
Synchronizing Timer 
BeanShell Timer

Assertions断言:允许你针对响应添加验证条件。它们被添加为采集器的子元素。在进行功能性测试时特别有用。在性能测试中可以用它来保证你收到了响应数据。不包含内容的错误或遗失的部分,因为这可能会影响有效性的测试。
你可以利用类似Perl的正则表达式来创建断言。用这来判断应用返回的值是否是你所期望的。

让我们来看一下这样的场景,在一个Http请求的采样器中,你请求一个页面,如果返回"Login Successful"字符串表示访问成功,你可使用Response Assertion来判断响应中是否具有该字符串。如下图所示: 

与Assertions相关的监听器有"View Result in Table", "View Result Tree", "Aggregate Report","Summary Report"监听器,前三种监听器将会详细显示Assertions结果,而后者只是简要显示失败的比例。 
以下是一个Assertion Results面板显示:

以下是所有JMeter提供的Assertion的列表:

Response Assertion 
Duration Assertion 
Size Assertion 
XML Assertion 
BeanShell Assertion 
MD5Hex Assertion 
HTML Assertion 
XPath Assertion 
XML Schema Assertion

配置元素 
配置元素允许你创建默认的变量在采样器中使用。用于修改采样器发出的请求内容。 
它们只能被同一范围内的采样器访问,并且先于采样器被执行。 
以下是HTTP Request Defaults 面板,如图: 

Request Default 1可以被Request1和Request3采样器访问,因为它是父节点,而Request Default2只能被Request1访问,Request Default3只能被Request3访问。 
以下是JMeter提供的所有配置元素列表: 
CSV Data Set Config 
FTP Request Defaults 
HTTP Authorization Manager 
HTTP Cookie Manager 
HTTP Proxy Server 
HTTP Request Defaults 
HTTP Header Manager 
Java Request Defaults 
JDBC Connection Configuration 
Login Config Element 
LDAP Request Defaults 
LDAP Extended Request Defaults 
TCP Sampler Config 
User Defined Variables 
Simple Config Element

Pre-Processor Elements 
预先处理允许你修改范围内的采样器。他们经常用于在运行之前修改请求的设置,或者更新不能从响应文本中获取的变量。 
以下是JMeter提供的预先处理元素。 
HTML Link Parser 
HTTP URL Re-writing Modifier 
HTML Parameter Mask 
HTTP User Parameter Modifier 
User Parameters 
Counter 
BeanShell PreProcessor

Post-Processor Elements 
后处理元素在采样器发出请求后执行。一种好的做法是将其做为采样器的子元素,以保证它只在特定的采样器运行后执行,而不是全部的采样器。该元素一般用于处理响应数据,例如,提取稍后要用到的变量值。 
以下是JMeter提供的全部后处理元素。 
Regular Expression Extractor 
XPath Extractor 
Result Status Action Handler 
Save Responses to a file 
Generate Summary Results 
BeanShell PostProcessor

构建一个用于测试web站点的测试计划 
本节描述如何创建一个基本的网站测试计划。我们稍后会对该计划进行扩展以进行性能测试(第5章)和功能测试(第6章)。 
以下是基本的测试计划所需要的元素: 
Thread Group 
HTTP Request (Sampler) 
HTTP Request Default (Configuration Element) 
Summary Report (Listener)

我们可以按照以下的步骤来进行:

  • 添加用户
  • 添加和配置默认的HTTP Request
  • 添加HTTP Request
  • 添加监听器显示、存放测试结果
  • 保存和运行测试计划

首先,运行JMeter(双击JMeter.bat在jmeter/bin目录中),你可以看到默认的界面,包括测试计划和工作区。

添加用户 
1.右击Test Plan图标在左边窗格,然后选择add|Thread Group。 
 
右边的将显示Thread Group的控制面板。 
 
2.将Thread Group更名为My Users. 
3.设定为一次连接和一个用户。 
4.更变Ramp-Up Period(坡道期)为0,意味着用户将会马上开始测试。如果还有其他的用户,那就意味着所有的用户立即开始测试。

设定之后图如下:

接下来做其它的步骤。 
添加默认的HTTP Request 
1.右击My Users元素,选择Add | Config Element | HTTP Request Defaults。 
2.选择后显示它的控制台界面。 
3.重命名为My URL。 
4.在服务器名或IP地址栏中输入www.mocksite.net或其它你想用的网址。其余不动。设置HTTP Request Default Element会引起在My Users中的所有请求采样器访问同一个服务器。 
显示如下: 

添加HTTP Requests 
在这一步,我们将向服务做两个模拟的请求:默认的页面和另一个页面。JMeter会以它们在测试计划树中出现的次序来执行,我们首先添加默认页面的请求。 
1.右击My Users线程元素,选择Add | Sampler | HTTP Request. 
2.选择HTTP Request从左边窗格,并做以下修改: 
a. Name栏:Home Page 
b. Web Server:这个信息已经在HTTP Request Defaults中设置。在这里不需要修改,除非你需要重定向到另一个不同的路径。 
c. Path栏:/ 
因为我们已经在HTTP Request Default元素中指定Server name,我们就不必再指定其它内容。 
完成后如图: 

3.添加其它HTTP Request元素在Home Page元素之下。 
a. Name栏:Sample Page 
b. Path栏:/sample.html(或你自己知道的url) 
因为我们已经在HTTP Request Default element指定了服务器名www.mocksite.com,该path就会添加在其后形成完整路径。 
以下为完成图:

添加监听器 
最后,我们添加一个简单的监听器,Aggregate Report。这个元素将存放所有http请求的结果,并以表格形式输出。
1.选择My Users元素并Add | Listener | Aggregate Report。 
2.在Write All Data to a File:在Filename栏中输出目录名或用browse按钮选择,并输入输出文件名。 
以下为完成图: 

保存和运行测试计划 
JMeter要求我们在运行之前保存测试计划。 
1.选择Save Test Plan从File菜单。JMeter允许你只保存一部分,通过选择分支。 
2.在Save as中输入文件名,例如输入My Users。扩展名为.jmx。 
3.从run 菜单选择运行。 
以下为Aggregate Report Element和Control Panel运行结果。注意右上角有小的方框,旁边的数字显示激活的线程数和总线程数。 

以下为运行测试计划之后的界面。右上角方框为灰色,只显示总线程数,你也可以手动停止测试,通过选择Stop从Run菜单。

报表列解释如下: 
Label—例子的标签 
# Samples—URL的样本数量 
Average—平均时间 
Median—The time in the middle of a set of results 
90% Line—The maximum time taken for the fastest 90% of the samples 
Min—The lowest time for the samples 
Max—The longest time for the samples 
Error %—Percent of requests with errors or failures 
Throughput—Throughput measured in requests per unit of time 
Kb/sec—The throughput measured in Kilobytes per second

时间: 2024-08-03 08:50:44

Apache JMeter--网站自动测试与性能测评的相关文章

Windows下搭建Jenkins+Jmeter+Ant 自动测试环境

1.JDK \Jmeter \ Ant安装: 1.1.      安装JDK: 双击jdk-7u80-windows-x64.exe安装,默认安装到C:\ProgramFiles\Java目录 1.2.      安装Jmeter: 在我的电脑-E盘(建议与文档保持一致,否则需要修改配置文件),新建apache文件夹,然后将apache-jmeter-3.0.rar解压到到当前目录. 1.3.      安装Ant: 将apache-Ant-1.9.7.rar复制到E:\apache目录,然后解

Apache JMeter开源压力测试/负载测试工具 2.12 官方最新版

软件介绍 Jmeter是一款使用Java开发的,开源免费的,测试工具, 主要用来做功能测试和性能测试(压力测试/负载测试),而且用Jmeter 来测试 Restful API, 非常好用. 如何学好Jmeter: 如果你用Jmeter去对Web进行功能测试,或者性能测试. 你必须熟练HTTP协议,才能学好Jmeter. 否则你很难理解Jmeter中得概念. Jmeter运行: 解压后, 运行  “bin/jmeter.bat” Jmeter 是支持中文的, 启动Jmeter 后, 点击 Opti

【转】Apache JMeter web性能测试实例

Apache JMeter是可以对利用HTTP或FTP服务器的应用程序进行测试的工具.它是基于Java的,通过所提供的API它还具有高度可扩展性.典型的JMeter测试包括创建循环和线程组.循环使用预设的延迟来模拟对服务器的连续请求.线程组是为模拟并发负载而设计的.JMeter提供了用户界面.它还公开了API,用户可以从Java应用程序来运行基于JMeter的测试.为了在JMeter中创建负载测试,需要构建测试计划.在实际操作中,Jmeter需要执行一系列的操作.最简单的测试计划通常包括下列元件

【转】利用 Apache JMeter 测试 WebSphere 性能

如果您预算紧张并且时间紧迫 —— 或者即使您不是这样 —— 那么,您可能希望考虑使用 JMeter 来对 Web 和其他应用程序进行压力测试.IBM 的 Greg Herringer 详细描述他使用这个纯 Java 应用程序来测试 WebSphere 中间件解决方案的经历.        本文描述如何部署 Apache 开放源代码工具 JMeter,以基于 IBM WebSphere Application Server 和 WebSphere Branch Transformation Too

PHP 使用Apache 中的ab 测试网站的压力性能

打开Apache服务器的安装路径(我用的是 WampServer),在bin目录中有一个ab.exe的可执行程序,它就是要介绍的压力测试工具. 在Windows系统的命令行下,进入ab.exe程序所在目录,执行ab.exe程序.注意直接双击无法正确运行. d:(回车/进入D盘) cd wamp\bin\apache\Apache2.4.4\bin(回车/进入 bin目录) ab(回车/) 如果看到下列一些帮助信息就说明成功启动ab     开始启动ab 压力测试 ab -n 5000 -c 20

Apache实现网站性能压力测试

简介 压力测试是性能调优过程中必不可少的一环.只有让服务器处在高压情况下才能真正体现出各种设置所暴露的问题.性能测试工具目前最常见的有以下几种:ab.http_load.webbench.siege. ab的原理 ??ab命令会创建多个并发访问线程,模拟多个访问者同时对某一URL地址进行访问.它的测试目标是基于URL的,因此,它既可以用来测试apache的负载压力,也可以测试nginx..tomcat.IIS等其它Web服务器的压力.??ab命令对发出负载的计算机要求很低,它既不会占用很高CPU

JMeter测试WEB性能入门

一.JMeter介绍 1.Apache JMeter是什么 Apache JMeter 是Apache组织的开放源代码项目,是一个100%纯Java桌面应用,用于压力测试和性能测量.它最初被设计用于Web应用测试但后来扩展到其它测试领域.Apache JMeter可以用于对静态的和动态的资源(文件,Servlet,Perl脚本,Java对象,数据库和查询,FTP服务器或是其它资源)的性能进行测试.JMeter可以用于在服务器,网络或对象模拟繁重的负载来测试它们提供服务的受压能力或者分析不同压力条

apache修改最大连接并用ab网站压力测试

httpd.conf的配置 426 # Server-pool management (MPM specific)427 Include conf/extra/httpd-mpm.conf [[email protected] /]# apachectl -lCompiled in modules:  core.c  prefork.c  http_core.c  mod_so.c [[email protected] /]# cat /alidata/server/httpd-2.2.27/c

PHP性能:序——谈ab(Apache Bench)压力测试工具

PHP性能:序--谈ab(Apache Bench)压力测试工具 ab(Apache  Bench)是啥? ab是Apache自带的一个压力测试软件,可以通过ab命令和选项对某个URL进行压力测试.ab建议在linux环境下使用. 为啥要压力测试工具? 因为你不给你的网站压力,你不知道项目的最大的容量是多少,自己的知识有多少.在一定范围里,压力达到一定程度,动力和容量也就达到顶峰.所以说没有最大的容量,只有极致的性能优化. 压力测试工具,另一方面也为测试提供一个标准,为当前需要优化提供基础数据.