一、网上有很多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:\Jmeter\apache-jmeter-4.0\bin\result.jtl -e -o F:\JmeterReport

      说明:

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

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

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

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

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

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

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

  方式二、非GUI

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

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

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

    jmeter -n -t F:\TestScript\Controller\SQL.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:\TestScript\Controller\SQL.jmx -r -l result.jtl -e -o F:\report    [第一个路径:测试脚本的路径;第二个路径:测试报告保存路径]

      或

      jmeter -n -t F:\TestScript\Controller\SQL.jmx  -R 10.9.215.47:1029 -l result.jtl -e -o F:\report

 

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

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

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

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

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

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

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

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

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

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

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

 

posted on 2019-12-16 19:50  badbadboy  阅读(312)  评论(0编辑  收藏  举报