完整的JMETER使用手册适合初学者

上传人:无*** 文档编号:122410345 上传时间:2022-07-20 格式:DOC 页数:78 大小:1.47MB
收藏 版权申诉 举报 下载
完整的JMETER使用手册适合初学者_第1页
第1页 / 共78页
完整的JMETER使用手册适合初学者_第2页
第2页 / 共78页
完整的JMETER使用手册适合初学者_第3页
第3页 / 共78页
资源描述:

《完整的JMETER使用手册适合初学者》由会员分享,可在线阅读,更多相关《完整的JMETER使用手册适合初学者(78页珍藏版)》请在装配图网上搜索。

1、JMETER中文手册分享1.简介Apache JMeter是100%纯java桌面应用程序,被设计用来测试C/S结构的软件(例如web应用程序)。它可以用来测试包括基于静态和动态资源程序的性能,例如静态文件,Java Servlets,Java对象,数据库,FTP服务器等等。JMeter可以用来在一个服务器、网络或者对象上模拟重负载来测试它的强度或者分析在不同的负载类型下的全面性能。另外,JMeter能够通过让你们用断言创建测试脚本来验证我们的应用程序是否返回了我们期望的结果,从而帮助我们回归测试我们的程序。为了最大的灵活性,JMeter允许我们使用正则表达式创建断言。1.1 历史Apache

2、软件组织的Stefano Mazzocchi是JMeter的创始人。他编写它起初是为了测试Apache JServ的性能(一个已经被Apache Tomcat工程所替代的工程)。我们重新设计JMeter来增强用户界面并增加功能测试的能力。1.2 未来我们希望看到作为开发者利用它的可插入架构使JMeter的功能快速扩展。未来发展的主要目标是在没有影响JMeter的负载测试能力的情况下尽可能使JMeter成为最实用的回归测试工具。2.入门开始使用JMeter最容易的方法是首先下载最新版并且安装它。这个版本包含所有你在构建和运行Web,FTP,JDBC,和JNDI等测试时使用需要的所有文件。如果你想

3、执行JDBC测试,你当然需要从供应商得到适当的JDBC驱动。JMeter没有提供任何JDBC驱动。你可能需要下载的其它软件:BeanShell - BeanShell函数和测试元件需要Java Activation Framework - JavaMail需要Java Mail - Mail可视化,Mail Reader 和 WebService(SOAP)取样器需要JMS - JMS取样器需要下一步, 开始使用JMeter并且参见用户手册创建一个测试计划一章使自己更加熟悉JMeter基础(例如,添加和删除元件)。最后, 参见如何构建一个明确类型的测试用例的适合章节。例如,如果你对Web应用测

4、试感兴趣,那就参见创建一个Web测试计划。其他具体的测试计划章节是:高级Web测试计划、JDBC、FTP、JMS 点到点、JMS 主题、LDAP2.1 需求JMeter 需要最小需求的运行环境。2.1.1 Java版本JMeter需要一个完全适当的JVM1.4或者更高因为JMeter 仅使用Java标准API, 请不要把因为JRE实现版本而无法运行JMeter的bug报告提交。2.1.2 操作系统JMeter是100%纯Java应用程序并且能够正确的在任何有适当的Java实现的操作系统上运行。JMeter 在下列环境已经被测试:Unix(Solaris, Linux, 等)、Windows (

5、98, NT, 2000, xp)、OpenVMS Alpha 7.3+2.2 可选如果你计划做JMeter开发或者想使用SUN的java标准扩展包,你将需要下列更多的可选包。2.2.1 Java编译器如果你想编译JMeter源代码或者开发JMeter插件,你将需要一个完整的适当的JDK1.4或者更高。2.2.2 SAX XML解析器JMeter 使用 Apache的 Xerces XML解析器,你可以选择告诉JMeter使用一个不同的XML解析器。这样做,把第三方的解析器的类包包含在JMeter的classpath中, 并更新 jmeter.properties 文件里的解析器实现的全类名。

6、2.2.3 Email支持JMeter有有限的Email能力。 它能够发送基于测试结果的Email,并且支持POP/IMAP 取样器。它现在不支持SMTP取样。为了能够支持Email, 需要添加Sun的JavaMail包和activation包到JMeter classpath 。2.2.4 SSL加密为了测试一个使用SSL加密(HPPS)的web服务器, JMeter 需要一个提供SSL实现(例如 Sun的Java Secure Sockets Extension - JSSE)。包含需要的加密包到JMeter的classpath。 同样,通过注册SSL提供者更新system.propert

7、ies文件。JMeter默认协议等级TLS(传输层安全性)。这可以通过修改在jmeter.proerties或者user.properties文件中的https.default.protocol来改变。JMeter被配置接受所有的证书,不管是否信赖和合法时间等。这允许在测试服务器最大灵活性。如果服务器需要一个客户端证书,这是可以提供的。为了更好的管理证书,也要有一个SSL管理器 。2.2.5 JDBC驱动如果你需要JDBC测试,需要添加厂商的JDBC驱动到classpath。确认文件是一个jar文件,而不是zip。2.2.6 Apache SOAPApache SOAP需要mail.jar和a

8、ctivation.jar.你需要下载并拷贝这两个jar文件到你jmeter/lib 目录.一旦文件放到那里,JMeter 会自动找到它们。2.2.7 BeanShell为了运行BeanShell函数或者任何BeanShell测试元件(取样器,定时器等),你需要从http:/www.beanshell.org/下载beanshell的jar文件并拷贝jar文件到jmeter/lib目录,JMeter会自动找到它。2.2.8 ActiveMQ 3.0类库详细参见 http:/activemq.apache.org/initial-configuration.html详细参见JMeter Clas

9、spath 一章安装附加的jar包2.3 安装我们推荐大多数用户运行最新版本。要安装一个构建版本,简单解压zip/tar文件到你想安装JMeter的目录。保证一个JRE/JDK正确的安装并且设置环境变量JAVA_HOME,其它不需要做什么了。安装目录接口应该看到的像这样一些东西(2.3.1版本):jakarta-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/

10、ext jakarta-jmeter-2.3.1/lib/junit jakarta-jmeter-2.3.1/printable_docs如果你想的话你可以重命名父目录(例如 jakarta-jmeter-2.3.1) ,但是不要改变任何子目录命。父目录路径中不能包含任何空格;如果包含,你运行客户端-服务器模式会有问题。2.4 运行JMeter要运行JMeter, 运行jmeter.bat (for Windows)或者jmeter (for Unix) 文件。那些文件在bin目录下。稍微暂停后,JMeter GUI会显示出来。在bin目录你会发现有些附加脚本很有用。Windows脚本文件(

11、CMD文件需要Win2K或者更新):jmeter.bat - 运行JMeter(默认在GUI模式)jmeter-n.cmd - 使用一个JMX文件运行非GUI测试jmeter-n-r.cmd - 使用一个JMX文件远程运行一个非GUI测试jmeter-t.cmd - 在GUI模式使用一个JMX文件jmeter-server.bat - 以服务器模式启动JMeter注意: LAST可以在jmeter-n.cmd, jmeter-t.cmd 和 jmeter-n-r.cmd中使用,意味着最后一次测试会运行.Unix脚本文件可以运行在大多Linux/Unix系统.jmeter - 运行JMeter(

12、默认在GUI模式)jmeter-server - 以服务器模式启动JMeter2.4.1 JMeter ClasspathJMeter 自动从下列目录中的jar文件发现类。JMETER_HOME/lib - 用来放使用的jar文件JMETER_HOME/lib/ext - 用来放JMeter组件和扩展如果你开发新的JMeter组件,你可以压缩它们成jar包并拷贝到JMeter的/lib/ext目录。JMeter将会自动发现在这里的任何jar文件中的JMeter组件。支持的jar文件(类库)应该放在lib目录.如果你不想把扩展jar包放到lib/ext目录,可以在jmeter.propertie

13、s中定义search_paths属性。不要使用lib/ext给那些公用的jar包;它仅仅是存放JMeter组件。其他jar包(例如JDBC, 和任何JMeter代码需要支持的类库)应该被代替放在lib目录 ,而不是lib/ext目录。你可以在$JAVA_HOME/jre/lib/ext安装有用的jar文件,或者(自从2.1.1版本)你可以在jmeter.properties中设置user.classpath属性。注意设置CLASSPATH环境变量将不起作用。这是因为JMeter 使用java -jar启动,并且java命令无记录忽略CLASSPATH变量,并且当使用-jar选项时-classp

14、ath/-cp选项也被使用。2.4.2 使用代理服务器如果你从防火墙/代理服务器后测试,你需要提供给JMeter防火墙/代理服务器的主机名和端口号。这样做,从命令行使用以下参数运行jmeter.bat/jmeter文件: -H 代理服务器主机名或者ip地址-P 代理服务器端口-N 非代理主机 (例如:*.apache.org|localhost)-u 代理证书用户名- 如果需要-a 代理证书密码 - 如果需要例如 : jmeter -H my.proxy.server -P 8000 -u username -a password -N localhost或者, 你使用 -proxyHost,

15、 -proxyPort, -username, and -passwordJMeter也有自己的内建HTTP代理服务器,来记录HTTP(不是 HTTPS)浏览器会话。这是和上面的代理设置描述不混淆的,它是在JMeter发出HTTP或者HTTPS请求时使用的。2.4.3 非用户界面模式(命令行模式)为了不相互影响测试, 你可以选择运行没有用户界面的JMeter。这样做,使用下列命令选项:-n 这是指定JMeter在非用户界面模式运行-t 包含测试计划的JMX文件的名字-l 记录取样结果的JTL文件的名字-r 运行在jmeter.properties文件里所有的远程服务器 (或者通过在命令行覆盖属

16、性指定远程服务器)这个脚本也允许我们指定可选的防火墙/代理服务器信息:-H 代理服务器主机名或者ip地址-P 代理服务器端口例如 : jmeter -n -t my_test.jmx -l log.jtl -H my.proxy.server -P 80002.4.4 服务器模式为了分布测试,在服务器模式运行JMeter,并且通过用户界面控制每一台服务器。jmeter-server/jmeter-server.bat 脚本使用适当的classpath为你开始远程注册。如果失败,参见关于JMeter服务器启动细节。运行jmeter-server/jmeter-server.bat,加上下列选项命

17、令:这个脚本也允许我们指定可选的防火墙/代理服务器信息:-H 代理服务器主机名或者ip地址-P 代理服务器端口例如 : jmeter-server -H my.proxy.server -P 80002.4.5 通过命令行覆盖属性Java系统属性,JMeter属性,和日志属性可以通过命令行直接覆盖(代替更改jmeter.properties文件)。这样做,使用下列选项:-Dprop_name=value - 定义一个java系统属性值。-Jprop name=value - 覆盖一个JMeter属性。-Lcategory=priority - 覆盖一个日志设置,设置一个特殊目录为给定的优先级。

18、-L 标志也可以使用没有目录名来设置根目录日志等级。例如 :jmeter -Duser.dir=/home/mstover/jmeter_stuff -Jremote_hosts=127.0.0.1 -Ljmeter.engine=DEBUGjmeter -LDEBUG注意:命令行参数在启动时较早被处理,但是在日志系统被设置以后。尝试使用-J标志更新log_level或者log_file属性无效。2.4.6 日志和错误信息如果JMeter发现一个错误, 一个消息将被写入日志文件。日志文件名在jmeter.properties文件中定义。一般定义为jmeter.log 。并且在JMeter启动目

19、录,例如bin。当在Windows下运行时,如果你不设置Windows显示文件扩展名,文件名会仅显示为 JMeter。还有记录错误,jmeter.log 文件记录一些测试运行信息。例如:10/17/2003 12:19:20 PM INFO - jmeter.JMeter: Version 1.9.2003100210/17/2003 12:19:45 PM INFO - jmeter.gui.action.Load:Loadingfile:c:mytestfilesBSH.jmx10/17/2003 12:19:52 PM INFO - jmeter.engine.StandardJMete

20、rEngine: Running the test!10/17/2003 12:19:52 PM INFO - jmeter.engine.StandardJMeterEngine: Starting 1 threads for group BSH. Ramp up = 1.10/17/2003 12:19:52 PM INFO - jmeter.engine.StandardJMeterEngine: Continue on error10/17/2003 12:19:52 PM INFO - jmeter.threads.JMeterThread: Thread BSH1-1 starte

21、d10/17/2003 12:19:52 PM INFO - jmeter.threads.JMeterThread: Thread BSH1-1 is done10/17/2003 12:19:52 PM INFO - jmeter.engine.StandardJMeterEngine: Test has ended日志文件对发现错误原因很有帮助,作为JMeter不会打断一个测试来显示一个错误对话框。2.4.7 命令行选项目录调用JMeter的jmeter -?命令将打印所有命令选项的一个列表。列表如下:-h,-help打印使用信息并退出-v, -version打印版本信息并推出-p, -

22、propfile argument使用的JMeter属性文件-q, -addprop argument附加的属性文件-t, -testfile argument运行的JMeter测试文件(.jmx)-l, -logfile argument日志取样文件-n, -nongui 非用户界面运行JMeter-s, -server 运行JMeter服务器-H, -proxyHost argument设置JMeter使用的代理服务器-P, -proxyPort argument设置JMeter使用的代理服务器端口-u, -username argument设置JMeter使用的代理服务器用户名-a, -

23、password argument设置JMeter使用的代理服务器密码-J, -jmeterproperty argument=value定义附加的 JMeter 属性-D, -systemproperty argument=value定义附加的 System 属性-S, -systemPropertyFile filename一个属性文件被做为系统属性添加-L, -loglevel argument=value定义日志等级: category=level例如 jorphan=INFO or jmeter.util=DEBUG-r, -runremote从非用户界面模式启动远程服务器-d, -

24、homedir argument 使用的JMeter目录2.5 配置JMeter如果你希望改变JMeter运行时的属性你需要改变在/bin目录下的jmeter.properties文件,或者创建你自己的jmeter.properties文件并且在命令行指定它。注意:自从2.1.2,你能够通过JMeter属性user.properties在文件中定义附加的JMeter属性,user.properties默认值是user.properties。如果在当前目录被发现,这个文件被自动加载。类似的,system.properties被用来更新系统属性。参数:属性描述ssl.provider你可以为你的S

25、SL实现指定类。如果你想使用来自sun的JSSE,是这样:.ssl.Internal.ssl.Provider。JMeter默认提供https支持。如果你正在使用JDK1.4, 或者你使用带JSSE类的jar文件在JMeter的classpath里的JDK1.4。 C.ssl.internal.ssl.ProviderJMeter默认提供https支持是在你使用JDK1.4或者你使用把JSSE类的jar包放到JMeter classpath中的JDK1.3时候。 xml.parser你可以指明一个你的XML解析器实现。默认值是:org.apache.xerces.parsers.SAXPars

26、er remote_hosts逗号分割远程JMeter主机列表。如果你在一个分布式环境运行JMeter,列出你用JMeter远程主机运行的机器。这允许你使用机器的用户界面控制那些服务器。 not_in_menu在JMeter选项屏中你不想看到的组件列表。如果JMeter被添加越来越多的组件,你会希望定制JMeter只出现那些你感兴趣的组件。你可以在这儿列出那些类名和他们的类标签(JMeter的用户界面出现的字符串),它们将在选项屏中不出现。 search_paths列出那些JMeter搜索JMeter附加类的路径(以;分割);例如附加的取样器。被添加到lib/ext目录的任何jar包都被发现。

27、 user.classpathJMeter搜索的公用类库的路径列表。被添加到lib目录的任何jar包都被发现。 user.properties附加的JMeter属性文件名。 初始化属性文件后它们被添加,但是在-q和-J选项被处理之前。 system.properties附加的系统属性文件名。 -S和-D选项被执行前添加。 3. 创建一个测试计划一个测试计划描述了一系列Jmeter运行时要执行的步骤。一个完整的测试计划包含一个或者多个线程组,逻辑控制器,取样发生控制,监听器,定时器,断言和配置元件。3.1 添加和删除元件在一个树上通过右击可以添加元件到一个测试计划 ,并且从添加列表中选择一个新元

28、件。另外,元件可以从文件加载并且通过选择打开选项添加。为了删除元件,确保元件被选中,正确在元件上右击,并且选择删除选项。3.2 加载和保存元件为了从文件加载元件,右击将要加载元件到的已经存在的树元件,并选择打开选项。选择你的元件保存的文件。JMeter会加载元件到树中。为了保存树元件,在一个元件上右击,选择保存选项。JMeter会保存已选的元件,加上所有下面的子元件。用这种方法,你能够保存测试树的片段,单独元件,或者整个测试计划。3.3 配置树元件在测试树中的任何元件都在JMeter的右侧框架显示配置。那些配置允许你配置测试元件的细节行为,对于一个元件什么能被配置依赖于它是一个什么类型的元件。

29、3.4 保存测试计划虽然这不是必须的,我们推荐你在运行前保存测试计划。为了保存测试计划,从文件菜单选择保存测试计划(使用最新版本,你不再需要首先选择测试计划元件)。JMeter允许你保存整个测试计划树或者仅它的一部分。为了仅保存测试计划树中特殊支位置的元件,从从这个支开始的地方选择树中的测试计划元件,然后右击鼠标访问保存菜单项。另外选择合适的测试计划元件并从编辑菜单选择保存。3.5 运行一个测试计划为了运行一个测试计划,从运行菜单项选择开始。为了停止你的测试计划,从同样的菜单选择停止。JMeter不会自动给它是否正在运行任何显示。如果JMeter运行,一些监听器使它变明显,但是唯一确定的方法是

30、检查运行菜单。如果开始不可用,停止 可用,证明JMeter正在运行你的测试计划(或者至少它认为它是)。有两个类型的停止命令:停止(Control + .)- 立刻停止所有的线程关闭(Control + ,)- 请求所有线程在当前任务结束后停止3.6 元件作用域及执行顺序3.6.1 作用域规则JMeter中共有8类可被执行的元件(测试计划与线程组不属于元件),这些元件中,取样器是典型的不与其它元件发生交互作用的元件,逻辑控制器只对其子节点的取样器有效,而其它元件(configelements、timers、post-processors、assertions、listeners、)需要与取样器(

31、sampler)等元件交互。配置元件(configelements):元件会影响其作用范围内的所有元件。前置处理程序(Per-processors):元件在其作用范围内的每一个sampler元件之前执行。定时器(timers):元件对其作用范围内的每一个sampler有效后置处理程序(Post-processors):元件在其作用范围内的每一个sampler元件之后执行。断言(Assertions):元件对其作用范围内的每一个sampler元件执行后的结果执行校验。监听器(Listeners):元件收集其作用范围的每一个sampler元件的信息并呈现。在jmeter中,元件的作用域是靠测试计划

32、的的树型结构中元件的父子关系来确定的,作用域的原则是:取样器(sampler)元件不和其它元件相互作用,因此不存在作用域的问题。逻辑控制器(LogicController)元件只对其子节点中的取样器和逻辑控制器作用。除取样器和逻辑控制器元件外,其他6类元件,如果是某个sampler的子节点,则该元件公对其父子节点起作用。除取样器和逻辑控制器元件外的其他6类元件,如果其父节点不是sampler,则其作用域是该元件父节点下的其他所有后代节点(包括子节点,子节点的子节点等)。3.6.2 元件的执行顺序了解了元件有作用域之后,来看看元件的执行顺序,元件执行顺序的规则很简单,在同一作用域名范围内,测试计

33、划中的元件按照如下顺序执行。(1)配置元件(configelements)(2)前置处理程序(Per-processors)(3)定时器(timers)(4)取样器(Sampler)(5)后置处理程序(Post-processors)(除非Sampler得到的返回结果为空)。(6)断言(Assertions)(除非Sampler得到的返回结果为空)。(7)监听器(Listeners)(除非Sampler得到的返回结果为空)。关于执行顺序,有三点需要注意:*前置处理器、后置处理器和断言等元件只能对取样器作用,因此如果在它们的作用域内没有任何取样器,则不会被执行。*如果在同一作用域范围内有多个同一

34、类型的元件,则这些元件按照它们在测试计划中的上下顺序依次执行。* 一个断言在测试树中是分等级的。如果它的父元件是请求,它就被应用于那个请求。如果它的父元件是控制器,它就影响所有那个控制器下的所有请求。请求的顺序是 One,Two,Three,Four。一些控制器影响它的子元件的顺序,你可以在组件参考读到特定的控制器。Assertion #1仅被应用于请求One,Assertion #2仅被应用于请求Two和Three。在这个例子里,请求的命名表现它们被执行的顺序。Timer #1应用于请求Two,Three,和Four(注意对于分等级的元件怎样的顺序是不相关的)。Assertion #1应用于

35、请求Three。Timer #2对所有请求有效。元件首部管理器,Cookie管理器和授权管理器的配置和默认元件的配置被视为是不同的默认元件配置的设置被并入取样器可以到达的一组值里了。然而来自管理器的设置没有并入。如果多于一个管理器在一个取样器范围中,仅仅一个被使用,但是现在没有办法指定那个被使用。3.7 错误报告JMeter把警告和错误信息报告在jmeter.log文件中,也有一些测试运行本身的信息.只是偶尔地,JMeter对于某些错误是无法补捉和记录的,这些信息会显示在命令台上。如果一个测试的执行并不是你所期待的,请检查日志,也许错误会被报告(例如:也许在函数调用上有语法错误)。取样错误(例

36、如:HTTP 404 -找不到文件)是不会被正常的记录在日志中的,取而代之的,他们会被当作取样结果的属性来储存,取样结果的状态能被许多不同的监听器所得到。4. 测试计划元件测试计划对象有一个叫做功能测试复选框。如果被选择,它会使JMeter记录来自服务器返回的每个取样的数据。如果你在测试监听器中选择一个文 件,这个数据将被写入文件。如果你尝试一个较小的测试来保证JMeter配置正确并且你的服务器正在返回期望的结果,这是很有用的。这样的后果就是这个文 件会快速的增大,并且JMeter的效率会影响。如果你不做压力测试这个选项应该关闭(默认关闭)。如果你不记录数据到文件,这个选项就没有不同了。4.1

37、 线程组线程组元件是任何测试计划的起点。一个测试计划的所有元件必须在一个线程组下。由名字可以看出,线程组元件控制JMeter运行测试时使用的线程数。线程组管理允许你:设置线程数设置ramp-up period设置执行测试的次数每个线程会作为一个整体执行测试计划并完全独立于他测试线程。多线程用来模拟到达服务器程序的同步连接。 Ramp-up period告诉JMeter多久开始ramp-up选择的全部线程。如果使用10个线程,ramp-up period是100秒,那么JMeter用100秒使所有10个线程启动并运行。每个线程会在上一个线程启动后10秒(100/10)启动。如果有30 个线程和一

38、个120秒的ramp-up period,那么每个连续的线程会延迟4秒。Ramp-up需要要充足长以避免在启动测试时有一个太大的工作负载,并且要充足小以至于最后一个线程在第一个完成前启动(除非你想那样发生)。 使用ramp-up=线程数启动,并上下调整到所需的。默认,线程组被配置仅循环一次。 1.9版本引入了一个测试运行*调度器*。 单击在线程组面板底部的复选框来显示额外的文本域,在里面你可以输入启动和结束时间。当测试启动时,如果必须JMeter会等待启动时间到达。在每个周期 结束,JMeter检验结束时间是否到达,如果是,运行停止,如果不是测试被允许继续,直到迭代限制到达。另外你可以使用启动

39、延迟和持续时间文本域。注意启动延迟会覆盖启动时间,持续时间会覆盖结束时间。 4.2控制器JMeter有两种控制器:取样器和逻辑控制器。取样器告诉JMeter发送请求到服务器。例如,如果你要JMeter发送一个HTTP请求添加一个HTTP请求取样器。你也可以通过添加一个或者多个配置元件到一个取样器来定制一个请求。更多信息,见取样器。逻辑控制器让你定制当发送请求时JMeter使用的判断逻辑。例如,你可以添加交替控制器来在两个HTTP请求取样器之间交替 。更多信息,见逻辑控制器。4.2.1 取样器(Sampler)取样器告诉JMeter发送请求到服务器。JMeter取样器包括:FTP 请求HTTP

40、请求JDBC 请求Java object 请求LDAP 请求SOAP/XML-RPC 请求WebService (SOAP) 请求每个取样器有一些你可以设置的属性。你可以通过添加一个或多个配置元件到取样器来进一步定制它。注意JMeter发送请求按照取样器出现在树中的顺序。 如果你想发送多个相同类型的请求(例如,HTTP Request)到相同的服务器,可以考虑使用一个默认配置元件。每个控制器有一个或者多个默认配置元件(见下)。 记得添加一个监听器到线程组来查看/保存你的请求结果到磁盘。如果你对使用JMeter平台的基础验证器到你的请求响应感兴趣,添加一个断言到请求控制器。例如, 在压力测试一个

41、web程序时,服务器会返回一个成功的HTTP响应代码,但是这个页面有错误或者被忽略部分。你可以添加断言来检查某个HTML标签,一些 错误字符串,等等。JMeter允许你使用正则表达式创建断言。JMeter 內建取样器4.2.2 逻辑控制器保持逻辑控制器让你定制当发送请求时JMeter使用的判断逻辑。逻辑控制器还可以作为下列任何元件的子元件:取样器(请求)、配置元件、和其他逻辑控制器。逻辑控制器可以改变来自它们的子元件的请求顺序。它们可以修改请求本身,导致JMeter重复请求,等。理解逻辑控制器在测试计划中的效果,考虑下列测试树:测试计划 线程组 仅一次控制器 登录请求(一个HTTP请求)加载搜

42、索页面(HTTP取样器)Interleave Controller 搜索A(HTTP取样器)搜索B(HTTP取样器)HTTP默认请求(配置元件)HTTP默认请求(配置元件)Cookie管理器(配置元件)这个测试的第一件事就是登录请求仅在第一次经过时被执行。随后的迭代会忽略它。这应使用仅一次控制器。登陆后,下一个取样器加载搜索页面( 假设一个用登录的web应用程序,并到达搜索页面去搜索)。这仅是一个简单的请求,不会被任何逻辑控制器过滤。加载搜索页面后,我们要做一个搜索。事实上,我们想做两个不同的搜索。然而,在每个搜索之间我们想要自己重新加载搜索页面。我们通过4个简单 HTTP元件这样做。(loa

43、d search, search A, load search, search B). Instead, we use the Interleave Controller which passes on one child request each time through the test. It keeps the ordering (ie - it doesnt pass one on at random, but remembers its place) of its child elements. Interleaving 2 child requests may be overki

44、ll, but there could easily have been 8, or 20 child requests.注意HTTP默认请求属于插入控制器。假如Search A和Search B共享同样的PATH信息(一个HTTP请求说明中包括域,端口,方法,协议路径和参数,附加其他可选项)。两个搜索请求访问同样的后端搜索引擎(比方 说Servle,或者cgi脚本),这样是说得通的。与其两者都配置使用相同信息的HTTP取样器,我们可以抽象那些新到一个单独的配置元件。当内部控制 器通过Search A或者Search B传递时,它会从HTTP默认请求配置元件中获得值填充空白。所以我们可以为那些

45、请求保留PATH域为空,然后把那些信息放到配置元件。在这个例子中, 这至多是一个很小的好处,但它显示了这个特性。在这个树中下一个元件是另一个HTTP默认请求,这个时间被添加到线程组本身。这个线程组有一个内建的逻辑控制器,因此它正好使用这个配置元件做为 上面的描述。它填充任何穿过的请求的空白。 在web程序中你所有的HTTP取样器元件DOMAIN域为空,这是极度有用的,替代的,把那些信息放到HTTP默认请求元件中,添加到线程组。通过这样 做,你可以在一个同的服务器通过改变你测试计划中的一个域来测试你的程序。另外,你必须编辑每个取样器。最后一个元件是一个HTTP Cookie管理器。一个Cooki

46、e管理器应该添加到所有web测试上-否则JMeter会忽略Cookie。通过在线程组级添加它,我们可以确定所有的线程分享同样的Cookie。逻辑控制器可以组合达到不同的结果。见内建逻辑控制器列表。 4.3 监听器监听器提供访问JMeter收集当JMeter运行的关于测试计划的信息。图形结果监听器在一张图上绘制响应时间。查看结果树监听器显示了请求和响应取样器的细节,并且以基础的HTML和XML显示响应表现。其他监听器提供了摘要或者集合信息。另外,监听器可以指导它们收集的数据到一个文件供以后用。在JMeter中每一个监听器提供一个域来指出存储数据的文件。在测试中监听器可以添加到任何位置。它们仅仅会

47、从它们等级或者它们以下等级的元件收集数据。伴随JMeter有很多有趣的监听器。4.4 定时器默认,JMeter线程发送请求时不在请求间暂停。我们建议你通过添加一个可用的定时器到你的线程组来指定一个延迟。如果你不添加延迟,JMeter会在短时间内产生太多请求,可能会压倒你的服务。 定时器会使JMeter在一个线程开始每个请求间延迟一段时间。如果你选择添加多于一个定时器到一个线程组,JMeter会在执行取样器前获得定时器数量并暂停那个时间量。4.5 断言断言允许你断言关于从测试服务器收到的响应的行为。使用断言你本质上你可以测试你的应用程序返回你期望的结果。 例如,你可以断言一个查询的响应会包含一些

48、特殊的文本。你指定的文本可能是Perl风格的正则表达式, 并且你可以指出这个响应是包含这个文本,还是匹配整个响应。你可以添加一个断言到任何取样器。例如你可以添加一个断言到HTTP请求检查文本。JMeter会检查在HTTP响应中表现的文本。如果JMeter没有找到这个文本,它会标记这个为一个失败的请求。为了查看断言结果,添加一个断言监听器到线程组。Assertion-断言,通常是用于对每一个request sampler进行额外验证的工具。下面通过一个例子来介绍一下常用的几个Assertions。假设现在要进行一个登陆的压力测试,下面是对pass的几个定义:1.正确login后,必须收到返回的身

49、份验证和用户个人信息下载的完成信息;2.响应时间不能超过150毫秒3.返回的结果大小不能小于750bytes根据以上的要求,我们在对应的request sampler下面添加了以下的Assertions。A.Response AssertionResponse Field to Test - 标示被检查对象是什么?Pattern Matching Rules - 标明被检查对象与验证内容之间的关系,Contains(包含关系);Matches(匹配关系);Equals(相等关系);Not(非关系)Pattern to Test - 需要验证的内容列表B.Duration AssertionDu

50、ration to Assert - 允许的响应时间的最大值C.Size AssertionSize to Assert - 对于返回结果文件大小的标准定义二、结果分析添加了以上的Assertions后,我运行了一次脚本。以下是存放结果的.jtl文件的内容:timeStamp,elapsed,label,responseCode,responseMessage,threadName,dataType,success,failureMessage,bytes,Latency11/04/08 13:22:03,172,Do Login,200,OK,Thread Group 1-1,text,fa

51、lse,The operation lasted too long: It took 172 milliseconds, but should not have lasted longer than 150 milliseconds.,835,17211/04/08 13:22:03,156,Do Login,200,OK,Thread Group 1-2,text,false,Test failed: text expected to contain /loginMsg=OK/,633,15611/04/08 13:22:03,156,Do Login,200,OK,Thread Group

52、 1-3,text,false,The operation lasted too long: It took 156 milliseconds, but should not have lasted longer than 150 milliseconds.,839,15611/04/08 13:22:03,156,Do Login,200,OK,Thread Group 1-4,text,false,The operation lasted too long: It took 156 milliseconds, but should not have lasted longer than 1

53、50 milliseconds.,836,15611/04/08 13:22:03,78,Do Login,200,OK,Thread Group 1-5,text,true,779,7811/04/08 13:22:03,63,Do Login,200,OK,Thread Group 1-7,text,false,Test failed: text expected to contain /loginMsg=OK/,570,6311/04/08 13:22:03,141,Do Login,200,OK,Thread Group 1-6,text,false,The result was th

54、e wrong size: It was 721 bytes, but should have been greater than 750 bytes.,721,14111/04/08 13:22:03,78,Do Login,200,OK,Thread Group 1-9,text,false,The result was the wrong size: It was 724 bytes, but should have been greater than 750 bytes.,724,7811/04/08 13:22:03,204,Do Login,200,OK,Thread Group

55、1-10,text,false,The operation lasted too long: It took 204 milliseconds, but should not have lasted longer than 150 milliseconds.,1137,20411/04/08 13:22:03,2985,Do Login,200,OK,Thread Group 1-8,text,false,Test failed: text expected to contain /loginMsg=OK/,570,2985我们可以看到,每一个Sampler都会经过Assertions的判断,

56、只要有一个不符合条件的都会标示为False。4.6 配置元件配置元件配合取样器工作。虽然它不发送请求(除了HTTP代理服务器),但是它可以添加或者修改请求。一个配置元件进能访问有所代替元件所在的树分支的内部。例如,如果你在一个简单逻辑控制器里面设置一个HTTP Cookie管理器,Cookie管理器很容易访问web Page 1和web Page 2HTTP请求。但是不能访问web Page 3。 同样,一个在树枝内部的配置元件比在父支的同样元件有更高的优先级。例如,我们定义两个HTTP默认请求元件,Web Defaults 1和Web Defaults 2。 如果我们把Web Default

57、s 1放置在一个循环控制器内部,仅Web Page 2可以访问它。另一HTTP请求会使用Web Defaults 2,如果我们把它放置在线程组 (所有其他分支的父支)。图 1 - 测试计划展示配置元件的可达性4.7 前置处理器元件前置处理器在取样器请求建立前执行一些行为。如果前置处理器附属于取样器元件,那么它会仅在那个取样器元件运行前执行。前置处理器最常用来在取样请求运行前修改它的设置,或者更新不能从响应文本提取的变量。 当前置处理器执行时,详细信息见作用域规则。4.8 后置处理器元件 后置控制器在取样器请求建立后执行一些行为。如果后置处理器附属于取样器元件,那么它会仅在那个取样器元件运行后执

58、行。后置处理器最常用来处理响应数据,常用来从它里面提取数值。详细见作用域规则关于前置处理器执行。4.9 执行顺序配额制元件前置处理器定时器取样器后置处理器 (如果SampleResult不为空)断言 (如果SampleResult不为空)监听器 (如果SampleResult不为空)Please note that Timers, Assertions, Pre- and Post-Processors are only processed if there is a sampler to which they apply. Logic Controllers and Samplers are

59、 processed in the order in which they appear in the tree. Other test elements are processed according to the scope in which they are found, and the type of test element. Within a type, elements are processed in the order in which they appear in the tree. For example, in the following test plan:Contr

60、oller Post-Processor 1Sampler 1Sampler 2Timer 1Assertion 1Pre-Processor 1Timer 2Post-Processor 2The order of execution would be:Pre-Processor 1Timer 1Timer 2Sampler 1Post-Processor 1Post-Processor 2Assertion 1Pre-Processor 1Timer 1Timer 2Sampler 2Post-Processor 1Post-Processor 2Assertion 14.10 Prope

61、rties and VariablesJMeter properties are defined in jmeter.properties (see Gettting Started - Configuring JMeter for more details).Properties are global to jmeter, and are mostly used to define some of the defaults JMeter uses. For example the property remote_hosts defines the servers that JMeter wi

62、ll try to run remotely. Properties can be referenced in test plans - see Functions - read a property - but cannot be used for thread-specific values.JMeter variables are local to each thread. The values may be the same for each thread, or they may be different.If a variable is updated by a thread, only the thread copy of the variable is changed. For example the Regular Expression Extractor Post-Processor will set its variables according to the sample that its thread has read, and these can be used later by the same thread. For details

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!