Jmeter 用户手册 打印
作者:WhoisTester   
2011-09-23 13:57

1。 简介
 Apache JMeter是100%的纯Java桌面应用程序设计的负载测试客户机/服务器软件(如Web应用程序 )。 它可用于测试性能无论在静态和动态的资源,如静态文件,Java Servlet的,CGI脚本,Java 对象 , 数据库, FTP服务器,和更多。 JMeter可以用来模拟一个重负载的服务器上,网络或对象来测试其强度或分析不同的负载类型下的整体性能。

另外,JMeter可以帮助你回归测试您的应用程序让你创建测试脚本来验证您的应用程序是你所期望的结果返回的断言。 JMeter的最大的灵活性,让您创建这些断言使用正则表达式。

但是请注意,JMeter是不是浏览器。


1.1历史

Apache软件基金会的斯特凡Mazzocchi JMeter的原开发商。 他写道:它主要测试的Apache JServ(已经被取代Apache Tomcat项目的项目)的性能。 我们重新设计了JMeter的提高图形用户界面和添加功能测试能力。

1.2未来

我们希望看到JMeter的能力,迅速扩大为开发商拿可插拔的体系结构的优势。 进一步发展的主要目标是使JMeter的,而不损害JMeter的负载测试功能最有用的回归测试工具,尽可能。


 2。 新手入门


开始使用JMeter最简单的方法是先下载最新版本的生产和安装。 本新闻稿中包含的所有文件,你需要建立和运行大多数类型的测试,例如,Web(HTTP / HTTPS),FTP,JDBC,LDAP,Java中,和JUnit。

如果你想执行JDBC测试,那么你会,当然,需要适当的JDBC驱动程序从您的供应商。 JMeter的不附带任何JDBC驱动。

JMeter的包括JMS API的JAR文件,但不包括JMS客户端实现。 如果你想运行JMS测试,你需要下载JMS提供者的合适的ja​​r。

参见JMeter 的classpath中部分细节上安装额外的罐子。

接下来,启动JMeter并通过建立一个测试计划 “用户指南”一节,以了解自己使用JMeter基础(例如,添加和删除元素) 。

最后,经过对如何建立一个测试计划的具体类型的相应部分。 例如,如果你是在测试一个Web应用程序感兴趣,然后看到一个Web测试计划的部分建筑 。 其他具体的测试计划部分是:

高级Web测试计划
JDBC的
FTP
JMS点到点
JMS主题
LDAP
LDAP扩展
Web服务(SOAP)

一旦你舒适的建设和运行JMeter测试计划,你可以寻找到的各种配置元素(定时器,监听器,断言,和其他人),让您更好地控制您的测试计划。


2.1需求

JMeter要求在您的计算环境,满足一些最低要求。
2.1.1 Java的版本

JMeter要求在一个完全兼容的JVM 1.5或更高。

因为JMeter的只使用标准的Java API,请不要提交错误报告,如果你的JRE失败运行JMeter的,因为JRE的实施问题。

 2.1.2作业系统

JMeter是100%的Java应用程序,并应在任何系统中,有一个兼容的Java实现正确运行。

JMeter已经和工程:

UNIX(Solaris上,Linux等)
的Windows(98,NT,XP等)
的OpenVMS Alpha 7.3 +

2.2可选

如果你做JMeter的发展计划,那么你会需要下面列出的一个或多个可选包。
2.2.1 Java的编译器

如果你想建立JMeter的源或开发JMeter的插件,那么您将需要一个完全兼容JDK 1.5或更高。


2.2.2 SAX的XML解析器

JMeter的来自Apache的Xerces XML解析器 。 你必须告诉JMeter的使​​用不同的XML解析器的选项。 要做到这一点,包括第三方解析器在JMeter的classpath中的类,和更新的jmeter.properties文件解析器实现的完整类名。


2.2.3电子邮件支持

JMeter的具有丰富的电子邮件功能。 根据测试结果,它可以发送电子邮件,并有一个POP3(S)/ IMAP(S)取样。 它也有一个SMTP取样。


2.2.4 SSL的加密

要测试一个Web服务器,使用SSL加密(HTTPS),JMeter要求提供SSL实现,是与Sun Java 1.4及以上的情况下。 如果您的Java版本不包括SSL支持,那么很可能增加一个外部的实施。 包括必要的加密包在JMeter 的classpath中。 此外,更新system.properties注册SSL提供者。

JMeter的HTTP默认协议水平的TLS。 这是可以改变的,编辑工作JMeter的属性“https.default.protocol”jmeter.properties或user.properties。

JMeter的HTTP取样器配置为接受的所有证书,是否信任与否,不管有效期等 ,这是为了让最大的灵活性,在测试服务器。

如果服务器要求客户端证书,这可以提供。

还有的SSL管理 ,为更大的控制证书。

JMeter的代理服务器(见下文)支持在2.3.4之后的版本录制的HTTPS(SSL)

SMTP采样可以选择使用一个本地的信托商店或信任的所有证书。


2.2.5 JDBC的驱动

您需要将您的数据库厂商的JDBC驱动程序添加到 classpath中,如果你想要做的JDBC测试。 请确保该文件是一个JAR文件,而不是一个zip。


2.2.6的JMS客户端

JMeter的现在包括从Apache Geronimo的JMS API,所以你只需要添加从JMS提供适当的JMS客户端执行的JAR(S)。 请参阅其文档以了解详情。 也有可能是JMeter的维基上的一些信息。


2.2.7图书馆的ActiveMQ JMS的

在写作时,当前版本的ActiveMQ 5.3.2。 您将需要添加ActiveMQ的所有- 5.3.2.jar到你的classpath中,如存储在lib /目录下的jar。

另外,添加ActiveMQ的核心- 5.3.2.jar到classpath中的jar,这是需要的,可在Apache Geronimo Geronimo的J2EE management_1.0_spec - 1.0.jar的jar发现javax/management/j2ee类。 其他需要的jar(如下议院记录)已经包含使用JMeter。
 有关详细信息,请参阅http://activemq.apache.org/initial-configuration.html 。
JMeter 的classpath中的更多细节部分上安装额外的罐子。

2.3安装

我们建议大多数用户运行最新的版本 。

要安装一个发布版本,只需将其解压缩到的zip / tar文件的目录,你想JMeter的安装。 只要你有一个JRE / JDK的正确安装和JAVA_HOME环境变量设置,是为你做而已。

注意:如果目录路径中包含任何空格,可以有问题(特别是客户机 - 服务器模式)。

安装目录结构应该是这个样子(版本2.3.1):

雅加达JMeter的- 2.3.1
jakarta-jmeter-2.3.1/bin
jakarta-jmeter-2.3.1/docs
jakarta-jmeter-2.3.1/extras
jakarta-jmeter-2.3.1/lib /
jakarta-jmeter-2.3.1/lib/ext
jakarta-jmeter-2.3.1/lib/junit
jakarta-jmeter-2.3.1/printable_docs

如果你想,可以重命名的父目录(即雅加达JMeter的2.3.1),但不改变任何子目录名称。

2.4运行JMeter的

要运行JMeter,运行jmeter.bat(Windows)或JMeter的(对于Unix)文件。 这些文件是在bin目录中找到。 在短暂的停顿后,JMeter的GUI应该会出现。

有一些额外的脚本,在bin目录中,你会发现有用的。 Windows脚本文件(cmd文件需要Win2K或更高版本)。

jmeter.bat - 运行JMeter(默认情况下,在GUI模式)
JMeter的n.cmd - 砸一个JMX文件运行一个非GUI测试
JMeter的nr.cmd - 砸一个JMX远程文件运行一个非GUI测试
JMeter的t.cmd - 下降这是一个JMX文件加载在GUI模式下
JMeter的server.bat - 在服务器模式下启动JMeter的
镜子server.cmd - 在非GUI模式运行JMeter的镜像服务器
shutdown.cmd - 关闭客户端运行正常停止非GUI实例
stoptest.cmd - 运行关机客户机突然停止一个非GUI的实例

注:去年特殊的名字,可用于使用JMeter n.cmd的,JMeter t.cmd和JMeter的nr.cmd和手段,以交互方式运行的最后一个测试计划。

环境变量JVM_ARGS可用于覆盖在jmeter.bat脚本JVM设置。 例如:

设置JVM_​​ARGS =“- Xms1024m - Xmx1024m - Dpropname = propvalue”
JMeter的- T test.jmx ...

UN * X的脚本文件,在大多数Linux / Unix系统的工作:

JMeter的 - 运行JMeter(默认情况下,在GUI模式)。 定义了一些JVM的设置可能不适合所有JVM。
JMeter的服务器 - 在服务器模式下启动JMeter的(用适当的参数调用JMeter的脚本)
jmeter.sh - 没有JVM指定的选项非常基本的JMeter的脚本。
镜面server.sh - 在非GUI模式运行JMeter的镜像服务器
shutdown.sh - 关闭客户端运行正常停止非GUI实例
stoptest.sh - 运行关机客户机突然停止一个非GUI的实例

它可能是必要的编辑JMeter的shell脚本,如果一些JVM选项不支持您使用的是由JVM。 JVM_ARGS环境变量可以用于覆盖或设置其他JVM选项,例如,

JVM_ARGS =“- Xms1024m - Xmx1024m”JMeter的- T test.jmx [等]

将覆盖脚本中的堆设置。

2.4.1 JMeter的Classpath的

JMeter会自动找到以下目录罐中的类:

JMETER_HOME / LIB - 实用罐
JMETER_HOME / lib / ext目录 - JMeter组件和附加使用

如果您已经开发了新的JMeter组件,那么你应该JAR,并复制到JMeter的lib / ext目录下的JAR。 JMeter会自动找到在这里找到任何罐JMeter组件。

支持罐(库等)应放置在 lib目录中。

如果你不想把JMeter的lib / ext目录扩展罐,然后在jmeter.properties定义的属性search_paths。 不要实用罐使用LIB / EXT,它是唯一的JMeter组件。

其他的jar(如JDBC,JMS实现和JMeter的代码所需要的任何其他支持libaries等),应放置在lib目录-不是lib / ext目录

注:JMeter会只找到jar文件,而不是拉链。。

您还可以安装实用程序JAR文件在$ JAVA_HOME / JRE / lib / ext目录,或(2.1.1),您可以设置在jmeter.properties 财产 user.classpath

请注意,设置CLASSPATH环境变量,将没有任何效果。 这是因为JMeter是开始与“Java的JAR”,和java命令默默地忽略CLASSPATH变量,而当罐子-classpath/-cp选项。 出现这种情况所有的Java程序,而不仅仅是JMeter的。]

2.4.2使用代理服务器

如果您是从后面的防火墙/代理服务器的测试,您可能需要提供JMeter的防火墙/代理服务器的主机名和端口号。 要做到这一点,从以下参数的命令行运行jmeter.bat / JMeter的文件:

- H [代理服务器主机名或IP地址]

- P [代理服务器的端口]

- N [nonproxy主机](如*. apache.org |本地主机)

- U [代理身份验证的用户名 - 如果需要的话]

[代理身份验证密码 - 如果需要的话]

例如 :my.proxy.server JMeter的- H - P 8000 - u用户名- A - N的密码本地主机

或者,您可以使用 - proxyHost, - proxyPort, - 用户名,和 - 密码

JMeter的也有其自身内置的HTTP代理服务器,可用于记录HTTP或HTTPS浏览器会话。 这不是与上面所述的代理设置,这是用来当JMeter的HTTP或HTTPS请求本身混淆。


2.4.3非GUI模式(命令行模式)

对于非交互式的测试,你可以选择没有GUI运行JMeter的。 要做到这一点,使用下面的命令选项

- N指定JMeter是在非GUI模式下运行

- T [JMX的文件名称包含测试计划]。

- L [JTL文件的名称记录样本的结果]。

- J [JMeter的运行日志文件的名称]。

- R运行JMeter的财产“remote_hosts”中指定的服务器测试

- R [远程服务器列表在指定的远程服务器上运行测试

该脚本还可以让你指定可选的防火墙/代理服务器信息:

- H [代理服务器主机名或IP地址]

- P [代理服务器的端口]

例如 :JMeter的- N - T log.jtl my_test.jmx - L - H my.proxy.server - P 8000


2.4.4服务器模式

对于分布式的测试,在服务器模式下运行JMeter的遥控器上的节点(S),然后从GUI控制服务器(S) 。 您也可以使用非GUI模式下运行远程测试。 要启动服务器(S),每台服务器主机上运行jmeter-server/jmeter-server.bat。

该脚本还可以让你指定可选的防火墙/代理服务器信息:

- H [代理服务器主机名或IP地址]

- P [代理服务器的端口]

例如 :JMeter的服务器- H my.proxy.server - P 8000

如果你想在服务器退出后,已运行一个单一的测试,然后定义JMeter的财产server.exitaftertest = TRUE。

要在非GUI模式下的客户端运行测试,使用下面的命令:

JMeter的testplan.jmx - N - T - R - Gprop = VAL] [ - Gglobal.properties] [- Z]
其中:
- G是用来定义JMeter的属性设置在服务器
- “X”表示退出的服务器,在测试结束
Rserver1,server2的 - 可以用来代替- R提供一个服务器列表启动
覆盖remote_hosts,但不定义该属性。


2.4.5通过命令行的首要 ¶

Java系统属性,JMeter的属性和记录属性可以直接在命令行上(而不是修改jmeter.properties)重写。 要做到这一点,使用下列选项:

D [prop_name] = [值] - 定义了一个Java系统属性的值。

- J [道具名] = [值] - 定义一个本地的JMeter的财产。

- G [道具名] = [值] - 定义了一个JMeter属性被发送到所有远程服务器。

- G [propertyfile] - 定义一个文件被发送到所有远程服务器包含JMeter的属性。

- L [类别] = [优先] - 覆盖了日志记录设置,设置特定类别的优先级。

- L标志也可以使用无根日志记录级别设置的类别名称。

例如 :

JMeter的,Duser.dir = / / mstover / jmeter_stuff \
- Jremote_hosts = 127.0.0.1 - Ljmeter.engine =调试

JMeter的,LDEBUG

注意:

早在启动命令行属性的处理,但后测井系统已成立。 尝试使用- J标志,更新LOG_LEVEL或log_file属性不会有任何效果 。


2.4.6日志和错误消息

JMeter的一般不使用错误弹出对话框,因为这些会干扰运行测试。 也没有报告任何一个错误拼写的变量或函数的错误,而只是用于参考。 更多信息 , 请参阅函数和变量。

如果JMeter的检测在检测过程中的错误,一个消息将被写入到日志文件。 日志文件的名称是指在jmeter.properties文件(或使用- j选项,见下文)。 它默认为jmeter.log,并会从中JMeter的启动目录中发现。

JMeter的2.2之后的版本中添加了一个新的命令行选项- J jmeterlogfile。 这是处理后的初始属性的文件被读取,处理之前,任何进一步的属性。 因此,它允许重写jmeter.log默认。 JMeter的脚本,测试计划名称作为参数(如JMeter的n.cmd)已更新定义日志文件的使用,例如Test27.jmx的日志文件设置为Test27测试计划测试计划名称。日志。

在Windows上运行时,该文件可能会出现像刚才JMeter的 ,除非你有Windows设置为显示文件扩展名。 你应该做的,可以更容易地检测病毒和其它脏东西,伪装成文本文件...]

以及记录错误,jmeter.log文件记录了一些有关测试运行的信息。 例如:

2003年10月17日下午12时一十九分20秒信息 - jmeter.JMeter:版本1.9.20031002
2003年10月17日下午12时19分45秒INFO - jmeter.gui.action.Load:加载文件:C:\ mytestfiles \ BSH.jmx
2003年10月17日12时十九分52秒信息 - jmeter.engine.StandardJMeterEngine:运行测试!
2003年10月17日12时十九分52秒INFO - jmeter.engine.StandardJMeterEngine:开始1线程组博西。 斜坡上升= 1。
2003年10月17日12时十九分52秒INFO - jmeter.engine.StandardJMeterEngine:继续对错误
2003年10月17日12时十九分52秒INFO - jmeter.threads.JMeterThread:主题BSH1 1日开始
2003年10月17日12时十九分52秒INFO - jmeter.threads.JMeterThread:主题BSH1 - 1完成
2003年10月17日12时十九分52秒信息 - jmeter.engine.StandardJMeterEngine:测试已经结束    


日志文件可以帮助确定错误的原因,像JMeter不中断测试显示错误对话。


2.4.7完整的命令行选项列表

调用像JMeter JMeter的 - 吗?“ 会打印出所有的命令行选项的列表。 这些所示。

- H, - 帮助
打印用法信息并退出
- V, - ​​版
打印版本信息并退出
- P, - propfile {参数}
使用JMeter的属性文件
- Q, - addprop {参数}
额外的属性文件(S)
- T, - testfile将{参数}
JMeter测试(JMX)文件运行
- J - jmeterlogfile {参数}
JMeter的日志文件
- L, - 日志文件{参数}
日志文件的样本,以
- N, - nongui
nongui模式运行JMeter
- S, - 服务器
运行JMeter的服务器
- H - proxyHost {参数}
JMeter的使​​用设置代理服务器
- P - proxyPort {参数}
JMeter的使​​用设置代理服务器的端口
- U, - 用户名{参数}
设置代理服务器的用户名,JMeter是使用
- A, - 密码{参数}
代理服务器的设置密码,JMeter是使用
- J - jmeterproperty {参数} = {值}
定义附加的JMeter的属性
- G - globalproperty(参数)=(值)]
定义全局属性(发送到服务器)
EG - Gport = 123
或- Gglobal.properties
- D - systemproperty {参数} = {值}
定义额外的系统性能
- S - systemPropertyFile {文件名}
要添加一个属性文件为系统属性
- L - 的loglevel {参数} = {值}
定义的loglevel:[类别]水平
例如jorphan = INFO或jmeter.util = DEBUG
- R, - runremote(非GUI)
启动远程服务器(JMeter的属性remote_hosts定义)
- R, - remotestart server1上,... ...  (仅限于非GUI)
启动这些远程服务器(覆盖remote_hosts)
- D, - HOMEDIR {参数}
使用JMeter的主目录
- X - remoteexit
退出远程服务器,在测试结束(非GUI)

注:。JMeter的日志文件的名称是一个SimpleDateFormat的(适用于当前日期),如果它包含单引号配对,如“jmeter_'yyyyMMddHHmmss”格式化日志“

如果特殊的名字,最后是使用了- t,- J - l标志,那么JMeter需要,意味着最后的测试计划,在交互模式下运行。

2.5配置JMeter的

如果你想修改与JMeter的运行,你需要修改/ bin目录的jmeter.properties或创建您自己的jmeter.properties副本,并在命令行中指定它的属性。

注意:从2.2开始,您可以定义附加的JMeter的属性在JMeter 的财产user.properties有默认值user.properties的定义的文件。 该文件将被自动加载,如果发现在当前目录中,或者如果它是在JMeter的bin目录中找到。 同样,system.properties是用来更新系统属性。

参数
属性     说明     要求
ssl.provider     您可以指定您的SSL实现的类,如果你不想使用内置的Java实现。     无
xml.parser     您可以指定您的XML解析器的实现。 默认值是:org.apache.xerces.parsers.SAXParser     无
remote_hosts     逗号分隔的列表远程JMeter的主机(或主机:端口如果需要的话)。 如果你是在分布式环境中运行JMeter中,列出的机器,你必须JMeter的远程服务器上运行。 这将允许您从本机的图形用户界面控制那些服务器     无
not_in_menu     一个组件的列表,你不希望看到在JMeter的菜单。 像JMeter有越来越多的组件,您不妨来定制你的JMeter的,只显示那些您感兴趣,您可以列出他们的类名或类标签(JMeter的用户界面出现的字符串)的组成部分,他们将没有不再出现在菜单中。     无
sea​​rch_paths     路径列表(分隔;),JMeter会为JMeter的搜索类上;例如额外的采样。 这是除了在lib / ext目录中发现的任何jar文件。     无
user.classpath     路径列表,JMeter将搜索的实用工具类。 这是除了在lib目录中发现的任何jar文件。     无
user.properties     文件包含附加的JMeter的属性的名称。 这些补充后的初始属性文件,但前- Q和- J选项的处理。     无
system.properties     含有额外的系统属性的文件的名称。 这些都是加入前- S和- D选项的处理。     无

命令行选项和属性文件按下列顺序处理:

- p propfile
jmeter.properties(或- p选项的文件),然后装入
- j日志文件
记录初始化
装入了user.properties是
装入了system.properties是
所有其他命令行选项的处理

在jmeter.properties,user.properties system.properties你可以改变其他设置的进一步信息的文件的意见。


 3。 建立测试计划


一个测试计划描述了一系列步骤,JMeter会在运行时执行。 一个完整的测试计划将包括的一个或多个线程组,逻辑conrollers,样本生成控制器,监听器,定时器,断言,并配置元素。
3.1添加和删除元素

一个测试计划中添加元素,可以通过右键单击树中的元素,从“添加”列表中选择一个新的元素。 另外,元素可以从文件中载入,选择“合并”或“打开”选项添加。

要删除一个元素,确保元素被选中,右键单击该元素,然后选择“删除”选项。


3.2加载和保存元素

若要从文件中加载一个的元素,右键单击您要加载的元素添加在现有的树中的元素,并选择“合并”选项。 选择元素保存的文件。 JMeter会合并成树的元素。

为了保存树中的元素,右键单击一个元素,并选择“保存选择为... ...” 选项​​。 JMeter会保存所选的元素,再加上它下面的所有子元素。 通过这种方式,可以节省测试树片段和单个元素,以供日后使用。

工作台自动保存测试计划,但可以单独保存上述。


3.3配置树中的元素

在测试树中的任何元素将出现在JMeter的右侧框架的控制。 这些控件允许您配置的特定测试元素的行为。 可以配置一个元素取决于它是什么类型的元素。

测试树本身可以被操纵,通过拖放组件的测试树周围。


3.4保存测试计划

虽然它不是必需的,我们建议您保存在运行前的测试计划文件。 为了保存测试计划,选择“保存”或“保存测试计划... ...” 从文件菜单(使用最新版本,它不再需要首先选择测试计划元件)。

JMeter允许在您保存整个测试计划树或只是它的一部分。 仅保存在一个特定的“分支”的测试计划树中的元素,在树中选择测试计划元件,从开始的“分支”,然后点击鼠标右键来访问“保存选择,。 ... ...“ 菜单项。 另外,选择适当的测试计划元件,然后选择“保存选择... ...” 从编辑菜单中。


3.5运行测试计划

要运行您的测试计划,选择“运行”菜单项从“开始”(控制+ R)。 JMeter是运行时,它显示了一个绿色的小盒子,在菜单栏下的部分的右手结束。 您也可以检查“运行”菜单。 如果禁用“开始”,并启用“停止”,那么JMeter正在运行您的测试计划(或者,至少,它认为它是)。

绿色方块左侧的数字是活动线程数/线程总数。 这些只适用于本地运行的测试,他们不包括远程系统上的任何线程开始时,使用客户机 - 服务器模式。


3.6停止测试

停止命令,从菜单有两种类型:

停止(控制+'。') - 如果可能的话立即停止线程。 在JMeter的2.3.2版本后,现在很多采样中断的这意味着,活跃的样品可以提前终止。 stop命令将检查所有线程都默认的超时时间,这是5000毫秒= 5秒内停止。 这是可以改变的使用JMeter的财产jmeterengine.threadstop.wait ]如果线程没有停止过,然后显示一条消息。 “停止”命令,可以重试,但如果失败,那么它需要退出JMeter的清理。
关闭(控制+ ',')-请求线程停止任何当前工作结束。 不会中断任何积极的样品。 模态关机对话框中,将仍然有效,直到所有的线程都停止。

2.3.2 JMeter的版本后,允许将要发起的停止,如果关机时间过长。 关闭关机对话框中,选择“运行/停止,只要按下Control +'。”“。

当在非GUI模式运行JMeter中,有没有菜单,和JMeter没有反应,如控制按键+“。” 所以在2.3.2版本后,JMeter的非GUI模式将在一个特定的端口(默认为4445,见JMeter的jmeterengine.nongui.port jmeterengine.nongui.port )的命令听。 JMeter的支持在2.4之后的版本,自动选择备用端口,如果默认端口正在使用(例如另一个JMeter的实例)。 在这种情况下,JMeter将尝试下一个更高的端口,继续,直到它到达JMeter的财产jmeterengine.nongui.maxport )默认4455。 如果maxport是小于或等于port ,端口扫描不会发生。 注意JMeter的2.4和更早版本,没有设立非GUI客户端,只有非GUI的独立测试监听器,这已得到修复。

显示在控制台窗口中选择的端口。

目前支持的命令是:

关机 - 正常关机
StopTestNow - 立即关机

这些命令可以通过shutdown[.cmd|.sh]或stoptest[.cmd|.sh]脚本分别发送。 在JMeter的bin目录中找到这些脚本。 如果脚本是来自同一主机上运行,​​该命令将只接受。


3.7错误报告

JMeter的报告的jmeter.log文件中的警告和错误,以及一些测试运行本身的信息。 只是偶尔可能会出现一些错误,JMeter是无法捕捉和记录,这些将出现在命令控制台。 如果测试不行为像您期望的那样,请检查日志文件的情况下,任何已报告错误(例如,也许在一个函数调用的语法错误)。

抽样误差(如HTTP 404 - 找不到文件),一般都不会在日志文件中报告。 相反,这些存储作为样本结果的属性。 样本结果的状态可以看出,在各种不同的听众。


 

4。 测试计划的要素

测试计划对象有一个复选框被称为“功能测试”。 如果选中,它会导致JMeter的记录每个样品从服务器返回的数据。 如果您选择了一个文件在您的测试听众,这数据将被写入文件。 如果你正在做一个小的运行,以确保正确配置JMeter是,这可能是有用的,您的服务器返回预期的结果。 结果是,该文件将迅速增长的巨大,JMeter的性能将受到影响。 如果你正在做压力测试(默认是关闭的),这个选项应该关闭。

如果您没有记录的数据文件,这个选项没有什么区别。

您也可以使用上监听器的配置按钮来决定哪些字段保存。

4.1 ThreadGroup的

线程组元件是任何测试计划的开始点。 所有的控制器和采样必须在一个线程组。 其他元素,如听众,可直接放置下的测试计划,在这种情况下,他们将适用于所有的线程组。 顾名思义,线程组元素的控制线程JMeter的的数量将用来执行测试。 一个线程组的控制可让您:

  • 设置线程数
  • 设置的坡道期
  • 设置执行测试的次数

每个线程将执行完整的测试计划和,完全独立于其他测试线程。 多线程是用来模拟并发连接到您的服务器应用程序。

斜坡告诉JMeter多久采取“上升”的选择线程。 如果使用10个线程,以及斜坡上升周期为100秒,那么JMeter将采取100秒得到所有10个线程的启动和运行。 前一个线程开始后,每个线程都将开始10秒(100/10)。 如果有30个线程和120秒的加速期,那么每个连续的线程将被推迟了4秒。

斜坡需要足够长的时间,以避免过大的工作负荷,在测试开始和足够短,最后一个线程开始运行前首先完成(除非你想这样的事情发生)。

开始斜坡上升=线程数,向上或向下调整需要。

默认情况下,线程组是一次配置循环,通过它的元素。

1.9版本引入了一个测试运行调度 线程组面板的底部单击复选框以显示额外的字段,可以在其中输入运行的开始和结束时间。 当测试开始时,JMeter将等待,如有必要,直到启动时间已经达到。 在每个周期结束时,JMeter的检查结束时间已达到,若有,停止运行,否则测试是可以继续下去,直到达到迭代限制。

另外,可以使用相对延迟和持续时间等领域。 注意:延迟覆盖的启动时间,持续时间超过乘坐的结束时间。

4.2控制器

JMeter的有两种类型的控制器:取样器和逻辑控制器。 这些驱动器的测试处理。

取样器告诉JMeter发送请求到服务器。 例如,添加一个HTTP请求取样器,如果你想JMeter发送一个HTTP请求。 您还可以通过添加一个或多个配置元素采样器请求。 欲了解更多信息,请参阅取样

逻辑控制器让你定制JMeter的使​​用来决定何时发送请求的逻辑。 例如,您可以添加一个交错的逻辑控制器,两个HTTP请求取样器之间交替。 欲了解更多信息,请参阅逻辑控制器

4.2.1取样

取样器告诉JMeter发送请求到服务器,并等待响应。 他们在树中出现的顺序处理。 控制器可用于修改采样器的重复。

JMeter的采样器包括:

  • FTP请求
  • HTTP请求
  • JDBC的请求
  • Java对象请求
  • LDAP请求
  • SOAP / XML - RPC请求
  • 的WebService(SOAP)请求
每个采样有几个可以设置的属性。 您可以进一步自定义采样器,通过添加一个或多个配置元素测试计划。

如果您要发送的相同类型的多个请求(例如,HTTP请求)到相同的服务器,可以考虑使用一个默认配置元素。 每个控制器都有一个或多个默认元素(见下文)。

请记住您的测试计划添加一个监听器来查看和/或存储您的请求的结果到磁盘。

如果你有兴趣,对你的请求的响应JMeter的执行基本验证 ,添加一个断言的采样器。 例如,在压力测试一个Web应用程序,服务器可能会返回一个成功的“HTTP响应”的代码,但页面上可能有错误,或可能会丢失部分。 您可以添加断言来检查某些HTML标记,常见的错误字符串,等等。 JMeter的,您可以创建这些断言使用正则表达式。

JMeter的内置取样器

4.2.2逻辑控制器

逻辑控制器让你定制JMeter的使​​用来决定何时发送请求的逻辑。 逻辑控制器可以改变其子元素的请求的顺序。 他们可以修改自己的请求,导致JMeter的重复请求,等等。

要了解逻辑控制器的测试计划的效果,考虑下​​面的测试树:

  • 测试计划
    • 线程组
      • 一旦唯一的控制器
      • 加载搜索页面(HTTP取样)
      • 交错控制器
        • 搜索的“A”(HTTP取样器)
        • 搜索的“B”(HTTP取样器)
        • HTTP默认请求(配置元素)
      • HTTP默认请求(配置元素)
      • Cookie管理(配置元素)

有关此测试的第一件事情就是登录请求将执行仅在第一次通过。 后续迭代会跳过它。 这是由于只有一次控制器的影响。

登录后,搜索页面(想象一个用户登录的Web应用程序,然后下一个采样器加载到一个搜索页面做一个搜索)。 这仅仅是一个简单的要求,不通过任何逻辑控制器过滤。

加载搜索页面后,我们希望做一个搜索。 其实,我们想要做的两个不同的搜索。 但是,我们希望重新装载搜索页面本身相互之间搜索。 我们可以通过4个简单的HTTP请求元素(负载搜索,搜索“A”,负载搜索,搜索的“B”)。 相反,我们使用交错控制器 ,通过一个孩子每次请求通过测试。 它使排序(IE浏览器 - 它不通过随机的,而是“记住”它的地方)的子元素。 交错2个孩子的要求可能会矫枉过正,但很容易被有8,或20个孩子的请求。

注意:HTTP请求默认值属于交错控制器。 试想一下,“搜索”和“搜索”共享相同的路径信息(HTTP请求规范包括域,协议,端口,方法,路径和参数,加上其他可选项目)。 这是有道理的 - 无论是搜索请求,打相同的后端搜索引擎(servlet或CGI脚本,让我们说)。 配置,而不​​是相同的信息都在其路径领域的HTTP取样器,我们可以抽象的信息,以一个单一的配置元素。 当交错控制器从“搜索A”或“搜索B”请求“通行证”,这将填补空白从HTTP默认请求配置元素的值。 因此,我们对这些请求离开的路径字段空白,并投入Configuration元素的信息。 在这种情况下,这是一个最好的未成年人的利益,但它演示功能。

树中的下一个元素是另一个HTTP默认请求,此时添加到线程组本身。 线程组有一个内置的逻辑控制器,因此,它使用此配置元素完全如上所述。 它填补空白的任何要求,通过。 在Web测试是非常有用的,留在所有的HTTP取样元素域字段为空,相反,放入一个HTTP默认请求元素的信息,添加到线程组。 通过这样做,你可以在不同的服务器上测试您的应用程序,只需在你的测试计划中通过改变一个字段。 否则,你必须编辑每个采样。

最后一个元素是一个HTTP Cookie管理器 一个cookie管理器应该添加到所有的Web测试 - 否则JMeter会忽略cookie。 通过添加线程组级别中,我们将确保所有的HTTP请求将共享相同的cookie。

逻辑控制器可以结合起来,以达到不同的结果。 见列表内置逻辑控制器

4.2.3测试片段

测试片段元素是一种特殊类型的控制器 ,在同一级别的线程组元件的测试计划树中存在。 它不同于一个线程组,因为它是不会执行,除非它是由一个引用的模块控制器一个Include_Controller。

此元素是纯粹为测试计划内重复使用的代码,并在2.5版推出

4.3听众

听众提供访问JMeter的测试案例的收集,同时JMeter的运行信息。 图形结果监听器图,图上的响应时间。 “查看结果树”监听器显示的采样请求和响应的详细信息,并能显示基本的HTML和XML响应交涉。 其他听众提供信息汇总或聚合。

此外,听众可以直接的数据,以供日后使用的文件。 每一个听者在JMeter提供了一个字段来指示该文件将数据存储到。 还有配置的按钮,可以用来选择哪些领域,以节省,以及是否使用CSV或XML格式请注意,所有的监听器保存相同的数据,唯一的区别是在数据呈现在屏幕上的方式。

听众可以添加在测​​试中的任何地方,包括直属的测试计划。 他们将收集数据,只能从自己的水平或低于元素。

使用JMeter来,有几个听众。

4.4定时器

默认情况下,一个JMeter线程发送请求而每个请求之间的暂停。 我们建议您通过添加一个线程组可用的定时器指定一个延迟。 如果不加延迟,JMeter的可能太多的要求,在很短的时间量压倒你的服务器。

定时器将导致JMeter的每个采样是在其一个延迟一定的时间范围

如果您选择添加多个定时器线程组,JMeter的需要定时器的总和,该时间之前暂停执行采样定时器适用。 定时器可以增加一条,作为采样器或控制器的儿童,以限制它们应用于采样。

要在测试计划中的一个单一的地方提供了一个暂停,可以使用测试行动取样。

4.5断言

断言允许你断言被测试的服务器收到的答复的事实。 使用断言,你基本上可以“测试”,您的应用程序是你希望它返回的结果。

例如,您可以断言,查询响应将包含一些特定的文本。 您所指定的文字可以是一个Perl风格的正则表达式,你可以表明反应是包含文字,或者说,它应该符合整个响应。

您可以添加任何采样断言。 例如,您可以添加到一个HTTP请求检查文本,断言“”。 JMeter会检查该文本是在HTTP响应。 如果JMeter可以找到的文本,然后将其标记为失败的请求。

请注意断言适用于所有采样器, 其范围。 要限制的说法,以一个单一的采样,添加断言,作为一个孩子的采样。

要查看断言结果,断言监听器添加到线程组。 失败的断言也将显示在树视图和表听众,并在总结和总结报告,例如对错误%年龄。

4.6配置元素

配置元素密切配合采样器。 虽然它不发送请求( HTTP代理服务器的除外),它可以添加或修改请求。

配置元素是从仅在树枝访问你的地方元素。 例如,如果你在一个简单的逻辑控制器内的HTTP Cookie管理Cookie管理器将只能访问HTTP请求的控制器简单的逻辑控制器内的地方(见图1)。 Cookie管理器可访问的HTTP请求“网页1”和“网页”,但不是“网页3”。

此外,树枝里面的配置元素的优先级高于相同的元素在一个“父”分支。 例如,我们定义两个HTTP请求默认值的元素,“网络默认值”1“和”Web默认值“2”。 由于我们只放在“网站默认值”1“里面的一个回路控制器,”网页2“可以访问它。 其他的HTTP请求,将使用“Web默认值”2“,因为我们将它放置在线程组(”父“的所有其他分支)。


图1 -测试计划配置元素显示Accessability
用户定义的变量的配置元素是不同的。 这是在测试的开始,它被放置在任何地方的问题处理。 为了简单起见,建议该元素被放置在启动一个线程组。
4.7预处理器元素

预处理器执行前一个采样的请求遭到了一些行动。 如果预处理器连接到一个取样元素,那么它会执行之前运行,采样元素。 预处理器是最常用的一个样品申请修改设置,运行之前,或更新不从响应文本中提取的变量。 作用域规则预处理器执行时的更多细节。

4.8后处理器元件

后处理器执行某些动作后已经取得了一个采样请求。 如果后处理器连接到一个采样元素,那么它会执行运行后,采样元素。 后处理器是最常用的处理响应数据,往往从中提取的值。 作用域规则时执行后处理器的更多细节。

4.9执行顺序
  1. 配置元素
  2. 预处理器
  3. 定时器
  4. 取样器
  5. 后处理器(除非SampleResult是空)
  6. 断言(除非SampleResult是空)
  7. 监听器(除非SampleResult是空)
请注意,定时器,断言前和后处理器只处理,如果有一个采样器,它们所适用。 他们在树中出现的顺序处理逻辑控制器和采样。 其他测试元素处理的范围中,他们发现,和测试元素的类型。 [在一个类型,元素被处理的顺序,它们在树中出现]。

例如,在下面的测试计划:

  • 控制器
    • 后处理器1
    • 采样器1
    • 采样器2
    • 定时器1
    • 声明1
    • 预处理器1
    • 定时器2
    • 后处理器2
执行的顺序将是:
预处理器1
定时器1
定时器2
采样器1
后处理器1
后处理器2
声明1

预处理器1
定时器1
定时器2
采样器2
后处理器1
后处理器2
声明1

4.10作用域规则

JMeter测试树中包含的元素,这是两个层次,并下令。 在测试树的某些元素是严格分层​​(听众,配置元素后Procesors,预处理器,断言,定时器),和一些主要命令(控制器,采样器)。 当您创建您的测试计划,您将创建一个索取样品的有序列表(通过取样)表示要执行的步骤。 经常组织这些请求,也下令控制器内。 由于下面的测试树:


测试树示例

请求的顺序将是,一,二,三,四。

有些控制器会影响其子元素的顺序,您可以阅读有关在这些特定的控制器组件的引用。

其他元素都是分层的。 举例来说,是一个断言,在测试树的层次。 如果其母公司是一个请求,然后将它应用到该请求。 如果其母公司是一个控制器,那么它会影响所有的请求,该控制器的后裔。 在下面的测试树:


层次结构的例子

断言#1仅适用于请求一个,而断言#2应用于要求第二及第三。

另外一个例子,这次使用定时器:


复杂的例子:

在这个例子中,请求被命名,以反映在它们的执行顺序。 定时器1将适用于要求二,三,四(通知层次元素的顺序是如何无关)。 断言#1只适用于请求三。 定时器2#会影响所有的请求。

希望这些例子清楚如何配置(分层)元素。 如果你能想象每一个请求被传递的树枝,其母公司,那么其母公司的母公司等,而且每一次收集所有的配置元素,父,那么你会看到它是如何工作的。

配置元素头经理,Cookie管理和授权管理,区别对待,从配置的默认元素。 从配置的默认元素设置,合并成一组值取样访问。 然而,从管理者的设置不合并。 如果一个以上的经理在取样范围是,只有一个经理是使用,但目前还没有方法来指定它是用来。
4.11属性和变量

JMeter的属性定义在jmeter.properties(见Gettting入门-配置JMeter的更多细节)。

属性是全球性的JMeter的,大多是用来定义一些JMeter的使​​用默认值。 例如物业remote_hosts定义JMeter会尝试远程运行的服务器。 属性可以在测试计划中引用- 看到功能-读属性-但不能使用特定于线程的值。

JMeter的变量 ,每个线程的本地。 该值可为每个线程相同,或他们可能会有所不同。

如果一个变量是由一个线程更新,只有改变该变量的线程副本。 例如,正则表达式提取后处理器将设置其变量根据其线程读取的样品,并可以使用这些由同一线程稍后。 对于如何引用变量和函数的详细信息,请参阅函数和变量

请注意,由测试计划用户定义的变量的配置元素中定义的值在整个测试计划启动。 如果同一个变量定义多个UDV的元素,那么最后一个生效。 一旦一个线程已经开始,初始设置的变量复制给每个线程。 其他元素如用户参数预处理器或经常表达提取后处理器可用于重新定义相同的变量(或创建一个新的)。 这些重新定义只适用于当前线程。

的setProperty的功能可以被用来定义一个JMeter属性。 这是全球性的测试计划的,所以可以用来在线程之间传递的信息 - 这应该需要。

这两个变量和属性是区分大小写的。
4.12使用变量参数化测试

变量没有变化 - 它们可以被定义一次,如果单独留在家中,不会改变的价值。 所以,你可以使用尽可能短的手,他们频繁地出现在一个测试计划的表达式。 或项目在运行过程中是不变的,但在运行中可能会有所不同。 例如,一台主机,或在一个线程组的线程数目的名称。

当决定如何构造一个测试计划,做笔记,哪些项目是不变的运行,但可能会改变运行之间。 决定对这些变量的名字 - 也许使用,如C_或K_前缀或使用大写字母,以区别于他们在测试过程中需要改变的变量命名约定。 还要考虑哪些项目需要一个线程的本地 - 例如柜台或用正则表达式后处理器提取的值。 你不妨使用这些不同的命名约定。

例如,您可能测试计划中定义以下内容:

主机www.example.com
螺纹10
 LOOPS 20

你可以参考{HOST} $ {螺纹}等这些在测试计划中,如果以后要更改的主机,只需更改主机变量的值。 这工作得很好,小测试,但测试时,大量不同的组合变得单调乏味。 一种解决方案是使用一个属性来定义变量的值,例如:
主机$ {__P(主机,www.example.com)}
螺纹$ {__P(线程,10)}
 LOOPS $ {__P(循环,20)}

然后,您可以改变一些如下的命令行中的值或所有:
 JMeter的... ...  - Jhost = www3.example.org Jloops = 13

 


 

5。 建立一个Web测试计划

在本节中,您将学习如何创建一个基本的测试计划来测试一个网站。 您将创建五个用户的请求发送到雅加达网站上的两个页面。 此外,你会告诉用户运行测试两次。 因此,请求总数(5用户)×(2宗)×(重复2次)= 20的HTTP请求。 要构建测试计划,你会使用以下要素: 线程组HTTP请求HTTP请求默认值 ,和图形结果

对于更先进的测试计划,建设先进的Web测试计划。

5.1添加用户

你想要做的每个JMeter测试计划的第一步是添加一个线程组元素。 线程组告诉JMeter的要模拟,往往是用户应该如何发送请求的用户数量,以及他们应该如何发送多个请求。

继续前进,首先选择测试计划添加ThreadGroup的元素,点击鼠标右键得到添加菜单,然后选择添加 - > ThreadGroup的。

您现在应该看到在测试计划下的线程组元件。 如果您没有看到该元素,然后单击测试计划元件“展开”测试计划树。

接下来,你需要修改默认的属性。 选择线程组树中的,如果你没有选择的话。 您现在应该看到在JMeter窗口的右侧部分的线程组控制面板(见下文图5.1)


图5.1。 默认值的线程

开始通过提供一个描述性的名称,我们的线程组。 在名称字段中,输入雅加达用户。

下一步,增加用户数(线程)5。

在未来的领域,斜坡上升期间,留下了1秒的默认值。 这个属性告诉JMeter启动每个用户之间的延迟多久。 例如,如果你输入一个5秒的等候周期,JMeter将完成5秒结束时开始,所有的用户。 所以,如果我们有5个用户,5秒ramp - up期,那么用户之间的启动延迟1秒(5用户/ 5秒= 1用户每秒)。 如果将值设置为0,那么JMeter将立即启动所有的用户。

最后进入循环计数字段的值是2。 这个属性告诉JMeter重复你的测试多少次。 如果进入循环计数值为1,那么JMeter将运行您的测试只有一次。 JMeter不停的运行你的测试计划,选择“永远”复选框。

在大多数应用中,你必须手动接受你在控制面板中的变化。 然而,在JMeter,控制面板会自动接受您的更改,当你做了。 如果你改变一个元素的名称,树将被更新,新的文本,在你离开的控制面板(例如,选择另一个树元件时)。

参见图5.2完成雅加达用户线程组。


图5.2。 雅加达用户线程组
5.2添加默认的HTTP请求属性

现在我们已经定义了我们的用户,它是时间来定义的,他们将要执行的任务。 在本节中,您会指定您的HTTP请求的默认设置。 然后,在第5.3节,你将添加使用一些您在此处指定的默认​​设置的HTTP请求的元素。

首先选择在雅加达的用户(线程组)元素。 点击鼠标右键得到添加菜单,然后选择添加 - >配置元件 - > HTTP请求默认值。 然后,选择这个新元素,以查看它的控制面板(见图5.3)。


图5.3。 HTTP请求默认值

大多数JMeter元件一样, HTTP请求默认值控制面板有一个名称字段,您可以修改。 在这个例子中,此字段的默认值。

跳转到下一个字段,这是Web服务器的服务器名称/ IP。 您正在构建的测试计划,所有的HTTP请求将被发送到同一个Web服务器,jakarta.apache.org。 输入这个域名进入这个领域。 这是唯一的领域,我们将指定一个默认的,所以离开它们的默认值中的其余字段。

HTTP请求默认值的元素不告诉JMeter发送一个HTTP请求。 它简单地定义HTTP请求元素所使用的默认值。

完成HTTP请求默认值元素,参见图5.4


图5.4。 我们的测试计划中的HTTP的默认值
5.3添加cookie支持

几乎所有的网络测试应该使用cookie的支持,除非您的应用程序特别是不使用cookies。 若要添加cookie的支持,只需添加一个HTTP Cookie管理器每个线程组,在您的测试计划。 这将确保每个线程都有它自己的的饼干,但在所有共享的 HTTP请求对象。

要添加HTTP Cookie管理器 ,只需选择线程组 ,并选择添加- >配置元件- > HTTP Cookie管理器,从“编辑”菜单,或者从右键单击弹出菜单。

5.4添加HTTP请求

在我们的测试计划中,我们需要两个HTTP请求。 第一个是雅加达主页(http://jakarta.apache.org/),第二个是项目指南页(http://jakarta.apache.org/site/guidelines.html)。

JMeter的发送请求的顺序,他们在树中出现的。

雅加达用户元素加入的第一个HTTP请求 (添加- >取样器- > HTTP请求)开始。 然后,选择HTTP请求树中的元素,并编辑以下属性(见图5.5):

  1. 更改名称“字段中的”主页“。
  2. “路径”字段设置“/”。 请记住,你没有设置服务器名称“字段中,因为你已经在HTTP请求默认值元素指定此值。

图5.5。 雅加达主页HTTP请求

下一步,添加第二个HTTP请求,并编辑以下属性(见图5.6:

  1. 更改名称“字段中,以”项目指南“。
  2. “路径”字段设置“/网站/ guidelines.html的”。

图5.6。 HTTP请求雅加达项目指南
5.5添加一个监听器来查看存储的测试结果

最后一个元素,你需要添加到您的测试计划一个监听器。 此元素是负责储存所有你在一个文件中的HTTP请求的结果,并提出了数据的可视化模型。

选择雅加达用户元素,并添加一个图形结果监听器(添加- >监听器- >图形结果) 。 接下来,您需要指定输出文件的目录和文件名。 您可以键入文件名域,或选择“浏览”按钮,浏览到一个目录,然后输入文件名。


图5.7。 图形结果监听器
5.6记录一个网站

这不是这里的情况,但一些Web站点要求您登录后才允许您执行某些操作。 在网络浏览器,登录将显示为一个用户名和密码的形式,和一个按钮来提交表单。 按钮生成一个POST请求,表单项目的值作为参数传递。

要做到在JMeter中,添加一个HTTP请求,并设置为POST方法。 你需要知道使用的字段的形式,和目标页面的名称。 这些都可以发现,通过检查的登录页面的代码。 [如果这是很难做到的的,你可以使用JMeter的代理记录,记录登录序列。]将路径设置为“提交”按钮的目标。 两次单击“添加”按钮,输入用户名和密码的详细信息。 有时登录表单包含额外的隐藏字段。 这些都需要以及无以复加。


图5.8。 范例HTTP登陆请求