🚀 作者 :“二当家-小D”
🚀 博主简介:⭐前荔枝FM架构师、阿里资深工程师||曾任职于阿里巴巴担任多个项目负责人,8年开发架构经验,精通java,擅长分布式高并发架构,自动化压力测试,微服务容器化k8s等
🚀 欢迎小伙伴们 点赞👍、收藏⭐、留言💬
🍅文末获取源码联系 配套笔记打包🍅
1.jemter分布式的介绍
Jemter分布式解析是指使用JMeter进行负载测试时,将负载测试任务分发到多个 JMeter 客户端进行执行的一种模式。这种模式可以提高测试的并发能力和吞吐量,并且可以模拟真实的生产环境。
在JMeter分布式解析中,有一个主控制节点和多个被控制节点。主控制节点负责将测试计划分发给被控制节点,并收集执行结果进行统计和分析。被控制节点接收到测试计划后,根据配置进行并发执行,并将执行结果返回给主控制节点。
为了进行分布式解析,需要在主控制节点上进行一些配置。首先,需要设置主控制节点的远程测试属性,指定被控制节点的 IP 地址和端口号。然后,需要配置被控制节点的 IP 地址和端口号,并将它们添加到主控制节点的远程测试计划中。
在被控制节点上,需要启动 JMeter 服务器,并等待主控制节点的指令。一旦主控制节点发送测试计划,被控制节点就会根据配置进行并发执行,并将执行结果返回给主控制节点。
通过使用 JMeter 分布式解析,可以实现大规模的负载测试,并且可以更好地模拟真实的生产环境。同时,通过将负载分发到多个节点进行执行,还能提高测试的吞吐量和并发能力。
2.本地jemter实现分布式压测
2.1解压三个jmeter
2.2配置01和02
2.3启动jemter分布式
2.4启动主配置
2.5简单压测
测试成功
3.代码实现
public class JMeterDistributed {
public static void main(String[] argv) throws Exception {
// 设置JMeter的基础路径和属性文件
String jmeterHome = "D:\\分布式jmeter\\apache-jmeter-5.5";
JMeterUtils.setJMeterHome(jmeterHome);
JMeterUtils.loadJMeterProperties(JMeterUtils.getJMeterBinDir() + "/jmeter.properties");
JMeterUtils.initLogging();
JMeterUtils.initLocale();
// 创建HTTP请求采样器
HTTPSampler httpSampler = new HTTPSampler();
// 设置HTTP请求采样器的属性 setDomain("www.baidu.com")
httpSampler.setDomain("www.baidu.com");
// setPort(80)解析 www.baidu.com:80
httpSampler.setPort(80);
// setPath("/")解析 www.baidu.com:80/
httpSampler.setPath("/");
// setMethod("GET")设置请求方式
httpSampler.setMethod("GET");
// 创建循环控制器
LoopController loopController = new LoopController();
loopController.setLoops(10);
loopController.setFirst(true);
loopController.initialize();
// 定义线程组
SetupThreadGroup threadGroup = new SetupThreadGroup();
threadGroup.setName("测试线程组");
threadGroup.setNumThreads(10);
threadGroup.setRampUp(5);
threadGroup.setSamplerController(loopController);
// 定义测试计划
TestPlan testPlan = new TestPlan("成功的测试计划");
// 结构化测试计划
org.apache.jorphan.collections.HashTree testPlanTree = new org.apache.jorphan.collections.HashTree();
testPlanTree.add(testPlan);
org.apache.jorphan.collections.HashTree threadGroupHashTree = new org.apache.jorphan.collections.HashTree();
threadGroupHashTree = testPlanTree.add(testPlan, threadGroup);
threadGroupHashTree.add(httpSampler);
// 保存生成的测试计划
SaveService.saveTree(testPlanTree, new FileOutputStream(jmeterHome + "/example.jmx"));
// 定义Summarizer输出
Summariser summer = null;
String summariserName = JMeterUtils.getPropDefault("summariser.name", "summary");
if (summariserName.length() > 0) {
summer = new Summariser(summariserName);
}
// 存储结果数据
String logFile = jmeterHome + "/example.jtl";
ResultCollector logger = new ResultCollector(summer);
logger.setFilename(logFile);
testPlanTree.add(testPlanTree.getArray()[0], logger);
// 获取Slave节点
List<String> remoteHosts = new LinkedList<>();
remoteHosts.add("127.0.0.1:10001"); // 你的Slave节点地址或机器名
remoteHosts.add("127.0.0.1:10002"); // 你可以继续添加其他Slave节点
// 初始化分布式测试环境
DistributedRunner distributedRunner = new DistributedRunner();
distributedRunner.setStdout(System.out);
distributedRunner.setStdErr(System.err);
distributedRunner.init(remoteHosts, testPlanTree);
// 启动分布式测试
distributedRunner.start();
// 添加结束信号
Runtime.getRuntime().addShutdownHook(new Thread() {
@Override
public void run() {
distributedRunner.shutdown(remoteHosts);
}
});
}
}
3.1测试成功
4、小结
今天的文章限于篇幅我就先通过一个简单的案例来和大家分享一下 jmeter的基本用法,以便于小伙伴们对 jmeter建立一个直观的印象,更多的玩法,D哥将在后续的文章中和大家继续介绍
原创不易,欢迎点赞+收藏
完整的资料和代码已经整理好,如果有相关操作问题,可以互相沟通交流