Jmeter学习

一. 定义:

        Apache Jmeter 是 Apache 组织开放的开源代码项目,是一个纯JAVA桌面应用,用于压力测试和性能测试,它最初被设计用于Web测试,但后来扩展到其它测试领域

二. 作用:

        Apache Jmeter 可以用于对静态和动态的资源(文件,Serv,Perl脚本,java对象,数据库和查询,FTP服务器或者其它资源)的性能进行测试。

        Jmeter可以用于分析不同压力条件下的总体性能情况;

        使用Jmeter提供的图形化界面,分析性能指标或者在高负载的情况下测试你的服务器,脚本,对象。

三.Jmeter和LR的区别 :

                     

四.Jmeter目录文件 :

                  1、bin目录:

                       

                        

 

                     2、docs接口文档目录:

                     3、extras扩展插件目录:

                     4、lib:所用到的插件目录,里面全部都是jar包,Jmeter会自动在JMETER_HOME/lib和ext目录下寻找所需要的类

                     5、Licenses jmeter证书目录

                     6、printable_docs 用户使用手册

五.Jmeter工具组成和线程组:

                    Jmete工具组成部分:

                             资源生成器:用于生成测试过程中服务器,负载机的资源代码(LR中的VuGen)

                             用户运行器:通常是一个脚本运行引擎,根据脚本要求模拟指定用户行为(LR中的Controller)

                             报表生成器:根据测试中实时地数据生成报表,提供可视化的数据显示方式(LR的Analysis)

                             负载发生器:用于产生负载,通常以多线程或是多进程的方式模拟用户行为(LR中的LoadGenerators)

                             TestPlan(测试计划):用来描述一个性能测试,包含与本次性能测试所相关的功能,也就是说本次的性能测试的所有内容基于一个计划(LR的一个测试场景)

            

                              Threads(Users)线程/用户:

                                          a:  steup thread group

                                            一种特殊类型ThreadGroup,可用于执行预测试操作。这些线程行为完全像一个正常的线程组元件,不同的是,这些类型的线程执行测试前进行定期线程组的执行(类似于LR中的init())

                                           b: teardown  thread group

                                             一种特殊类型ThreadGroup,可用于执行测试后动作。这些线程行为完全像一个正常的线程组元件,不同的是,这些类型的线程执行测试后执行定期的线程组(类似于LR中的end())

                                           c:  thread group(线程组)

                                             这个就是我们通常添加运行的线程,可以看作是一个虚拟用户组,线程组中的每个线程都可以理解为一个虚拟用户,线程组中包含的线程数量在测试执行过程中是不会发生改变的,类似于LR中的action()

           

                              取样器(Sample):

                                      取样器(Sample)是性能测试中向服务器发送请求,记录响应信息,记录响应时间的最小单元;

                                      Jmeter原生支持多种不同的sample 如HTTP Request Sample、FTP Request Sample、TCP Request Sample、 JDBC Request Sample等,每一种不同的类型sample 可以根据设置的参数向服务器发送不同类型的请求

          

 

                              逻辑控制器

                                    逻辑控制器包含两类元件,一类是用于控制test plan 中 sampler 节点发送请求逻辑顺序的控制器,常用的有if 控制器,switch Controller 、Runtime Controller、循环控制器,

                                                另一类是用来组织可控制sample节点的,如事物控制器,吞吐量控制器。

          

                               Jmeter的脚本录制:两种录制方法:

                                       Jmeter代理的录制方式: HTTP请求+查看结果树

                              代理服务器操作步骤:

                                        创建一个线程组(右键点击测试计划 ---> 添加 ---> 线程组)

                                        创建一个HTTP代理代理服务器(右键点击‘工作台’ ---> 添加 ---> 非测试元件 ---> http代理服务器)

                                        

                                           代理服务器分组详解:

                                                  不对样本分组:所有请求全部罗列

                                                  在组间添加分隔:加入一个虚拟的以分割线命名的动作

                                                  每个组放入一个新的控制器:执行时按控制器给输出结果

                                                  只存储每个组的第一个样本:保持对于一次url的请求

                                        设置完后要启动代理服务器,录制完成后要记得关闭  不推荐使用这个,建议用下一个录制

                                  Badboy的脚本录制:

                                        badboy是一个强大的工具,旨在帮助测试和开发复杂的动态应用,Badboy包括一个简单而全面的捕获/回放界面,强大的负载测试的支持,详细的报告图表等等,从而使Web测试和开发变得更加容易。

六.Jmeter元件的作用域与执行顺序:

              8类可执行的元件(测试计划与线程组不属于可执行元件),这些元件中,取样器(sampler)是典型的不与其它元件发生交互作用的元件,逻辑控制器只对其子节点的取样器有效,而其它元件(配置元件、定时器、断言、监听器)需要与取样器(sampler)等元件交互;

              在Jmeter中,元件的作用域是靠测试计划的树型结构中元件的父子关系来确定的,作用域的原则是:

                    取样器(sampler)元件不和其它元件存在交互作用,因此不存在作用域的问题;

                    逻辑控制器(Logic Controller)元件只对其子节点的取样器和逻辑控制器作用;

                    除去取样器和逻辑控制器元件外,其它6类元件,如果是某个取样器的子节点,则该元件对其父子节点起作用,如果父节点不是取样器,则其作用域是该元件的父节点下的其它所有后代节点(包括子节点,子节点的子节点)

              执行顺序:

                   1、配置元件(Config elements)

                   2、前置处理器(Per-processors)

                   3、定时器(timers)

                   4、取样器(Sampler)

                   5、后置处理程序(Post-processors)

                   6、断言(Assertions)

                   7、监听器(Listeners)

               注意点:

                 前后置处理器和断言等元件功能对取样器作用,因此,如果它们的作用域内没有任何取样器,则不会被执行。

                 如果在同一作用域范围内有多个同一类型的元件,则这些元件按照它们的测试计划中的上下顺序依次执行。

 

              测试需求:测试20个用户访问一个网址,在负载达到30QPS时的平均响应时间

                     QPS : Query Per Second 每秒查询率,是一台查询服务器每秒能够处理的查询次数,在因特网上,作为域名系统服务器的性能经常用每秒查询率来衡量

              测试步骤:

                   第一步:添加一个线程组

                        线程组主要包含三个参数:线程数、准备时长(Ramp-Up Period(in seconds))、 循环次数。

                        线程数:虚拟的用户数--- 一个虚拟用户占用一个进程或者线程 -- 设置多少个虚拟用户在这里也就是设置多少个线程数。

                        准备时长(单位是s):设置一个虚拟用户需要多长时间全部启动 -- 如果一个线程数为20,准备时长为10 那么就是10秒钟启动20个线程,也就是每秒启动2个线程

                        循环次数:每个线程发送请求的次数,如果线程数为20 循环次数为5,那么每个线程发送5次请求,总的请求数量 == 20 * 5  = 100 ,如果勾了永远,那么所有线程会一直发送请求,直到选择停止运行脚本。

                   第二步:增添HTTP请求

                       

 

                       参数详细介绍:

                              名称:本属性用于标识一个取样器,建议使用一个有意义的名称;

                              注释:对于测试没有任何作用,仅用户记录用户可读的注释性信息

                              服务器名或者IP:HTTP请求发送的目标服务器或者IP地址

                              端口号:目标服务器的端口号,(默认是80)

                              Timeouts(milliseconds):设置请求和响应的超时时间

                              协议:向目标服务器发送的HTTP请求时的协议,可以是http或者https 默认值是http

                              方法:发送HTTP请求的方法,可用方法包括GET/POST/HEAD/PUT/OPTIONS/TRACE/DELETE等

                              Content encoding: 内容的编码方式,默认为iso 8859

                                 路径:目标URL路径(不包括服务器地址和端口)

                              自动重定向:如果选中该选项,当发送HTTP请求后得到的响应是302/301时,Jmeter自动重定向到新的页面

                              Use keep Alive:当该项被选中时,jmeter和目标服务器之间使用keep-Alive方式(又称为持久链接,链接重用)进行HTTP通信,默认选中

                              Use multipart/from-data for HTTP POST:当发送HTTP POST请求时,使用Use multipart/from-data方法发送,默认不选中

                              同请求一起发送参数:在请求发送URL参数,对于带参数的url,Jmeter提供一个简单的对参数化的方法,用户可以将URL中所有的参数设置在本表中,表中的每一行是一个参数值对(对应url的名称1=值1)

                              同请求一起发送文件:在请求中发送文件,通常HTTP文件上传行为可以通过这种方式模拟从HTML文件获取所有有内涵的资源:当该选项被选中时,jmeter在发出HTTP请求并获取响应的HTML文件内容后,还对该HTML进行分析获取HTML中包含的所有资源(图片,flash等)默认不选中,如果用户只希望获取页面中特定的资源,可以在下方的Embedded URLS must match 文本框中填入需要下载的特定资源表达式,这样,只有能匹配指定的正则表达式的URL指向资源会被下载

                              用作监视器:此取样器被当作监视器,在Monitor Results Listener 中可以直接看到基于该取样器的图形化统计信息,默认为不选中。

                              Save response as MD5 hash:选中该项,在执行时仅记录服务器端响应数据的MD5值,而不记录完整的响应数据,在需要进行数据量非常大的测试时,建议选中该项以减小取样器记录响应的开销

                                             tips 默认时间单位是毫秒 , 报告输出文件后缀是.jt

                   第三步:设置QPS限制:

                              jmeter提供了一个非常有用的定时器,成为Constant Throughput Timer(常数吞吐量定时器),该定时器可以方便地控制给定取样器发送请求的吞吐量

                              

                              Constant Throughput Timer主要属性介绍

                              

                                  Target throughput(in samples per minute):目标吞吐量,注意这里是每分钟发送的请求数,实际填的数值为:60*QPS 其次Cakulate Throughput based on:有五个选项

                                   分别是:

                                      this thread only:控制每个线程的吞吐量,选择这种模式时,总的吞吐量为设置的 Target throughput * 该线程数的数量;

                                      All active threads:设置的Target throughput 将分配在每个活跃线程上,每个活跃线程在上一次运行结束后等待合理的时间后再次运行,活跃线程指同一时段同时运行的线程;

                                      All active threads(shard): 与 All active threads的选项基本相同,唯一的区别就是每个活跃线程都会在所有的活跃线程上一次运行结束后等待合理的时间后再次运行;

                                      All active threads in current thread group:设置的Target throughput 将分配在当前线程的组的每一个活跃线程上,当测试计划只有一个线程组时,该选项和 All active threads选项基本相同

                                                All active threads in current thread group(shard):与All active threads in current thread group基本相同,唯一的区别是,每个活跃线程都会在所有的活跃线程的上一次运行结束后等待合理时间后再次运行

                第四步:添加监视器:

                          脚本的主要部分设置完成后,需要通过某种方式获得性能测试中的测试结果,在本例中,我们关心的是请求的响应时间 jmeter中使用监听器元件收集取样器记录的数据并以可视化的方式来呈现,Jmeter有各种不同    的监听器类型,因为上述HTTP请求,我们可以添加聚合报告,更为直观的查看测试结果;   

添加聚合报告;右键点击线程组,在弹出的菜单(添加-->监听器---聚合报告)中选择聚合报告;

添加查看结果树:(添加--->监听器--->查看结果树)

                第五步:运行脚本:

                第六步:聚合报告分析:

七.Jmeter断言:

               断言是在请求的返回层增加一层判断机制。

               请求成功了并不代表着结果一定正确,因此需要检测机制提高机制的准确性

               常用的三种断言:

                       1、响应断言:  要在监听器里增加断言结果

                             

                              包括:返回结果包括你指定的内容

                              匹配:根据指定内容进行匹配

                             Equals:返回结果与你指定的结果一致

                             Substring:返回结果是指定的字符串结果

                             否:不进行匹配         

                        2、Size断言(Size Assertion)返回字节的数量进行判断

                              

                      3、持续时间断言(Duration Assertion) :如果响应时间大于设置的响应时间,则断言失败,否则成功

八.Jmeter参数化:

                三种参数化的方式:

                      1、用户参数:

                            

                    2、CSV数据配置: 导入一个txt文件  两个字符按照逗号隔开  也可按照其它字符

                            

                            Filename : 参数项文件

                            File Encoding  文件编译方法,一般为空

                            Vaiable Names 文件中各列所显示的参数项;各参数项之间利用西文逗号分隔;参数项名称应该与HTTP Request中的参数项一致

                            Delimiter  如果文件中使用逗号分隔则填写逗号,如果填写TAB 则填写 \t;

                            Recycle on EOF? --- True = 读取文件到结束时再读取文件,False = 当读取文件到结尾时,停止读取文件

                   2、随机参数化:

九.Jmeter集合点:

                操作步骤:step1 ----> 定时器 ----> Synchronizing Timer     模拟秒杀业务的请求业务点   注意点:集合点要放在集合元件的前面

 

                  

十.Jmeter关联:

              1、正则表达式提取器

 

十一.FTP服务器连接:

                  步骤: 1、创建一个线程组

                     2、线程组--> 添加 --> 配置元件 -->FTP请求缺省值(FTP默认值)

                      

                     3、线程组 -->添加 --> Sampler --> FTP请求

                      

 

                        说明:

                           IP:为你的FTP服务的IP

                           Remote file 为你FTP服务器上的一个文件

                           Local file 为本地你存放到本机上的路径

                           选择get(RETR)为下载方式       

                           登录配置:填写你的FTP服务器的用户名和密码

                        4、按照第三步添加一个FTP请求,选择方式为put为上传方式

                        5、添加一个监控器:线程组 -->添加-->监控器 -->Spline Visualizer   (新版本已被去除)

  • 负载测试: 这类测试使系统或者应用程序在预先设计好的极端场景下测试运行。这类测试用来评估系统或者程序在极端条件下的行为。
  • 性能测试: 这种测试被用来检测系统的性能表现,包括特定情况下,系统的响应能力和稳定性。
  • 压力测试: 这类测试通过载入更多的外部资源,并使系统组件超越其所设定的能力范围,试图使系统挂掉。

 

十二.Jmeter mysql测试:  

                      对数据库的查询语句执行效率进行测试

                      1、准备一个有测试数据的mysql数据库

                      2、在测试面板上点击浏览按钮,将你的JDBC驱动添加进来

 

 

十三.Jmeter 分布式测试: 

                      由于Jmeter本身的瓶颈,当需要模拟的数以千计的的并发用户时,使用单台机器模拟的所有并发用户就有些力不从心,甚至会引起java内存溢出错误:

                      要解决这个问题,可以使用分布式测试,即多台机器运行所谓的Agent 来分担Jmeter自身的压力,并借此获取更多的并发用户数,但是需要一些修改

                      操作步骤:

                           1、安装Jmeter 并确定其中一台最为Controller ,其它的机器作为Agent 然后所有的Agent机器上的Jmeter-server.bat文件 ------假定我们使用两台机器192.168.0.11和192.168.0.12作为Agent;(Agent机器上必须安装jdk并设置环境变量)

                           2、在Controller 机器的%JMeter_HOME/bin 下 编辑Jmeter.properties 中remote_host = 127.0.0.1 其中127.0.0.1表示运行jmeter Agent的机器,这里需要修改为remote_host =192.168.0.11:10099,192.168.0.12:10099  其中1099为端口号

                           3、启动Controller机器上的jmeter.bat 选择菜单Run中的Remote Start 中的192.168.0.11:10099,192.168.0.12:10099来运行Agent

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

                      

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

                              

 

 

 

 

                   

 

 

                                              

 

 

 

              

 

 

 

 

 

 

                

 

 

 

posted @ 2022-01-12 16:31  sabertooth_W  阅读(0)  评论(0)    收藏  举报