jmeter分布式(四)

一、gui

jmeter的gui主要用来调试脚本

1、先gui创建脚本

先做一个脚本

演示:如何做混合场景的脚本?

用211的业务比例

①启动数据库服务

数据库服务:包括mysql、redis

mysql端口默认3306

bash 复制代码
netstat -lntp | grep 3306

处于监听状态,6379是redis的默认端口

bash 复制代码
netstat -lntp | grep 6379

项目服务端口18089

bash 复制代码
netstat -lntp | grep 18089

②访问接口文档swagger

211可以转换出两个压测的业务
一个是注册,一个是注册登录添加商品

两个分别是50%

③添加线程组

jmeter---添加线程组--添加--线程--用户--线程组
转换出两个压测业务

④添加吞吐量控制器

jmeter---添加-逻辑控制器--吞吐量控制器
转换出两个压测业务.

第一个压测业务是包括注册、登录、添加商品

第二个压测时业务是注册

各自50%

⑤添加取样器http请求

jmeter---添加-取样器--http请求

转换出两个压测业务

第一个压测业务是包括注册、登录、添加商品
第二个业务是注册

根据注册swagger、来写,入参

一般插入id可以不用填写

addtime也可以不用填写

复制粘贴入参数据到jmeter中

路径根据url

⑥添加http信息头管理器、

都是传json

⑦添加http请求默认值

根据接口文档填写ip和端口

⑧添加监听器,查看结果树

⑨添加断言

断言最好都添加上

二、非gui

-n非gui模式执行jmeter

-t执行测试文件所在的位置,指定要运行jmeter的脚本,不在当前路径,需要将完整路径写出

-l指定生成的结果文件,即就是jtl文件

-e测试结束后,生成测试报告

-o指定测试报告html的存放位置

-r远程启动

1.单机压力机

①申请压力机

linux压力机上安装jdk、jmeter

在usr/local下安装

直接将window上的jmeter上传到linux压力机上,因为调试脚本涉及到的插件也可用上

②脚本上传到压力机

注:如果脚本涉及到csv参数文件,需要将csv'参数文件上传至linux下jmeter的bin目录下

上传前需要将聚合报告,监听器禁用

5个线程,每30s加一个,即就是150

持续时间需要大于Rang up时间150,再运行50秒,就设置200

jmeter上传成功后验证一下jmeter版本、是否可用

③初始化

有两个地方

第一个,存放测试脚本的路径需要创建一个存放html报告的目录

在运行脚本之前,res目录下必须为空

第二,再不考虑存量数据的情况下,将数据库表中的数据清理

④执行脚本

⑤查看结果

结果

在13s内完成548次请求


打开聚合报告

ko失败的请求数量

resopntime响应时间

tps

怎么查看jtl文件?

jtl可以在任意监听器打开,如查看结果树、聚合报告、tps、响应时间。

如在聚合报告中打开,点击浏览

如tps、响应时间

先看tps

添加tps

点击浏览



响应时间

2.分布式

有的时候一个压力机达不到目标,就需要用到分布式

毕竟单机资源有限,比较难以支持较大的并发,单机的压力机也是有瓶颈

2.1分布式原理

官网:https://jmeter.apache.org/usermanual/jmeter_distributed_testing_step_by_step.html

一台服务机作为控制机

其余机器都是作为负载机

targe请求的服务

控制器通过发送信号远程控制负载机的启动和停止,同时收集负载机数据及汇总

负载机主要是启动线程来访问服务器,及被压测服务器target

一般在worker一般是启动jmeter-server控制机远程控制负载机,负载机启动线程请求target获取数据后回传给控制机

分布式时脚本放在哪里?

一个controller多个worker

执行非gui时,脚本传到服务器上,现在是分布式,脚本应该传到哪里?

会将脚本传到controller控制机上,执行时会把脚本发到每个负载机即每个worker,负载获取到脚本后开始执行脚本,执行完后将数据传给控制机进行汇总。

2.2分布式压测注意事项

防火墙需要进行关闭,防火墙若不关闭,端口需要打开。

所有的客户端要在同一子网上。

确保jmeter可以访问server

确保jmeter与java版本一样

禁用ssl

2.3环境准备

需要3个虚拟机

用 181做Controller(控制机)

用182,183做Worker (负载机)

同时这三个虚拟机都要安装jdk,jmeter



查看jdk版本

三台虚拟机安装jmeter

本机的jmeter传到虚拟机的usr/local目录下

上传完后查看jmeter版本

2.4 分布式配置

①Worker

182、182

先备份配置文件jmeter.properties

server_port可以修改,也可以不修改默认为1099

禁用ssl

server.rmi.ssl.disable=false,将false改为true

启动jemter

./jmeter-server

在182上看端口是否处于监听状态

验证

控制机telnet负载机,看端口通不通

②Controller

配置控制机前先在window上的jmeter上进行调试

win:用于调试

先备份配置文件jmeter.properties

默认是本机作为负载机

现在的负载机是远程负载机,将remote_hosts=127.0.0.1改成remote_hosts=192.168.117.182:1099

这里必须写远程负载机的ip和端口,多个就以逗号分隔

禁用ssl

将server.rmi.ssl.disable=false改成server.rmi.ssl.disable=true

先通过本机调试一下

jmeter重启一下,重新读取配置文件

在window上调试完后就去linux下进行配置

181上进行配置

先备份配置文件jmeter.properties

现在的负载机是远程负载机,将remote_hosts=127.0.0.1改成remote_hosts=192.168.117.182:1099

这里必须写远程负载机的ip和端口,多个就以逗号分隔

server.rmi.ssl.disable=false

server.rmi.ssl.disable=false改为server.rmi.ssl.disable=true

脚本传到控制机上,会自动将脚本分发到各个负载机上。

单独的测试单场景登录

上传完脚本、执行脚本

通过远程负载去进行执行

bash 复制代码
/usr/local/apache-jmeter-5.1.1/bin/jmeter -n -r -t test.jmx

每个work负载机(压力机)5个线程,到总的控制机汇总10个线程

环境准备

两个虚拟机。1个master,两个slave,Windows本机作为1个master,slave就用虚拟机。

原理:https://jmeter.apache.org/usermanual/jmeter_distributed_testing_step_by_step.html

出现的问题:

java.rmi.RemoteException: Cannot start. localhost.localdomain is a loopback address

Created remote object: UnicastServerRef2 [liveRef: [endpoint:127.0.0.1:43474,objID:[-5a8dd143:17e2852fe88:-7fff, 3673082414768940798]]]

Server failed to start: java.rmi.RemoteException: Cannot start. localhost.localdomain is a loopback address.

An error occurred: Cannot start. localhost.localdomain is a loopback address.

异常信息:服务器启动异常:java远程方法调用抛出异常:无法启动服务。localhost.localdomain是一个本地环回地址

通过hostname命令获取到的主机名是localhost

通过命令cat /etc/hosts查看hosts配置,localhost localhost.localdomain localhost4...指向的是127.0.0.1

解决方法:

指定远程服务器主机的IP地址(rmi.server.hostname)

通过终端命令指定来启动

./jmeter-server -Djava.rmi.server.hostname=192.168.2.2

相关推荐
小林想被监督学习几秒前
RabbitMQ 的7种工作模式
分布式·rabbitmq
初晴~1 小时前
【Redis分布式锁】高并发场景下秒杀业务的实现思路(集群模式)
java·数据库·redis·分布式·后端·spring·
有一个好名字2 小时前
zookeeper分布式锁模拟12306买票
分布式·zookeeper·云原生
yukai080085 小时前
【最后203篇系列】002 - 两个小坑(容器时间错误和kafka模块报错
分布式·kafka
老猿讲编程6 小时前
OMG DDS 规范漫谈:分布式数据交互的演进之路
分布式·dds
C++忠实粉丝6 小时前
服务端高并发分布式结构演进之路
分布式
洛神灬殇7 小时前
彻底认识和理解探索分布式网络编程中的SSL安全通信机制
网络·分布式·ssl
龙哥·三年风水8 小时前
workman服务端开发模式-应用开发-vue-element-admin封装websocket
分布式·websocket·vue
李洋-蛟龙腾飞公司11 小时前
HarmonyOS Next 应用元服务开发-分布式数据对象迁移数据文件资产迁移
分布式·华为·harmonyos
技术路上的苦行僧13 小时前
分布式专题(10)之ShardingSphere分库分表实战指南
分布式·shardingsphere·分库分表