Jmeter大杂烩

Jemeter

安装

windows安装和jmx创建

Jmeter压缩包的下载地址:https://jmeter.apache.org/download_jmeter.cgi

Jmeter这里不分windows环境还是linux环境,这个版本都可以。

img

解压缩到任意文件夹都行,双击解压后文件bin目录下的jmeter.bat,就可以启动jmeter了。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vLCuA0t1-1637031416755)(C:\Users\EDZ\AppData\Roaming\Typora\typora-user-images\image-20211115142906059.png)]

环境变量配置

  • 加入系统变量JMETER_HOME:E:\apache-jmeter-5.1.1如下图:
  • img
  • path后面加上:%JMETER_HOME%\bin;
  • 系统变量CLASSPATH中加入下边的内容:
  • %JMETER_HOME\lib\ext\ApacheJMeter_core.jar;%JMETER_HOME%\lib\jorphan.jar;%JMETER_HOME%\lib\logkit-2.0.jar
  • 确定完成。

jmeter 在linux服务器的安装和执行

配置linux,环境下的jmeter环境:

1.下载:apache-jmeter-5.3.tgz,

https://dlcdn.apache.org//jmeter/binaries/apache-jmeter-5.3.tgz

上传到服务器;(同时本地也要保留一份,以后会用到的)

2.然后解压到当前传的目录:

tar zxvf apache-jmeter-5.3.tgz

3.然后把解压的文件配置到对应的环境变量:

export JMETER_HOME=/root/weilingyan/apache-jmeter-5.3
export CLASSPATH=$JMETER_HOME/lib/ext/ApacheJMeter_core.jar:$JMETER_HOME/lib/jorphan.jar:$CLASSPATH
export PATH=$JMETER_HOME/bin:$PATH:$HOME/bin

4.source /etc/profile 目的让配置文件生效

5.[root@yace01 ~]# jmeter -v

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Y7bW7KkZ-1637031416771)(C:\Users\EDZ\AppData\Roaming\Typora\typora-user-images\image-20211115134022323.png)]

6.JMeter和JMeterPlugin的下载安装;

JMeterPlugin可以把JMeter生成的jtl文件做出很好的统计图,同时还支持机器的cpu、memory、swap、disk io和network的监控,是个不错的插件。

JMeter插件的下载地址: https://jmeter-plugins.org/downloads/all/

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PAeDdRXe-1637031416776)(https://ask.qcloudimg.com/http-save/yehe-1844341/dxeh04w0c3.png?imageView2/2/w/1620)]

1.jmeter-plugins-manager-1.1.jar

2.JMeterPlugins-Extras-1.4.0.zip

3.JMeterPlugins-Standard-1.4.0.zip

对应的云盘下载链接:

链接: https://pan.baidu.com/s/1U0ouoO347gHic9Hz0g5UHA 密码: a78w

二、启用插件
1、客户端插件
(1)将下载的JMeterPlugins-Extras-1.4.0.zip和JMeterPlugins-Standard-1.4.0.zip解压,在lib/ext文件夹下复制JMeterPlugins-Extras.jar和JMeterPlugins-Standard.jar文件,并将其放到Jmeter安装目录的lib/ext文件夹下。

编写测试计划

1.在GUI模式下,新建一个测试计划,形成一个jmx文件(文件中有一些监听文件,比如查看结果树,聚合报告等等文件),保存并上传到linux机器对应目录,可在测试计划里添加对应的定时器,聚合报告等。

2.在linux目录下找到你的测试计划,vim打开进行编辑:

]<stringProp name="ThreadGroup.num_threads">200</stringProp> 线程数<stringProp name="ConstantTimer.delay">100</stringProp>固定定时器的时间间隔

添加过的元器件其对应参数都可以在里面找到,进行参数调整时只要在这里编辑就ok了;

3.执行上述的文件:

找到对应的jmx文件的路径文件,然后开始执行: jmeter –n –t test.jmx –l test.jtl,即可生成测试报告:

test.jtl文件是生成的报告;

4.执行完之后,界面会出现一个 :end of run

如下补充一些,非GUI的一些命令:-h 帮助 -> 打印出有用的信息并退出 -n 非 GUI 模式 -> 在非 GUI 模式下运行 JMeter -t 测试文件 -> 要运行的 JMeter 测试脚本文件 -l 日志文件 -> 记录结果的文件 -r 远程执行 -> 启动远程服务 -H 代理主机 -> 设置 JMeter 使用的代理主机 -P 代理端口 -> 设置 JMeter 使用的代理主机的端口号

结果文件

1.把上述的文件通过,xftp文件然后传入到本次,本地开启GUI的jmeter,然后点击:创建测试计划,然后点击创建监听–聚合报告,创建查看结果树等等;然后点击GUI界面的浏览,把jtl文件加载进来,就可以看到测试的报告结果了;(具体和报告,查看结果树等等) 如下图:

2.注意本地的jmeter在创建计划,编写脚本的时候的jmeter的版本最好和linux的版本一致,不然容易报错;

关键配置说明

jmeter.properties 配置说明
主要包含以下几个方面的配置:
SSL 配置:
重点关注下面几个配置

# 指定 HTTPS 协议层
https.default.protocol=TLS

# 指定 SSL 版本,实际应用中可能需要修改
https.default.protocol=SSLv3

# 设置启动的协议
https.socket.protocols=SSLv2Hello SSLv3 TLSv1

# 缓存控制,控制 SSL 是否可以在多个迭代中重用
https.use.cached.ssl.context=true
JMeter 界面显 示配置
这里就不对其界面显示控制进行说明了,一般情况下默认界面能满足大家的应用了。
JMeter 测试项目自动备份配置

# 设置是否启用自动备份,默认是 true
jmeter.gui.action.save.backup_on_save=true

# 设置自动备份目录,默认备份至 JMeter 根目录的 backups 下
jmeter.gui.action.save.backup_directory=

# 设置自动备份项目数,默认为最近 10 个
jmeter.gui.action.save.keep_backup_max_count=10
远程主机配置

# 配置远程主机的 IP,默认为本机。用逗号","可以设置多个远程主机
remote_hosts=127.0.0.1

# 多个远程主机指定示例如下,其中:后为端口
remote_hosts=127.0.0.1:1099,127.0.0.1:1200,127.0.0.1:1300
对于 RMID 的配置请直接看配置文件中的选项说明
日志管理配置

# 设置日志格式
log_format_type=default

# 设置日志输出级别
log_level.jmeter=INFO

# 设置 junit 日志输出级别
log_level.jmeter.junit=DEBUG

# 设置日志输出目标文件,默认为 jmeter.log
log_file=jmeter.log

等等其他还有 10 多个配置大项

jmeter.bat 关键配置修改
为了更优化的使用 jmeter,需要对 jmeter.bat 中的一些配置根据当前机器的配置进行优化,这里进行关键配置项说明,找到这些配置,对其中的数值根据当前机器的硬件配置来修改。

set HEAP=-Xms2048m -Xmx2048m
set NEW=-XX:NewSize=512m -XX:MaxNewSize=512m
set SURVIVOR=-XX:SurvivorRatio=8 -
XX:TargetSurvivorRatio=50%
set TENURING=-XX:MaxTenuringThreshold=2
if %current_minor% LEQ "8" (
rem Increase MaxPermSize if you use a lot of Javascript in
your Test Plan :
set PERM=-XX:PermSize=512m -
XX:MaxPermSize=1024m
)

组件

Thread Group( 线程组)

​ 线程组是一系列线程的集合,每一个线程代表着一个正在使用应用程序的用户。在 jmeter 中,每个线程意味着模拟一个真实用户向服务器发起请求。

在 jmeter 中,线程组组件运行用户设置线程数量、初始化方式等等配置。例如,如果你设置线程数为 100,那么 jmeter 将创建并模拟测试100 个用户请求到服务器端。

如下图所示:

img

Samplers

我们常用的 jmeter 测试有 HTTP、FTP、JDBC 协议,以及其他各种支持的协议。

在 jmeter 中 Samplers 组件已经实现了哪些协议的支持。如下图所示:

img

  • BeanShell Sampler

这个组件元素允许我们在 jmeter 中写 Bean Shell 脚本,写这个脚本有什么作用?意味着你可以完全的控制和实现自己的需要。灵活定制,自然也就有难度,你得有点脚本功底。

参见图说明:

img

注:每一个 Sampler 都有自己独立的 beanshell 解析器,并且sampler 只能在自己的线程中调用(意味着不可跨线程使用)。

  • FTP Request

FTP Request 元素提供了测试 ftp 服务器的能力,这个元素让我们能够去测试 ftp 的上传、下载功能。下面我们看一下 ftp 元素的基本配置说明:

img

注:我们经常在 windows 和 linux 直接通过 ftp 进行文件传输,建议勾选 Use Binary Mode,避免编码问题。

  • HTTP Request

HTTP Request 提供了 HTTP/HTTPS 协议的测试支持能力。了解下基本的功能。

img

  • Java Request

Java Request 提供了测试 java API 的支持,但要注意要测试的
  java API 需要有对应的测试类,该测试类必须继承AbstractJavaSamplerClient。
  示例如下:
  待测类 class Sum; -> 生成 sum.jar
  继承至 AbstractJavaSamplerClient 的测试类 Class
  TestSum(AbstractJavaSamplerClient) -> 生成 testSum.jar
  注:
  一个 java 测试应该要实现以下几个方法,以便 jmeter java sampler 可以正确调用:

img

注意 testSum.jar 要能调用 sum.jar。将上述 sum.jar、testSum.jar 拷贝至 jmeter 安装目录的 lib/ext下。

img

  • Listeners( 监听器)

在 jmeter 中 Listeners 提供了执行结果生成和显示能力的支持,提供了树形结构、表、图形和日志方式。下面我们先看下几种结果显示示例图。

图形模式:

img

树模式:

img

表模式:

img

日志方式

img

  • Configuration Elements( 即配置元件)

配置元件包含了 Samplers 下各种 Sampler 的默认配置设置,如果有配置默认配置,在 Sampler 下对应的 sampler 就会使用该默认配置。

下面我们看看我们主要用到的默认配置有哪些。

img

下面进行逐一的说明。
CSV Data Set Config
CSV Data Set Config 主要用于读取 csv 格式的文件中数据,实现参数化。

img

HTTP Cookie Manager
HTTP Cookie Manager 主要用于默认 cookie 管理。

img

HTTP Request Defaults
HTTP Request Defaults 用于配置 HTTP request 的默认值,例如 IP、端口等等都设置好默认值后,在后续 HTTPrequest 元素里就不需要重复设置,节省时间。

img

参数化

户定义的变量

最主要的应用是参数化环境的ip和端口,这样,在“HTTP请求默认值”配置元件中填写参数就可以了,这样方便在不同的环境中切换测试

img

img

csv数据文件设置

在jmeter中做参数化,用得最多的就是CSV文件参数化

img

解释:

img

提醒:分隔符不能是参数化的值中的符号,否则会被截断,比如,你参数化整个json,逗号作为分隔符,而json中就有逗号,所以,发送请求的时候,会被截断。

线程共享模式:

img

所有现场:所有的线程共享一个数据文件

当前线程组:每个线程复制一份文件自己独用

当前线程:一个线程组一份文件,线程组内是所有现场

这里我就不演示上面各种模式的取值方式了,大家最好自己实践一下,这样印象更深刻

一个简单的应用(传k-v)

百度搜索,对搜索的关键字参数化

创建参数文件,因为只有一列,我可以很清楚的知道这一列是什么含义,所以没有在首行加变量名;另外,文件内容中,最后只能一个空行

img

循环4次

img

csv数据文件设置,设置为循环取值

img

名称是参数名,值是参数值

引用参数${参数名}

img

运行

第一次循环取第一个值

img

第二次循环取第二个值

img

第三次循环取第三个值

img

第四次循环取第一个值

img

分布式测试

在我们开始之前,有几件事需要检查。

  • 系统上的防火墙已关闭或打开了正确的端口。
  • 所有客户端都在同一个子网上。
  • 如果使用192.xxx或10.xxx IP 地址,则服务器位于同一子网中。如果服务器不使用192.xx或10.xx IP 地址,应该没有任何问题。
  • 确保 JMeter 可以访问服务器。
  • 确保在所有系统上使用相同版本的 JMeter 和 Java。混合版本将无法正常工作。
  • 您已经为 RMI 设置了 SSL或禁用了它。

压测步骤

1、在master和slaves机器上分别按照相同版本的jdk和jmeter
2、在master机器上
1)修改配置文件,进入jmeter/bin目录下

vim jmeter.properties
remote_hosts=192.168.0.102:8899,192.168.0.101:8899(slaves机器的ip和端口)
server.rmi.ssl.disable=true(禁用ssl)
#如果master即作为master也作为slaves
remote_hosts=192.168.0.102:8899,192.168.0.101:8899,master的ip:8899
server_port=8899
server.rmi.ssl.disable=true(禁用ssl)

2)启动jmeter服务

./jmeter-server(linux)
jmeter-server.bat(windows)

3)检查是否启动成功

ps -ef|grep jmeter-server

3、在slaves机器上
1)修改配置文件,进入jmeter/bin目录下

vim jmeter.properties
remote_hosts=127.0.0.1
server_port=8899
server.rmi.ssl.disable=true(禁用ssl)

2)启动jmeter服务

./jmeter-server(linux)
jmeter-server.bat(windows)

3)检查是否启动成功

ps -ef|grep jmeter-server

4、分布式执行
GUI模式 :运行——》远程启动、远程启动全部

non-GUO模式:命令行增加-r参数

jmeter -n -t /Users/jack/Desktop/remote.jmx -r -l /Users/jack/Desktop/jtl/result.jtl -e -o /Users/jack/Desktop/result

jmeter测试某个QPS下的响应时间-设置QPS限制

本次性能测试的需求中提到测试的目的是“了解博客的首页在负载达到20 QPS时的响应时间”,因此需要控制向博客首页发送请求的负载为20QPS。

一种可行的方法是逐步调整测试计划中的线程计算的数量以及为取样器(Sampler)添加定时器(Timer),以使HTTP取样器发出的请求的QPS保持在20个左右。但这种方法耗时耗力,需要经过多次尝试才能达到;另一方法,完全通过设置定时器来控制QPS,一旦取样器的响应时间发生改变(网络环境发生改变),就需要重新调整定时器的等待时间。

Jmeter提供了一个非常有用的定时器,称为Constant Throughput Timer (常数吞吐量定时器),该定时器可以方便地控制给定的取样器发送请求的吞吐量。

弹出菜单(添加—>定时器—>Constant Throughput Timer)选择Constant Throughput Timer

img

img

Constant Throughput Timer 的主要属性介绍:

名称 :定时器的名称

Target throughput(in samples per minute):目标吞吐量。注意这里是每分钟发送的请求数,因此,对应测试需求中所要求的20 QPS ,这里的值应该是1200 。

Calculate Throughput based on :有5个选项,分别是:

This thread only :控制每个线程的吞吐量,选择这种模式时,总的吞吐量为设置的 target Throughput 乘以矣线程的数量。

All active threads : 设置的target Throughput 将分配在每个活跃线程上,每个活跃线程在上一次运行结束后等待合理的时间后再次运行。活跃线程指同一时刻同时运行的线程。

All active threads in current thread group :设置的target Throughput将分配在当前线程组的每一个活跃线程上,当测试计划中只有一个线程组时,该选项和All active threads选项的效果完全相同。

All active threads (shared ):与All active threads 的选项基本相同,唯一的区别是,每个活跃线程都会在所有活跃线程上一次运行结束后等待合理的时间后再次运行。

All cative threads in current thread group (shared ):与All active threads in current thread group 基本相同,唯一的区别是,每个活跃线程都会在所有活跃线程的上一次运行结束后等待合理的时间后再次运行。

​ 该元件仅作用于设置定时器的Target throughput为1200/分钟(20 QPS),设置Calculate Throughput based on 的值为All active threads 。

当然,Constant Throughput Timer只有在线程组中的线程产生足够多的request 的情况下才有意义,因此,即使设置了Constant Throughput Timer的值,也可能由于线程组中的线程数量不够,或是定时器设置不合理等原因导致总体的QPS不能达到预期目标。

添加监听器(Listener)


脚本的主要部分设置完成后,需要通过某种方式获得性能测试中的测试结果,在本例中,我们关心的是请求的响应时间。

Jmeter 中使用监听器元件收集取样器记录的数据并以可视化的方式来呈现。Jmeter有各种不同的监听器类型,因为上HTTP请求,我们可在添加聚合报告,更为直观的查看测试结果。

添加聚合报告,右键点击线程组,在弹的菜单(添加—>监听器—>聚合报告)中选择聚合报告。

img

运行脚本


​ 添加完成聚合报告后,我们来运行脚本,稍后介绍聚合报告的参数。

在运脚本之前,我们来查看一下,各个元件的参数设置:

---------------------------------------------------------------

线程组:

线程数:20

准备时长: 10

循环次数:10

---------------------------------------------------------------

HTTP请求:

名称:fnng.cnblogs.com。

服务器名称或IP :fnng.cnblogs.com

端口号:80

Implementation : java

协议: http

方法: GET

路径:/

---------------------------------------------------------------

常数吞吐量定时器:

Target throughput(in samples per minute):1200.0

Calculate Throughput based on :All active threads

---------------------------------------------------------------

点击工具栏上的运行按钮,或者点击菜单栏“ 运行—>启动 ” 或者使用快捷键ctrl+r 来运行程序。

聚合报告分析


查看聚合报告的运行结果:

img

img

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值