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

news2024/11/16 11:44:11

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分布式环境搭建的具体步骤:

假设有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即可:

  • Slave配置

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

        注意:

              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参数化

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

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

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

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

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

    2. 添加一个csv Data Set Config

    3. 在HTTP Requests里使用参数:

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

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

    2. 在HTTP Requests里使用:

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

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


如果文章对你有帮助,记得点赞,收藏,加关注。会不定期分享一些干货哦......

END配套学习资源分享

最后: 为了回馈铁杆粉丝们,我给大家整理了完整的软件测试视频学习教程,朋友们如果需要可以自行免费领取 【保证100%免费】

加入我的软件测试交流qq群:110685036免费获取~(同行大佬一起学术交流,每晚都有大佬直播分享技术知识点)

软件测试面试文档

我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

在这里插入图片描述

全套资料获取方式:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/637329.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

OpenCV项目开发实战--对图像进行非真实感渲染-附Python、C++的代码实现

编写一个过滤器来创建如上所示的风格化/卡通化图像,OpenCV 3 中边缘保留过滤的非常快速的实现。结果与双边过滤非常相似,但速度更快。 用于边缘感知过滤的域变换 它是Eduardo Gastal 和 Manuel Oliveira 在SIGGRAPH 2011 上题为“边缘感知图像和视频处理的域变换”的论文的部…

MM ME21n/Me22n 采购订单创建保存后增强点

有2处可以增强 我们可以在 013 这里 做这个增强 debug可以看到参数 传递到外部系统中 另外一处是

【VMware】VMware17安装实践记录

目录 1、下载地址 2、安装 2.1 更改一下安装路径 3、激活 前言:本博文记录博主自己安装的过程,便于后续自己学习使用 1、下载地址 联系博主 2、安装 2.1 更改一下安装路径 移除更新和加入计划 3、激活 可使用30天版本

ABeam中国2023社招 | ABeam旗下艾宾信息技术开发(上海)热招职位

招聘岗位 SAP SD Consultant (English Speaker) 职位要求 ■ 3年以上SD项目实施或支持经验 ■ 有效的沟通技巧,快速的反应和积极的态度 ■ 能够在压力下工作或面对挑战 ■ 具备ABAP调试和编程能力 ■ 有MM交叉模块知识优先 ■ 良好的英语能力 SAP EWM/MM Co…

易基因:NAR:ChIP-seq等揭示蛋白质酰基化与c-di-GMP协同调控放线菌发育与抗生素合成机制|项目文章

易基因细菌ChIP-seq测序分析结果见刊《Nucleic Acids Research》 大家好,这里是专注表观组学十余年,领跑多组学科研服务的易基因。 2023年06月07日,华东理工大学生物工程学院和生物反应器工程国家重点实验室叶邦策教授和尤迪副教授为共同通…

Redis命令-List、Set和SortedSet类型

1. List类型 与Java中LinkedList类似,可以看做是一个双向链表结构,既支持正向检索也可以支持反向检索。 关于BLPOP和BRPOP,需要设置阻塞时间 此时在另一个客户端中,在user2中添加一个元素 则在第一个客户端中,阻塞解除…

【图神经网络】用PyG实现图机器学习的可解释性

Graph Machine Learning Explainability with PyG 框架总览示例:解释器The Explanation ClassThe Explainer Class and Explanation SettingsExplanation评估基准数据集Explainability Visualisation实现自己的ExplainerAlgorithm对于异质图的扩展解释链路预测 总结…

如何在Windows 10中创建提升的命令提示符快捷方式

命令提示符是在“命令提示符”窗口中键入计算机命令的入口点。通过在提升的命令提示符中键入命令,你可以在不使用 Windows 图形界面的情况下在计算机上执行需要管理员权限的任务。 一、右键单击或按住桌面上的空白区域,然后单击“新建”和“快捷方式”。 二、将下面的任一…

如何使用Postman生成curl?

生成在Lunix系统调接口的curl 直接看图操作 点击</>即可&#xff01;

Kali Linux 简介

概要 Kali Linux 是安全专家和以及网络安全爱好者所使用的工具&#xff0c;你不应该也不允许使用它来对他人的计算机系统进行未经允许的任何活动。任何使用它带来的法律后果和损失&#xff0c;将由使用者自行承担。我们之所以推荐 Kali Linux&#xff0c;是希望有更多的人来保护…

Spring架构篇--2.7.6 远程通信基础--Netty流程总结

前言&#xff1a;虽然netty 内部的流程比较复杂&#xff0c;但是对于用户来说还是非常友好的&#xff0c;我们只需要进行必要的参数设置&#xff0c;以及添加处理业务的handler 即可&#xff1b;本文对netty 进行阶段性的回顾。 1 首先看下netty 整体的一个工作流程图&#xf…

el-form表单全部/部分添加一样字段内容并表单校验(复制即可实现)

需求&#xff1a;表单有俩个按钮&#xff0c;一个是全部添加&#xff0c;一个是部分添加默认如下&#xff1a; 点击添加饮品爱好后如下&#xff0c;可以添加多个 点击添加全部&#xff0c;并且点击提交按钮后的表单校验,如下图&#xff1a; 全部代码如下&#xff0c;可自行复制…

Linux 6.3更新补丁修复XFS元数据损坏的问题

导读一些 XFS 用户曾反馈&#xff0c;在升级到最新的 Linux 6.3.3 point releases 之后&#xff0c;出现了元数据损坏的问题。 一些 XFS 用户曾反馈&#xff0c;在升级到最新的 Linux 6.3.3 point releases 之后&#xff0c;出现了元数据损坏的问题。对此&#xff0c;内核开发…

Electron 进程间通信的实现

electron Electron 进程间通信的实现 作者&#xff1a;李俊才 &#xff08;jcLee95&#xff09;&#xff1a;https://blog.csdn.net/qq_28550263 邮箱 &#xff1a;291148484163.com 本文地址&#xff1a;https://blog.csdn.net/qq_28550263/article/details/131136140 【介绍】…

【LeetCode】HOT 100(9)

题单介绍&#xff1a; 精选 100 道力扣&#xff08;LeetCode&#xff09;上最热门的题目&#xff0c;适合初识算法与数据结构的新手和想要在短时间内高效提升的人&#xff0c;熟练掌握这 100 道题&#xff0c;你就已经具备了在代码世界通行的基本能力。 目录 题单介绍&#…

一款开源、免费的微信管家系统,助你快速搭建微信应用

JeewxBoot是一款免费的JAVA微信管家平台&#xff0c;支持微信公众号、小程序、微信第三方平台、抽奖活动等。JeewxBoot已经实现了系统权限管理、公众号管理、抽奖活动等基础功能&#xff0c;便于二次开发&#xff0c;可以快速搭建微信应用&#xff01; 技术架构&#xff1a;Sp…

代码随想录|day13| 栈与队列part03 ● 239. 滑动窗口最大值● 347.前 K 个高频元素● 总结

239. 滑动窗口最大值--------知识点&#xff1a;单调队列 链接&#xff1a;代码随想录 自己写的&#xff0c;报错&#xff1a; class DandiaoQueue{//一个栈或者队列&#xff0c;基本要有进栈出栈两种操作&#xff0c;这里再加上pop出最大值一种操作//底层是deque public:deque…

网络工程师怎么入门?

首先&#xff0c;要成为一名牛逼的网络工程师&#xff0c;就得有扎实的技术功底。毕竟&#xff0c;技术是王道嘛&#xff01;从最基础的TCP/IP、DNS开始学起&#xff0c;这是咱们的入门基石。当然&#xff0c;也别忘了学习一些常见的编程语言&#xff0c;比如Python、Java等等。…

java -jar 参数传递

前景: 我看spring boot启动时,当指定某个profile的时候,是直接使用 --spring.profiles.active 但是我之前传递参数是使用的是-DpathD:\\ 这样写的,所以我就好奇两种传递参数的区别 可以通过两种方式,下面说说他们的区别 当我们在idea里面指定的时候,就可以看出两者是不同的…