本文介绍: 作为一位过来人也是希望大家少走一些弯路,如果你不想再体验一次学习时找不到资料,没人解答问题,坚持几天便放弃的感受的话,在这里我给大家分享一些自动化测试的学习资源,希望能给你前进的路上带来帮助。由于 Jmeter 是 Java 应用,对 CPU 和内存的消耗较大,在需要模拟大量并发用户数时,单机很容易出现 JAVA 内存溢出错误,导致测试脚本本身就有瓶颈。Jmeter 支持分布式压测,将需要模拟的大量并发用户分发到多台压力机,使 Jmeter 拥有更大的负载量,满足真实业务场景(高并发场景)

一、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 拥有更大的负载量,满足真实业务场景(高并发场景)

分布式的最终目的
确保压力机不会出现性能瓶颈
在后面进行性能分析时,不需要考虑压力机是否会导致性能瓶颈的主要原因之一
二、分布式原理

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

Cnotroller 是控制机,Slaves多个压力机
分布式测试中,Cnotroller 通过命令行将测试脚本分发给所有 Slave
Slave 不需要启动 Jmeter GUI,通过 CLI 模式执行测试
Slave 执行完后,会把结果回传给 Master
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=falsefalse改成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
  1. 输入命令:jmeter-server -Djava.rmi.server.hostname=172.16.2.114 ,启动 anget 节点。jmeter-server 后面的参数指定 agent 的 IP

3、启动jemter

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

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

总结

感谢每一个认真阅读文章的人!!!

作为一位过来人也是希望大家少走一些弯路,如果你不想再体验一次学习时找不到资料,没人解答问题,坚持几天便放弃的感受的话,在这里我给大家分享一些自动化测试的学习资源,希望能给你前进的路上带来帮助。

文档获取方式: 

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

这份文档,对于想从事【软件测试】的朋友来说应该最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!

 以上均可以分享,只需要你搜索vx公众号:程序员雨果,即可免费领取

原文地址:https://blog.csdn.net/yjt2045263063/article/details/134752546

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_26912.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注