• 0
  • 0
分享
  • 从0到1手把手教你Jmeter分布式压测——软件测试圈
  • 曼倩诙谐 2024-07-30 16:24:06 字数 2228 阅读 731 收藏 0

  一、jmeter为什么要做分布式压测

  jmeter本身的局限性

  一台压力机的 Jmeter 支持的线程数受限于 Jmeter 其本身的机制和硬件配置(内存、CPU等)是有限的

  由于 Jmeter 是 Java 应用,对 CPU 和内存的消耗较大,在需要模拟大量并发用户数时,单机很容易出现 JAVA 内存溢出的错误,导致测试脚本本身就有瓶颈

  JVM 堆内存的局限性

  Java 应用的 jvm 堆内存 heap 受压力机硬件限制,虽然我们可以调整堆内存大小

  cmd 启用 Jmeter GUI 时,也会有提示

  increase Java Heap to meet your test requirements: Modify current env variable HEAP="-Xms1g -Xmx1g -XX:MaxMetaspaceSize=256m" in the jmeter batch file

  翻译:增加 Java 堆内存来满足测试的要求

  但是单机无法支撑数以万计大并发,此时,需要多个压力机进行分布式压力测试,这样性能瓶颈就不会是我们的压力机了

  联想场景

  · 测试 1000 线程并发的场景,但单机只能支持 200 并发无法达到1000

  · 通过分布式(5 台机器起)可以模拟 1000 并发

  分布式压测

  Jmeter 支持分布式压测,将需要模拟的大量并发用户数分发到多台压力机,使 Jmeter 拥有更大的负载量,满足真实业务场景(高并发场景)。

  分布式的最终目的

  · 确保压力机不会出现性能瓶颈

  · 在后面进行性能分析时,不需要考虑压力机是否会导致性能瓶颈的主要原因之一

  二、分布式原理

1-1.jpg

  把上面的动图完整看完,就懂了,原理如下:

  1. Cnotroller 是控制机,Slaves 是多个压力机

  2. 分布式测试中,Cnotroller 通过命令行将测试脚本分发给所有 Slave

  3. Slave 不需要启动 Jmeter GUI,通过 CLI 模式执行测试

  4. Slave 执行完后,会把结果回传给 Master

  5. Master 收集所有 Slave 的结果并汇总成一个结果集

  注意

  压力机也可以叫:负载机、代理机、执行机、肉鸡....各种各样的名字,但他们都是 Slave。

  Master 也可以执行测试脚本,也可以不执行只负责管理。

  三、分布式压测的前提条件已经配置

  注意事项:

  1、保持Contorller和Slave机器的JDK、jmeter以及插件等配置版本一致;

  2、如果测试数据有用到CSV或者其他方式进行参数化,需要将data在每台Slave上复制一份,且读取路径必须保持一致;

  3、确保Contorller和Salve机器在同一个子网里面;

  4、检查防火墙是否被关闭,端口是否被占用(防火墙会影响脚本执行和测试结构收集,端口占用会导致Slave机报错);

  5、分布式测试中,通过远程启动代理服务器,默认查看结果树中的响应数据为空,只有错误信息会被报回;

  6、如果并发较高,建议将Contorller机设置为只启动测试脚本和收集汇总测试结果,在配置文件里去掉Contorller机的IP;

  1、修改Contorller配置

  打开Contorller机下jmeter安装文件下的bin目录:jmeter.properties文件,搜索remote_hosts=127.0.0.1,将Slave机的IP和端口写在后面,比如:

  remote_hosts=127.0.0.1:1099,172.16.6.90:1099,172.16.6.91:1099

  其中172.16.6.90和172.16.6.90为Slave机的IP,每个Agent机之间用英文半角逗号隔开,修改保存。注意默认端口都为1099

  切记不论从主机器都要修改:server.rmi.ssl.disable=true,并且去掉#,否则会报错误

  2、负载机

  首先安装好jdk和jmeter环境,具体见我的上一篇文章。然后打开配置文件 /bin/jmeter.properties 找到并取消这段配置的注释 server.rmi.ssl.disable=false ,false改成true。

  # Password of Trust store
  #server.rmi.ssl.truststore.password=changeit
  #
  # Set this if you don't want to use SSL for RMI
  server.rmi.ssl.disable=true      # 改成true

  输入命令:jmeter-server -Djava.rmi.server.hostname=172.16.2.114 ,启动 anget 节点。jmeter-server 后面的参数指定 agent 的 IP。

1-2.jpg

  3、启动jemter

  启动jmeter后,设置线程组、配置元件、取样器、监听器等原件,点击“运行-远程启动”:

1-3.jpg

  可以选择远程启动一个Slave机,或者选择远程全部启动,即可进行分布式测试了。


作者:小码哥说测试    

来源:http://www.51testing.com/html/84/n-7796984.html

  • 【留下美好印记】
    赞赏支持
登录 后发表评论
+ 关注

热门文章

    最新讲堂

      • 推荐阅读
      • 换一换
          • 1、 安装、卸载测试应用程序应能正确安装到设备驱动程序上;能够在安装设备驱动程序上找到应用程序的相应图标;安装路径应能指定;软件安装向导的UI测试;应用是否可以在android不同系统版本上安装(有的系统版本过低,应用不能适配);没有用户的允许, 应用程序不能预先设定自动启动;对于需要通过网络验证之类的安装,在断网情况下尝试一下;安装时空间不足的情况下是否会导致系统崩溃;软件安装过程是否可以取消,点击取消后,写入的文件是否如概要设计说明处理;安装过程被中断(比如来电、短信等)后是否能够继续安装或者导致系统卡顿、崩溃;软件安装过程中意外情况的处理是否符合需求(如死机,重启,断电);卸载是否安全,...
            12 12 2286
            分享
          •   在当今数字化快速发展的时代,软件系统的稳定性和性能至关重要。为了满足某企业的业务需求,提高软件研发效率和质量,全栈式流水线调度平台项目应运而生。该项目在测试过程中展现出了一系列优秀的实践经验,特别是在性能测试方面,为项目的成功实施提供了有力保障。  一、项目背景与目标  为有序推进某平台建设,召开的某平台建设专题会提出了“一平台、多频道”的多部门协作研发要求,形成以“平台+”为思路的架构升级方案。该项目的目标是建设研发过程中持续集成、持续交付(CICD)的流水线调度和运行平台,支持云上容器化、云下主机两大类流水线运行场景,为该企业云上非信创、信创流水线、云下集中构建流水线的运行提供有效支撑...
            0 0 273
            分享
          •   1.知道为什么要测试  执行渗透测试的目的是什么?是满足审计要求?是你需要知道某个新应用在现实世界中表现如何?你最近换了安全基础设施中某个重要组件而需要知道它是否有效?或者渗透测试根本就是作为你定期检查防御健康的一项例行公事?  当你清楚做测试的原因时,你也就知晓自己想从测试中得到什么了,而这可以让测试规划工作更有效率。知道做测试的缘由可以让人恰当地确立测试的范围,确定测试结果将会揭露什么问题。  或许这一步中最重要的一部分,是让团队提前架设好准备从测试结果中得出正确的结论的心理预期。如果测试是要审查IT基础设施的某个特定方面(比如说新的Web应用),那就没必要着墨于公司整体安全。理解做测...
            13 13 1259
            分享
          • 此文章为在拥有C语言基础的情况下,对小甲鱼的python课程进行学习的笔记,对涉及到的新概念与实用的语法知识进行了总结与归纳。1、Python中的BIFBIF:Built-in Functions,python中的内置函数,即为了方便程序员快速编写脚本程序而直接调用的一种函数。大意如同我们上数学课时定义函数f(x),g(x),h(x)等,而后解题过程中可以直接将数值代入指定的函数中,在这里python的BIF就相当于我们事先定义好的函数。我们较为常见的BIF例如:print() 打印到屏幕,即将括号里的内容显示到屏幕上;input() 接受用户输入并返回,用temp这个变量...
            0 0 1084
            分享
          • 1、背景1.1 项目背景在移动平台服务端接口测试覆盖度为零的情况下,根据服务端接口的特点,以及升级更新的速度较快等,需要开发此框架来实施服务端接口的自动化测试。1.2 接口测试接口测试属于灰盒测试范畴,通常不需要了解接口底层的实现逻辑,但需要测试人员能够使用代码的方式来调用接口。接口测试主要用例测试接口的功能以及接口返回数据的正确性。根据接口测试的复杂度接口测试分为两种。即单一接口测试,以及多接口组合功能测试。由于接口测试是通过代码调用的方式完成,而且接口测试与前端UI属于松耦合(或无耦合)因此通过自动化手段将极大提高测试效率以及回归测试的复用率。本文中提到的接口测试主要是指基于http,ht...
            13 13 3308
            分享
      • 51testing软件测试圈微信