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

微信搜索关注公众号:测试小工,第一时间获取最新软件测试技术文章

JMeter分布式压测

 

1. 为什么要做分布式部署?

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

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

 

2. JMeter分布式原理

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

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

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

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

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

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

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

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

【性能测试系列】JMeter核心技术:分布式压测和参数化_第1张图片

 

 

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核心技术:分布式压测和参数化_第2张图片

  • Slave配置

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

    【性能测试系列】JMeter核心技术:分布式压测和参数化_第3张图片

        注意:

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

              2. remote_hosts不用改。

 

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

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

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

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

 

JMeter参数化

 

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

原因主要有以下两点:

  • 缓存

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

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

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

  •  业务的需要

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

 

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

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

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

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

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

      【性能测试系列】JMeter核心技术:分布式压测和参数化_第4张图片

    2. 添加一个csv Data Set Config

      【性能测试系列】JMeter核心技术:分布式压测和参数化_第5张图片

    3. 在HTTP Requests里使用参数:

      【性能测试系列】JMeter核心技术:分布式压测和参数化_第6张图片

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

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

      【性能测试系列】JMeter核心技术:分布式压测和参数化_第7张图片

    2. 在HTTP Requests里使用:

      【性能测试系列】JMeter核心技术:分布式压测和参数化_第8张图片

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

    【性能测试系列】JMeter核心技术:分布式压测和参数化_第9张图片

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

    【性能测试系列】JMeter核心技术:分布式压测和参数化_第10张图片

 

 

 

扫描二维码,关注微信公众号【测试小工】,技术文章第一时间获取

【性能测试系列】JMeter核心技术:分布式压测和参数化_第11张图片

 

 

推荐阅读

福利 | JMeter性能测试视频领取

性能测试 | JMeter核心技术:上篇

测试开发系列 | 测试开发技能树

测试开发系列 | 浅谈CI/CD体系

自动化测试 | 一文搞懂如何选用自动化测试方案

测试必须懂 | 理解Cookies和Session

你可能感兴趣的:(性能测试,jmeter)