Jmeter使用手册

上一篇 / 下一篇  2016-12-20 17:39:37 / 个人分类:个人总结

关于Apache Jmeter
  Apache Jmeter是一款纯java的开源软件,可用来作负载功能测试性能测试
原本设计用作测试Web应用,后来扩展到支持其他测试功能;

Apache Jmeter的特性
 Apache Jmeter支持测试静态和动态资源(Web动态应用程序)上的性能。
  它可以用作模拟服务器、服务器组、网络或对象的重负载,以测试其强度或分析其在不同负载类型下的性能;
   Apache Jmeter的特性包括:
1、能够对许多不同的应用、服务、协议做负载和性能测试:   
  • Web - HTTP, HTTPS (Java, NodeJS, PHP, ASP.NET, …)
  • SOAP / REST Webservices
  • FTP
  • Database via JDBC
  • LDAP
  • Message-oriented middleware (MOM) via JMS
  • Mail - SMTP(S), POP3(S) and IMAP(S)
  • Native commands or shell scripts
  • TCP
  • Java Objects
  • 2、全功能的测试IDE支持快速测试计划:录制(从浏览器或本地应用程序)、编译、调试.

    3、命令行模式(NO GUI/Headless Mode)可以在兼容java的操作系统上加载测试(LinuxWindows、Mac OSX……)

    4、展示完备的的动态HTML报告;

    5、通过从主流的响应格式文本(HTML、JSON、XML)或其他格式文本提取数据而易于关联;

    6、完全的可移植性和纯java;

    7、完全的多线程框架支持多线程并发采样以及独立的线程组采样不同的功能;

    8、测试结果的缓存、离线分析/重放;

    9、高扩展性:

  • 可插入的采样器支持多种测试场景.
  • 支持脚本编写的采样器.(例如Groovy和BeanShell);
  • 可以使用pluggable timer选择多个负载统计信息;
  • 数据分析和可视化插件支持极大的扩展性和个性化;
  • 给测试提供动态输入和数据操作的功能;
  • 通过Maven、Graddle、Jenkins的第三方开源库易于持续集成;
  • 使用Jmeter

    1概述

    1.1要求

    1.1.1Java版本

      Jmeter需要一个完全兼容的JVM7或8;

      JVM(Java虚拟机)使java可以兼容不同的操作系统,在不同的操作系统不需要重新编译而直接运行;

      JDK(Java Development Kit):包含了JRE、java工具包、java基础类库;

      JRE(Java Runtime Environment):Java虚拟机(jvm)、Java核心类库和支持文件


    1.1.2操作系统

      Jmeter可以在任何支持java的操作系统上运行;

    1.2安装

      解压压缩包到安装目录(注意安装目录不能有空格),保证配置了JDK/JRE的环境变量即可;

      可以重命名最外层的安装文件夹名称,但是里面的不能重命名;

    1.3运行Jmeter

      windows:在安装文件bin目录下,运行jmeter.bat;

      Unix:在安装文件bin目录下,运行jmeter;

      GUI mode should only be used for creating the test script, NON GUI mode must be used for load testing??

    1.3.1Jmeter的类路径

      Jmeter自动从JEMETER_HOME/lib(Jmeter的实现jar包)和JEMETER_HOME/lib/ext(Jmeter的组件和插件)下找方法类;

      其他像JDBC、JMS的jar包要放在JEMETER_HOME/lib目录下;

    1.3.2从模板创建测试计划

      可以通过如下按钮或者是选择file-templates来创建标准模板的测试计划,里面有多种分类:

    2构建测试计划
     测试计划描述了Jmeter在运行时将要执行的一系列步骤;
    完整的测试计划将包括一个或多个线程组,逻辑控制器,样本生成控制器,Listeners,定时器,断言和配置元素。

    2.1添加和删除元素
      向测试计划添加元素可以通过右键单击树中的元素,并从“添加”列表中选择一个新元素来完成;或者可以从文件加载元素,并通过选择“合并”或“打开”选项来添加元素;
      要删除元素,请确保元素已选中,右键单击该元素,然后选择“删除”选项。

    2.2加载和保存元素

      从文件中加载元素,右键选中想要添加元素的已存在的树的元素,选择“合并”按钮,打开预添加元素保存的位置,选择后,这个元素将被合并至当前树中;

      要保存树元素,请右键单击元素,然后选择“将选择另存为...”选项。 JMeter将保存所选的元素,加上它下面的所有子元素。 这样,您可以保存测试树片段和单个元素供以后使用。

      默认情况下,工作台不会随测试计划自动保存,但可以通过选中Workbench元素上的“保存工作台”选项来保存。

    2.3配置树元素

     测试树中的任何元素将在JMeter的右侧框架中显示控件。这些控件允许配置测试元素的特性;

    2.4保存测试计划

     建议在运行测试计划之前将测试计划保存到文件。要保存测试计划,请从文件菜单中选择“保存”或“保存测试计划...”

    2.5运行测试计划

      要运行测试计划,从“运行”菜单项中选择“开始”(Control + r)。当JMeter运行时,它在菜单栏正下方部分的右手端显示一个小绿色框。您还可以选中“运行”菜单。如果“启动”被禁用,并且“停止”被启用,那么JMeter正在运行你的测试计划;

      绿色框左侧的数字是活动线程数/线程总数。这些仅适用于本地运行测试;它们不包括在使用客户机-服务器模式时在远程系统上启动的任何线程。

    2.6停止测试计划

      停止(control+.)如果可能,立即停止线程。许多采样器是可中断的,这意味着活动采样可以提前终止。stop命令将检查所有线程是否在默认超时内停止,即5000ms=5秒。[这可以使用JMeter属性jmeterengine.threadstop.wait更改]如果线程尚未停止,则会显示一条消息。可以重试停止命令,但如果失败,则有必要退出JMeter进行清理。

      关闭(control+,)请求线程在任何当前工作结束时停止。不会中断任何活动样本。模态关闭对话框将保持活动状态,直到所有线程都停止。

    2.7错误报告

      JMeter向jmeter.log文件报告警告和错误,以及测试运行本身的一些信息。JMeter显示在其窗口右侧的警告图标(三角形)旁边的jmeter.log文件中发现的警告/错误数。单击警告图标以在JMeter窗口的底部显示jmeter.log文件。只是偶尔可能有一些错误JMeter无法捕获和日志;这些将出现在命令控制台上。如果测试的行为不如预期,请检查日志文件,以便在报告任何错误(例如,函数调用中的语法错误)时使用。

      通常不会在日志文件中报告样本错误(例如HTTP 404 - 找不到文件)。这些被存储为样本结果的属性,可以在各种不同的侦听器中查看样本结果的状态。

    3测试计划的元素
    3.0测试计划

     测试计划的配置项有一个函数测试模式复选框.如果勾选,Jmeter将会记录从服务器返回的每个样本的数据,越积越多,从而影响Jmeter的性能,所以如果线程组或者线程组里的交互过多,则不要勾选;(例如做压力测试时)

    3.1线程组
     线程组是任何测试计划的起点,所有控制器和采样器必须在线程组下.其他元件,例如Listeners,可以直接放置在测试计划下,在这种情况下,它们将应用于所有线程组.顾名思义,线程组控制JMeter将用来执行测试的线程数.线程组的控件允许配置以下属性:
       线程数;
       加满线程数的时间(s);
       循环次数;
       调度器;
     每个线程将完全执行测试计划,并且完全独立于其他测试线程。多线程用于模拟与服务器应用程序的并发连接。(线程是程序的最小执行单元,一个进程可以有多个线程,可以并发执行;一个线程可以对应一类测试场景)
      Ramp-Up参数不能设定得太短,否则在测试的初始阶段会给予服务器过大的压力。Ramp-Up参数也不能设定得太长,否则就会发生第一个线程已经执行完毕,而最后一个线程还没有启动的情况(除非测试人员期望这种特殊情况发生).
       调度器:
       启动延迟会重写启动时间,持续时间会重写结束时间;(在点击启动按钮后的延迟时间后开始执行而不是启动时间执行;在执行后的持续时间结束而不是结束时间结束;)
      
       何时开始:开始时间未到,到了开始时间后,再延迟指定的时间后自动开始;如果开始时间为过去时间或者开始时间未填,立即开始; 
      
    调度器测试:
       前置条件,1s可循环执行1000次;
       1)循环次数:100次;启动时间>now;结束时间>启动时间+1;持续时间:1s;点击"启动"
         测试结果:到达启动时间后开始执行,循环了100次;
         说明:未到达启动时间不执行,执行时循环优先级循环次数>持续时间>结束时间; 
       2)循环次数:100次;启动时间<now;结束时间>now;持续时间:1s;点击"启动"
         测试结果:立即开始执行,循环了100次;
         说明:启动时间<now,立即执行,执行时循环优先级循环次数>持续时间>结束时间;
        3)循环次数:永远;启动时间>now;结束时间=启动时间+1;持续时间:5s;点击"启动"
          测试结果:立即开始执行,循环了5000次;
          说明:优先级持续时间>结束时间;
        4)循环次数:永远;启动时间>now;结束时间=启动时间+60;持续时间:空;点击"启动"
          测试结果:循环了60*1000次;
          说明:循环次数永远,持续时间为空时,运行结束时间-启动时间后结束;
    综上:
        优先级始终持续时间>结束时间;
         循环次数与持续时间、结束时间对比,谁循环次数少,谁优先级高;
    3.2控制器

      Jmeter包含两类控制器:采样器(sampler)和逻辑控制器;
      采样器是用来向服务器发起请求;(例如http、jdbc请求等);
      逻辑控制器是可以按用户自定义的逻辑控制Jmeter何时发送请求;举一个例子:测试人员可以插入交替控制器来轮流发送多个请求。
    3.2.1采样器
     采样器让Jmeter向服务器发送请求并等待响应.他们按出现在线程组树里的顺序执行.可以通过控制器来设置采样器的请求重复次数;
      Jmeter的采样器包括:
      FTP Request
      HTTP Request(can be used for SOAP or REST Webservice also)
      JDBC Request
      Java Object Request
      JMS Request
      JUnit Test Request
      LDAP Request
      Mail Request
      OS Process Request
      TCP Request
     每一种采样器都有多种参数可供设置。测试人员还可以通过在测试计划中加入一个或者多个配置元件,来进一步定制化采样器。
      如果测试人员打算向同一个服务器发送同一类请求,可以考虑使用默认配置元件。每一类采样器都有一个或多个对应的默认配置元件。一定记住应为测试计划添加一个Listeners,以便查看和存储(存储到磁盘)请求的结果。

     如果测试人员想检查服务器响应的内容,可以为对应采样器添加断言。例如,当对Web应用做压力测试时,服务器虽然成功返回了"HTTP Response"代码,但是页面上可能会有错误,或者丢失了部分页面片段。针对这种情况,测试人员可以添加断言来检查特定的HTML标签,或者常见的错误信息等。JMeter允许在断言中使用正则表达式。  

    3.2.2逻辑控制器

    逻辑控制器可以按用户定制来决定何时发起请求,发起请求的顺序,发起请求的次数等等;

    可以通过如下的测试树来进一步理解逻辑控制器的作用:

    测试计划

        线程组

              仅一次控制器

                    请求逻辑(一个HTTP请求)

              加载搜索页(一个http sampler)

              隔离控制器

                    搜索"A"(一个http sampler) 

                    搜索"B"(一个http sampler)

                    HTTP默认请求(配置元件)

              HTTP默认请求(配置元件)

              Cookie管理器(配置元件)

      首先让我们看登录请求(Login Request),在整个测试中它只会运行一次,在剩下的测试循环中它会被忽略,原因就在于仅一次控制器(Once Only Controller).

      在登录之后,接着是载入搜索页面的采样器,它仅仅是一个普通采样器,没有父逻辑控制器.

      在加载搜索页面后,我们想做一个搜索。事实上我们想做两种完全不同的搜索,而且在不同搜索之间还要重新加载搜索页面。如此一来就需要4个HTTP请求测试元件(加载搜索页面,搜索"A";加载搜索页面,搜索"B")。这里有一个更简单的办法,那就是使用交替逻辑控制器,它会在每一次测试循环中仅执行一个子请求。它还会记住子请求的顺序,而不是随机执行。交替执行两个子请求没有太大意义,但是它可以轻松扩展到8个或者20个,甚至更多子请求。

      注意交替逻辑控制器下的HTTP请求默认值(HTTP Default Request)。考虑这样一种情况,搜索"A"和搜索"B"有同样的路径信息(HTTP请求明细包含域、端口、方法、协议、路径、参数以及其他可选的信息)。这就意味着它们都是搜索请求,而且背后有同样的搜索引擎(servlet 或者 cgi-script)。与其在每一个HTTP采样器路径域中设置同样的信息,不如将它们抽取出来放到一个配置元件中。当交替控制器处理请求搜索"A"和搜索"B"时,它会为请求的空白信息栏填充HTTP请求默认值中保存的值。因此将请求的路径域留为空白,并将该信息放到配置元件中。在这个例子中对配置元件的好处没有得到充分展现,但是它演示了配置元件的特性。

      所有的Web测试都应该添加Cookie管理器,否则JMeter就会忽略Cookie。通过把HTTP Cookie管理器添加到线程组,就能确保所有HTTP请求共享相同的Cookie.

      逻辑控制器可以组合起来以达到各种测试目的.

    3.2.3测试片段

     测试片段元素是一类存在于测试计划树下,与线程组同级别的特殊控制器;一般不会执行,除非被include 控制器和模块控制器引用;

    3.3Listeners

     所有类型的Listeners都是保存相同的结果数据,唯一区别是在屏幕上的呈现方式不同;

      可以在测试计划树的任意位置添加,只记录同级或更低级别的数据;

    3.4定时器

     默认情况下,JMeter线程在发送请求之间没有间歇。建议为线程组添加某种定时器,以便设定请求之间应该间隔多长时间。如果测试人员不设定这种延迟,JMeter可能会在短时间内产生大量访问请求,导致服务器被大量请求所淹没。

      用定时器可以模拟用户真实的使用场景;(例如登录成功之后,会过一定时间后才会有查询的动作)

      定时器会让作用域内的每一个采样器都在执行前等待一个固定时长。如果测试人员为线程组添加了多个定时器,那么JMeter会将这些定时器的时长叠加起来,共同影响作用域范围内的采样器。定时器可以作为采样器或者逻辑控制器的子项,目的是只影响作用域内的采样器。

      要在测试计划中的某个位置添加暂停、停止、继续下个迭代等,测试人员可以使用"Test Action"采样器.

    3.5断言

     用户可以使用断言来检查从服务器获得的响应内容。通过断言可以测试服务器返回的响应与测试人员的期望是否相符。

      例如,测试人员可以断言某个查询的响应中包含特定的文字信息。测试人员可以使用Perl格式的正则表达式来描述响应中应该包含的文字,或者它应该与整个响应相符。

      可以给测试计划、线程组、任意采样器添加断言.
      断言结果可以在一些Listeners里看到,例如断言结果、查看结果树;

    3.6配置元件

      配置元件虽然不发送请求,但是它可以添加或者修改请求。配置元件仅对其所在的测试树分支有效。例如:请求1下有一个定时器1、请求2下有一个定时器2,定时器3与请求1、请求2并列,那么定时器1的作用域是请求1、定时器2的作用域是请求2,定时器3的作用域是请求1、请求2;(可理解为请求1和定时器2不在一个分支、请求2和定时器1不在一个分支,所以不能被影响)

      对于定时器来说,它会把受不同定时器控制的同一请求的定时时间累加; 

      有一个例外,对于用户定义的变量来说,对整个测试计划有效,不管是不是同一线程组,同一树分支里,都会被影响,以最后一次出现的用户变量值做为最终的变量值;

      另一个可以重写变量的前置处理器-用户参数,这个只作用于同一个线程组里;

     

    3.7前置处理器

      前置处理器是在采样器发起请求之前对采样器进行某些设置,或者更新某些变量的值。

    3.8后置处理器

      前置处理器通常是在采样器发起请求之后对响应数据进行处理,例如:正则表达式提取器;

    3.9执行顺序

      0、配置元件

      1、前置处理器

      2、定时器

      3、采样器

      4、后置处理器

      5、断言

      6、侦听器

      只有当作用域内存在采样器时,定时器、断言、前置/后置处理器才会被执行。逻辑控制器和采样器按照在测试树中出现的顺序执行。其他测试元件会依据自身的作用域范围来执行,另外还与测试元件所属的类型有关(归属于同一类型的测试元件,会按照它们在测试树中出现的顺序来执行)。


    例如,在如下测试计划中:

    Controller

    Post-Processor 1

    Sampler 1

    Sampler 2

    Timer 1

    Assertion 1

    Pre-Processor 1

    Timer 2

    Post-Processor 2


    执行顺序为:

    Pre-Processor 1

    Timer 1

    Timer 2

    Sampler 1

    Post-Processor 1

    Post-Processor 2

    Assertion 1


    Pre-Processor 1

    Timer 1

    Timer 2

    Sampler 2

    Post-Processor 1

    Post-Processor 2

    Assertion 1

    3.10作用域规则

      JMeter测试树中既包含遵循分层规则的测试元件(配置元件、定时器、断言等其他),又包含遵循顺序规则的测试元件(逻辑控制器、采样器)。

      逻辑控制器和采样器按其出现在测试计划树中的顺序执行,有些逻辑控制器可以改变采样器的执行顺序,例如随机控制器;

      其他测试元件根据其所在的节点位置,作用的范围不一样,例如,某个采样器下的定时器只对当前采样器生效;某个逻辑控制器下的定时器则对逻辑控制器下的所有采样器生效;

    3.11属性和变量

      注意,通过测试计划和"用户定义的变量"(配置元件)两种方式定义的变量,在JMeter启动时对这个测试计划都是可见的。如果同一个变量在多个"用户定义的变量"(配置元件)中被定义,那么只有最后一个定义会生效。一旦某个线程启动后,那么整个变量集合的初始值就会被复制到该线程中。其他测试元件,例如"用户变量"(前置处理器)或者"正则表达式提取器"(后置处理器)可以被用来重新定义变量(或者创建新变量),这些重定义仅仅影响当前线程。

    3.12使用变量参数化测试 

      在考虑如何构建测试计划时,需要注意哪些在测试运行期间是恒定不变的(常量),而哪些在不同线程之间可能会发生变化(变量)。对于常量应该有单独的命名规则,例如加前缀C_或者K_,或者使用大写,以便区别于变量。另外,还需要考虑哪些对于测试线程而言是独享的,例如计数器或者通过"正则表达式提取器"(后置处理器)提取的变量。测试人员可以对这些变量也采用不同的命名策略。

    4.创建web测试计划

      在这一节中,将会介绍如何创建一个简单的测试计划,用于测试Web站点。我们会模拟5个并发用户,对Jakarta Web站点的两个页面进行访问。另外,每个并发用户都会运行测试两次。因此测试计划产生的总请求数目为(5 并发用户)×(2 请求)×(重复 2 次)= 20 HTTP请求。要构建该测试计划,测试人员需要用到如下测试元件:线程组(Thread Group)、HTTP请求(HTTP Request)、HTTP请求默认值(HTTP Request Defaults)和图形结果(Graph Results)。

     
    4.1添加并发用户

      首先为线程组起一个有意义的名字,在名称域中输入Jakarta Users,接着设置线程数为5,如图3-11所示。保持Ramp-Up Period的值不变(为1秒),这一设置会告诉JMeter启动并发用户的时间间隔。例如,如果测试人员将Ramp-Up Period设置为5秒,那么JMeter会在5秒内将所有并发用户启动起来。因此假设我们有5个并发用户和5秒的Ramp-Up Period,那么启动并发用户的间隔为1秒(5 并发用户 / 5 秒 = 1 用户每秒)。如果测试人员将该值设为0,那么JMeter会立刻启动所有的并发用户。

      最后在循环次数(Loop Count)中输入2,这一属性会告诉JMeter重复测试多少次。如果测试人员设置的循环次数为1,那么JMeter只会运行测试一遍。要让JMeter不断运行测试计划,请选中"(Forever)永远"复选框。

    4.2添加默认HTTP请求属性

      首先从选中Jakarta Users(线程组)测试元件开始。单击鼠标右键,在弹出的快捷菜单中选择"Add"→"Config Element"→"HTTP Request Defaults"命令。接着选中这个新测试元件,查看它的控制面板.

      像大多数JMeter测试元件一样,HTTP请求默认值(HTTP Request Defaults)也有对应的控制面板。此处不修改名称域,保留原来的值。

      让我们跳到下一个设置域--Server Name or IP。对于当前正在构建的这个测试计划,所有的请求都要发往jmeter.apache.org,因此测试人员需要将jmeter.apache.org放到该设置域中。这个域是唯一需要设定的默认值,因此其他域就保留原来的值即可,HTTP请求默认值(HTTP Request Defaults)不会让JMeter去发送HTTP请求,它只是定义了HTTP请求(测试元件)使用到的默认值。

    4.3添加Cookie支持

      通常所有Web测试都要支持Cookie,除非测试人员的应用系统很特别,不使用Cookie。要添加对Cookie的支持,只需要为测试计划中的每一个线程组添加一个HTTP Cookie管理器(HTTP Cookie Manager)。这样一来,每一个测试线程都会拥有独立的Cookie,但是这些Cookie会在HTTP请求对象间共享。

      要添加HTTP Cookie管理器(HTTP Cookie Manager),只需简单地选中线程组,接着选择"Add"→"Config Element"→"HTTP Cookie Manager"命令(既可以通过编辑菜单,也可以通过右键弹出菜单)。

    4.4添加HTTP请求

      在测试计划中,需要发送两个HTTP请求。第一个请求针对Jmeter主页(http://jmeter.apache.org/),而第二个请求针对更改页面(http://jmeter.apache.org/changes.html)。

      JMeter会按照它们在测试树中出现的顺序发送请求。

       首先为线程组(Jmeter Users)添加一个HTTP请求(Add→Sampler→HTTP Request)。接着在测试树中选中该HTTP请求,并编辑其属性。 

      (1)将名称(Name)改为"Home Page"。

      (2)将路径(Path)设置为"/"。注意此处并不需要设定Server Name,原因在于测试人员已经在HTTP请求默认值(HTTP Request Defaults)中设定了默认值。

       接下来,添加第二个HTTP请求,并编辑其属性,如图3-15所示。

      (1)将名称(Name)改为"Changes"。

      (2)将路径(Path)设置为"/changes.html"。

    4.5添加侦听器查看测试结果

      测试人员为测试计划添加的最后一个测试元件就是侦听器。该测试元件负责将所有HTTP请求的结果存储在一个文件中,并以可视化的模型加以展示。

      选中线程组(Jmeter Users),并添加一个图形结果(Graph Results)侦听器(Add →Listene→Graph Results)。接下来,测试人员需要指明保存测试结果的目录和文件名。测试人员既可以在filename输入域中填写,也可以通过单击"Browse"按钮来选择一个文件。

    4.6登录WEB站点

      在上面描述的测试计划中不涉及登录,但是有些Web站点要求在执行特定操作前必须先登录。在Web浏览器中,登录界面通常就是一个表单(Form),其中有用户名和密码输入域,以及提交表单(Form)会用到的按钮。该按钮会产生一个POST请求,并将表单中的元素作为参数。

      要使用JMeter完成登录,测试人员需要添加一个HTTP请求,并将方法设为POST.测试人员需要知道表单使用的输入域名称和目标页面。所有这些信息都可以通过查看登录页面的代码来获取(如果这一点很难做到,测试人员可以使用JMeter录制(JMeter Proxy Recorder )来实现).目标页面设置为提交按钮所在的页面。另外还需单击"Add"按钮两次,增加用户名和密码。有些时候登录表单中还包含一些隐藏信息,它们也需要在这里添加。


      

    TAG:

    引用 删除 nuoyan   /   2019-05-22 14:43:03
    5
    Test For testing 引用 删除 pcgmangocity   /   2019-02-23 17:07:45
    https://mp.weixin.qq.com/s?__biz=MzAxMTA0ODE3Mw==&mid=2656972925&idx=7&sn=b9d29131cd66c535d94a2ffc25ef691d&chksm=80ed95ffb79a1ce97fc4b6c8ee849c038b58d1ab2ee2cde4ecc03b2865aa8e4a0457d4b5803e
    Test For testing 引用 删除 pcgmangocity   /   2019-02-23 17:03:43
    https://mp.weixin.qq.com/s?__biz=MzAxMTA0ODE3Mw==&mid=2656936970&idx=8&sn=df17f74434ba0dd7bd3d9c553dc431fb&chksm=80ee0188b799889ecca2ff2aeb74352d03f9da139aa1589c1fa5ae784c834a64fd87dca46fdd
    让测试飞起来的个人空间 引用 删除 让测试飞起来   /   2017-04-28 14:11:40
    5
     

    评分:0

    我来说两句

    Open Toolbar