zoukankan      html  css  js  c++  java
  • jmeter的使用

    一、网上有很多jmeter的资料,这篇博文就不介绍它的使用了

      对于jmeter的初学者,推荐虫师的连载博文:http://www.testclass.net/jmeter

    二、常用组件介绍:

      1. 测试计划:用来描述一个性能测试,包括与本次性能测试相关的功能

      2. 线程组:可以看做一个虚拟用户组。模拟复杂场景选用:jp@gc - Ultimate Thread Group,常用线程组

        1. 设计并发场景

          

      3. 取样器:常用:http请求

        1. 确保每个请求下载全部资源:

          

      4. 断言:检查测试得到的数据是否符合预期。常用:响应断言

      5. 监听器:对测试结果数据进行处理和可视化展示的一系列元件。常用:察看结果树、聚合报告

        1. 聚合报告:展示线程组运行后的事务数、响应时间、吞吐量等   

          Label----每个请求的名称,比如HTTP请求等

          #Samples----发给服务器的请求数量

          Average----单个请求的平均响应时间

          Median----50%请求的响应时间

          90%Line----90%请求响应时间

          95%Line----95%请求响应时间

          99%Line----99%请求的响应时间

          Min----最小的响应时间

          Max----最大的响应时间

          Error%----错误率=错误的请求的数量/请求的总数

          Throughput----吞吐量即表示每秒完成的请求数

          Received KB/sec----每秒从服务器端接收到的数据量

          Sent KB/sec----每秒从客户端发送的请求的数量

      6. 配置元件:用于提供对静态数据配置的支持。常用:http cookies管理器、用户自定义变量、csv数据文件设置

        1. csv数据文件设置:csv文件读取

          

      7. 前置处理器:在实际请求发出之前对即将发出的请求进行特殊处理。常用:用户参数

      8. 逻辑控制器:包括两类。一类:用于控制测试计划中个节点发送请求的逻辑顺序的控制器,常用:如果(if)控制器、循环控制器;另一类:用来组织可控制节点

             的,常用:事务控制器

        1. 事务控制器:将需要的核心业务多个请求整合成一个业务,关注点从单个请求变为整体。在聚合报告中也可以将每个请求的获取变成整个事务的获取。

          

        2. 如果(if)控制器

          

      9. 后置处理器:用于对发出的请求后得到的服务器响应进行处理。常用:正则表达式提取器

        1. 正则表达式的使用方式,一般可以通过(.*?)来取得关键字段。但在获取的字符串中很多时候会遇到本身带有?号的情况,所以必须将问号转义(?)

          

       10. 定时器:用于为请求之间设置的等待时间,常用:高斯随机定时器、固定定时器、synchronizing timer(集合点)

        1. synchronizing timer:对某些业务请求需要做压力测试,而前面的操作或多或少的会影响线程到达执行该请求的时间。所以需要一个机制让先到的

                   线程等待到需要的线程数量时再一起运行

          

    三、 一次普通的http请求流程:线程组--取样器:http请求--断言--监听器:察看结果树

    四、参数化的实现方式:

      1.  用户参数:线程组--前置处理器--用户参数,添加参数和用户,并设置对应的属性值

        

       2. 用户定义的变量:线程组--配置元件--用户定义的变量,设置键值

        

      3. 随机函数,通过函数助手生成参数随机数的变量。${__Random(100000,999999,randtitle)}}

        

      4. 引入外部文件:csv文件读取

         

    五、监听器之图像组件

      1. jp@gc - Response Times Over Times:响应时间过程图

      2. jp@gc - Transactions per Second:每秒处理的事务数

      3. jp@gc - Response Times vs Threads:请求时间与虚拟用户数之间的关系

      4. jp@gc - Transaction Throughput vs Threads:每秒事务吞吐量与虚拟用户数的关系

      5. jp@gc - PerfMon Metrics Collector:服务器监控工具。需要Server Agent Tool工具的辅助(运行startAgent.bat或startAgent.sh)

        监控项目一般选取:CPU、Memory、Disks I/O、Network I/O

    六、执行

      在使用Jmeter进行压力测试,有两种方式:GUI、非GUI,不管是使用GUI,还是非GUI进行测试,对测试结果都可以转化成HTML的测试报告,更直观和方便我们

    查看和分析。

      方式一:GUI

        1、在测试计划里面添加一个Listener(添加任意一个Listener都可以),在Write result to file/Read from file的Filename的位置填写保存测试结果的路径(路径

      可以自由指定)(如图所示)

        jmeter中测试结果的文件格式为:jtl

         

        2、通过命令把测试结果转换成HTML

          jmeter -g D:Jmeterapache-jmeter-4.0in esult.jtl -e -o F:JmeterReport

          说明:

          -g   --指定已存在的测试结果

          -e:测试结束后,生成测试报告

          -o  --指定的文件夹必须是不存在的,否则执行失败(如图所示)

          ①、该命令必须在jmeter的bin目录下执行

          ②、D:Jmeterapache-jmeter-4.0in esult.jtl  --是result.jtl所在目录【若result.jtl保存再bin目录下,路径可以省略,直接写测试结果的名称即可;若result.jtl

            不是在bin目录下,就要填写完成的路径(如图所示)

          ③、F:JmeterReport  --是转换后HTML报告保存的路径

      方式二、非GUI

      所有命令必须在jmeter的bin目录下执行

        jmeter -n -t F:TestScriptControllerSQL.jmx -l result.jtl -e -o F: eport    [第一个路径:测试脚本的路径;第二个路径:测试报告保存路径]

        如果不需要直接生成HTML测试报告,则取消 -e -o F: eport 即可,测试完毕后再通过方式一的方法生成HTML报告即可

        jmeter -n -t F:TestScriptControllerSQL.jmx -l result.jtl

        参数说明:

        -n:非GUI模式执行JMeter

        -t:执行测试文件所在的位置

        -l:指定生成测试结果的保存文件,jtl文件格式

        -e:测试结束后,生成测试报告

        -o:指定测试报告的存放位置

        # 使用输出的数据生成html报告

        jmeter -g <数据路径> -o <报告存放目录(需为空)>

    七、联机负载 

      1. 基础概念:

             1. 主控制机:存放JMeter脚本的机器叫做主控制机

             2. 负载机:被连接并用来运行脚本的机器叫做负载机

      2. 前提条件:
            1. 保证在控制机和负载机上都能够运行Jmeter(jmeter和jdk版本需一致)

             2. 要保证控制机和负载机、负载机和被测服务器之间的网络能够通信(同一个局域网内)

      3. 操作步骤:

        1. 在控制机上,找到jmeter所在目录中的bin文件夹下的jmeter.properties文件,打开找到# Remote Hosts - comma delimited

                     例:

                    # Remote Hosts - comma delimited

            remote_hosts=127.0.0.1

                    #remote_hosts=localhost:1099,localhost:2010

                    remote_hosts=192.168.10.103:1099,192.168.10.104:1099         

            表示添加了两台负载机:一台是:192.168.10.103:1099,一台是:192.168.10.104:1099

        2. 在负载机上启动Jmeter-server.bat    

         (Jmeter-server的默认服务端口是1099,如果在负载机上该端口被占用,则我们可以通过修改负载机上的Jmeter的配置文件jmeter.properties中的

          属性server_port来指定服务端口)

           将Jmeter-server的服务端口改为了8000,改完之后重启才会生效。示例:

            # RMI port to be used by the server (must start rmiregistry with same port)

            server_port=8000

        3. 在控制机上的执行

          所有命令必须在jmeter的bin目录下执行

          jmeter -n -t F:TestScriptControllerSQL.jmx -r -l result.jtl -e -o F: eport    [第一个路径:测试脚本的路径;第二个路径:测试报告保存路径]

          或

          jmeter -n -t F:TestScriptControllerSQL.jmx  -R 10.9.215.47:1029 -l result.jtl -e -o F: eport

      5. 注意事项:
        1. 联机负载时,要保证控制机和负载机的Jmeter的版本、JAVA环境的一致性

        2.联机负载时,脚本的运行环境是负载机的环境,一般就要保证控制机和负载机的环境的一致性

        3. 对于脚本中用到的第三方文件,包括jar包和参数文件等

          1. 对于jar包,只需要保证第三方jar包同时在控制机和负载机的jmeter的lib目录下存在即可

          2. 对于第三方文件,比如参数文件,也要求在控制机和负载机都有

        4. 如果是使用的绝对路径,则要保证第三方文件在控制机和负载机的绝对路径的一致

        5.如果使用相对路径,则要注意在控制机和负载机上的当前路径的区别:

          在控制机(本地)上时,当前路径是脚本所在文件夹

          在负载机(远程)上时,当前路径是Jmeter的bin目录

        6.联机负载时,远程全部启动时,当前的测试计划是分别、独立、同步在每一台负载机上执行的。这就意味着此时对服务器造成的实际压力(RL)和测试计

        划所设置的压力(DL)是不一样的,是和负载机的数量(N)有关的,RL=DL*N

  • 相关阅读:
    我所知道的JS调试
    css加载会造成阻塞吗?
    移动端图片上传旋转、压缩的解决方案
    JS组件系列——自己动手扩展BootstrapTable的 冻结列 功能:彻底解决高度问题
    什么是BFC
    CSS中margin边界叠加问题及解决方案
    JavaScript 中回调地狱的今生前世
    用css实现自定义虚线边框
    仿淘宝,京东红包雨
    css3实现可以计算的自适应布局——calc()
  • 原文地址:https://www.cnblogs.com/badbadboyyx/p/12050921.html
Copyright © 2011-2022 走看看