vlambda博客
学习文章列表

【性能测试系列】JMeter核心技术:分布式压测和参数化



【性能测试系列】JMeter核心技术:分布式压测和参数化



【性能测试系列】JMeter核心技术:分布式压测和参数化
【性能测试系列】JMeter核心技术:分布式压测和参数化



JMeter分布式压测


【性能测试系列】JMeter核心技术:分布式压测和参数化


为什么要做分布式部署?

在中,我们提到了JMeter的线程启动和运行,是会占用系统资源的,一旦需要大并发,而JMeter单机部署配置不够,将会导致JMeter无法在规定时间内启动对应的线程数,无法对服务器产生预期的压力,最终影响到性能测试的结果。

为了解决单机部署JMeter产生的这类问题,我们引入了JMeter分布式部署。


【性能测试系列】JMeter核心技术:分布式压测和参数化


JMeter分布式原理

JMeter分布式的实现,其实是在多台上机器部署java和JMeter。


其中有一台机器叫做控制机,我们称之为Master,主要用于JMeter脚本分发和收集汇总Slaves的测试结果。


其他机器叫做压力机,或者叫负载机,我们称之为Slaves,数量可以是1台或多台,主要用于执行JMeter脚本并将结果反馈给Master。


我们来看下Master和Slaves的运行过程:

  •    Master运行时,会把JMeter脚本,分发给其他Slaves。

  •  Slaves获取到脚本后,会以命令行的方式,运行JMeter脚本,并把执行产生的数据回传给Master。

  • Master汇总收集所有Slaves运行的结果。

我们来看下下面这张图,能够帮助我们理解这段话:

【性能测试系列】JMeter核心技术:分布式压测和参数化


【性能测试系列】JMeter核心技术:分布式压测和参数化

JMeter分布式环境搭建

搞清楚了JMeter分布式的原理,接下来我们来看下JMeter分布式环境搭建的具体步骤:

假设有3台机器:

    Master: 10.0.0.1

    Slave1: 10.0.0.2

    Slave2: 10.0.0.3


  • Master配置

在Master上安装JMeter,并修改jmeter.properties文件的remote_honsts,如下图所示,端口(server_port)如果不冲突,可以不用改,用默认的1099即可:

【性能测试系列】JMeter核心技术:分布式压测和参数化


  • Slave配置

    1. 在Slave上安装JMeter,并修改jmeter.properties文件配置,如下图所示:

    【性能测试系列】JMeter核心技术:分布式压测和参数化

        注意:

              1. 端口如果没有被其他应用程序占用,可以不用修改server_port。

              2. remote_hosts不用改。

        2.  启动JMeter/bin目录下的jmeter-server。


  • 以上配置完成后,我们就可以在Master上执行以下命令运行我们的脚本进行性能测试了:

  •          jmeter -n -t test.jmx -l test.jtl -e -o test_report

以上就是JMeter分布式的运行原理和搭建步骤,接下来我们来了解下参数化。


【性能测试系列】JMeter核心技术:分布式压测和参数化



【性能测试系列】JMeter核心技术:分布式压测和参数化
【性能测试系列】JMeter核心技术:分布式压测和参数化



【性能测试系列】JMeter核心技术:分布式压测和参数化
【性能测试系列】JMeter核心技术:分布式压测和参数化



JMeter参数化
【性能测试系列】JMeter核心技术:分布式压测和参数化


为什么要做参数化

讲参数化之前,我们先来思考一个问题,为什么要做参数化?

原因主要有以下两点:

  • 缓存

    • 缓存的作用是为了提高数据的处理效率而设置的,比如某个用户频繁重复获取某一个商品的信息,有极大可能就是访问的缓存的数据,这种场景和实际的线上场景显然是不符合的。

    • 而线上实际场景可能是多个用户获取多个不同的商品信息,这时候很大可能不是访问的缓存数据。

    • 而cpu读取缓存的速度会比不读取缓存的速度快很多,这样会让性能测试结果和线上的实际运行情况不符合。

  •  业务的需要

    • 举个实际的例子,比如买车票,同一天同一车次,一个人只能买一张,这个时候如果不对用户做参数化,就会导致购票失败。


【性能测试系列】JMeter核心技术:分布式压测和参数化


JMeter参数化

JMeter参数化有很多种,这里介绍下常用的3种方式:

  1. CSV Data Set Config组件:将参数放在txt或者csv文件中

  2. 以用户登录的请求参数:phone(手机号),password(密码)为例

    1. 新增一个存放参数化数据的文件:user.csv

      【性能测试系列】JMeter核心技术:分布式压测和参数化

    2. 添加一个csv Data Set Config

      【性能测试系列】JMeter核心技术:分布式压测和参数化

    3. 在HTTP Requests里使用参数:

      【性能测试系列】JMeter核心技术:分布式压测和参数化


  3. User defined variable: 通常用来配置脚本公共的参数,比如域名,端口号等

    1. 新增一个config element - User defined variable组件:

      【性能测试系列】JMeter核心技术:分布式压测和参数化

    2. 在HTTP Requests里使用:

      【性能测试系列】JMeter核心技术:分布式压测和参数化


    3. Function Helper(函数助手)中的函数:如__CSVReader,__Random等

    • __Random可用于生成随机数,用法:


      【性能测试系列】JMeter核心技术:分布式压测和参数化

    • __CSVRead可用于读取文件,用法:

      【性能测试系列】JMeter核心技术:分布式压测和参数化



【性能测试系列】JMeter核心技术:分布式压测和参数化

下一期预告:JMeter二次开发和Beanshell脚本


【性能测试系列】JMeter核心技术:分布式压测和参数化

扫描二维码,技术文章第一时间获取!






推荐阅读

福利 | 

性能测试 |

测试开发系列 | 

测试开发系列 | 

自动化测试 |

测试必须懂 |