jmter学习.docx
《jmter学习.docx》由会员分享,可在线阅读,更多相关《jmter学习.docx(28页珍藏版)》请在冰豆网上搜索。
![jmter学习.docx](https://file1.bdocx.com/fileroot1/2022-11/24/5a9a5b88-93d8-47c8-b8ef-946e4c07409b/5a9a5b88-93d8-47c8-b8ef-946e4c07409b1.gif)
jmter学习
jmeter
1工具安装
1.1下载jdk和jmeter
可以去jdk官网下载:
jmeter下载的地址是:
http:
//jmeter.apache.org/download_jmeter.cgi
1.2安装jdk
然后给jdk设置环境变量,右键我的电脑-属性-高级-环境变量.
在用户变量中设置:
新建变量名"JAVA_HOME",变量值为:
安装jdk的目录,我的是C:
\ProgramFiles\Java\jdk1.6.0_34.
新建变量名"CLASSPATH",变量值为:
C:
\ProgramFiles\Java\jdk1.6.0_34\lib\dt.jar;C:
\ProgramFiles\Java\jdk1.6.0_34\lib\tools.jar;C:
\ProgramFiles\Java\jdk1.6.0_34\bin
最后在系统变量"Path"的变量值加上%JAVA_HOME%/bin
1.3安装jmeter
解压
设置jmeter环境变量:
在用户变量中,新建变量名"JMETER_HOME",变量值为C:
\apache-jmeter-2.7.
修改"CLASSPATH",在后面添加
;%JMETER_HOME%/lib/ext/ApacheJMeter_core.jar;%JMETER_HOME%/lib/jorphan.jar;%JMETER_HOME%/lib/logkit-2.0.jar
4.在系统cmd命令提示符下输入java-version,如果可以到java版本信息,说明jdk安装成功.
5.运行jmeter,直接打开C:
\apache-jmeter-2.7\bin\jmeter.bat就可以了.
2脚本
2.1录制脚本
采用badboy录制脚本
1点击红色按钮输入地址开始录制
2导出脚本
2.2增强脚本
2.2.1断言
1添加断言
2查看断言结果
2.2.2参数化
2.2.2.1采用函数助手参数化
输入参数文件的路径
CSV文件列号是从0开始的,第一列0、第二列1、第三列2、依次类推然后点击【生成】按钮,则会自动生成我们需要的参数化函数。
复制生成的参数化函数,打开登陆请求页面,在右则的参数化中找到我们要参数化的字段,这里对用户名和密码做参数化,第一列是用户名,列号为0;第二列是密码,列号为1;修改函数中对应的参数化字段列号就可以啦。
2.2.2.2CSV控件方法参数化
1Filename:
E:
\biz.dat文件名,指保存参数化数据的文件目录,可以相对或者绝对路径
2Fileencoding:
UTF-8,biz.dat文件的编码格式,可以使用电脑自带的笔记本另存为时选择编码方式即可
3VariableNames(comma-delimited):
user,pwd参数名称(如:
有几列参数,在这里面就写几个参数名称,每个名称中间用分隔符分割,分隔符在下面的“Delimitet”中定义,为了和文件中的“,”对应,这里也用“,”分割每个参数名,这里的user,pwd,可以被可以利用变量名来引用:
${user},${pwd}
4Delimitet:
定义分隔符,这里定义某个分隔符,则在“VariableNames”用这里定义的分隔符分割参数。
5Allowquotedata:
选项选为“true”的时候对全角字符的处理出现乱码
RecycleonEOF:
是否循环读入,因为CSVDataSetConfig一次读入一行,分割后存入若干变量中交给一个线程,如果线程数超过文本的记录行数,那么可以选择从头再次读入
2.2.3设置关联
关联变量
例如:
上一个请求返回值,下一个请求需要使用。
引用
正则表达式提取;
引用名称即下一个请求要引用的参数名称,如填写num,则可用${num}引用它。
正则表达式中()括起来的部分就是要提取的。
.代表任意字符,*代表出现任意次。
模板,用$$引用起来,如果在正则表达式中有多个正则表达式,则可以是$2$,$3$等等,表示解析到的第几个值给num。
关联cookie
HTTPCookieManager
该属性管理器用于管理TestPlan运行时的所有Cookie。
HTTPCookieManager可以自动储存服务器发送给客户端的所有Cookie,并在发送请求时附加上合适的Cookie.
例如上图中加上coolkie管理器就不会出现匿名用户发帖的情况。
注意:
如果在一个测试计划内有多个CookieManager,Jmeter目前无法指定哪个被使用。
所以,一个测试计划内最好只有一个cookiemanager。
并且,一个manager里的cookie并不能被其它manager所引用。
所以在使用多个CookieManagers时要谨慎。
2.2.4添加事务
2.2.5集合点
PS:
超时时间为0时,默认无超时限制。
超时时间的设定值约束:
超时时间>请求集合数量*1000/(线程数/线程加载时间)
分母计算结果为:
每秒启动的线程数;
请求集合数量:
为设定的性能测试场景的样本并发数量;
不等式右边计算结果为:
加载性能并发样本所需时间(毫秒)
比如线程组的线程数是100,循环次数是10,这里分母中的线程数是100
2.2.6线程
●∙ Thisgroupwillstart Max threads- 设置单台负载机,线程组启动的线程总数为Max个
●∙ First,waitfor N seconds- 启动第一个线程之前,需要等待N秒
●∙ Thenstart N threads- 设置最开始时启动N个线程
●∙ Nextadd N1 threadsevery N2 seconds,usingramp-up N3 seconds- 然后,每隔N2秒,在N3秒内启动N1个线程
●∙ Thenholdloadfor N seconds- 单台负载机启动的线程总数达到Max之后,持续运行N秒
●∙ Finally,stop N1 threadservery N2 seconds- 最后,每隔N2秒,停止N1个线程数。
线程组
1.继续:
继续执行接下来的操作
2.StartNextLoop:
忽略错误,执行下一个循环
3.停止线程:
退出该线程(不再进行此线程的任何操作)
4.停止测试:
等待当前执行的采样器结束后,结束整个测试
5.StopTestNow:
直接停止整个测试
线程属性
1.线程数:
模拟的用户数量
2.Ramp-upPeriod(inseconds):
达到指定线程数所需要的时间。
举例:
线程数设置为50,此处设置为5,那么
每秒启动的线程数=线程数50/5=10
3.循环次数:
选中“永远”,则一直循环下去。
4.DelayThreadcreationuntilneeded:
(大路边的翻译“直到需要时延迟线程的创建”)XX上的翻译都比较含糊,相信不懂然后直接转发的比较多。
大致使这个意思,当线程需要执行的时候,才会被创建。
如果不选择这个选项,那么,在计划开始的时候,所有需要的线程就都被创建好了。
5.调度器:
配合区域3说明吧。
调度器配置
1.持续时间(秒):
在此选项填入N,说明这个计划,从某个开始时间算起,执行N秒后结束。
(会忽略 结束时间 的选项)
2.启动延迟(秒):
在此选项填入N,手动点击开始执行计划,然后延迟N秒后,计划才真正开始执行。
(会忽略 启动时间 的选项)
3.启动时间:
当点击开始测试时,将等到此处填写的启动时间,然后真正开始测试。
4.结束时间:
当开始测试时,将等到指定的开始时间开始测试,然后会停在此处填写的时间点结束。
2.3连接数据库
1、下载jdbc mysql driver:
2、jmeter在测试计划中加载jdbcmysqldriver
3、添加JDBCConnectionConfiguration
4、配置连接信息,注意填写Variablename,DatabaseUrl填写jdbc:
mysql:
//数据库IP或hostname:
端口号/数据库
5、取样器-创建JDBCrequest ,填写Variablename与第4步中Variablename一致。
编写sql。
7、执行可在查看sql语句执行结果
一、MySQL:
driverClass:
com.mysql.jdbc.Driver
org.gjt.mm.mysql.Driver
jdbcUrl:
jdbc:
mysql:
//192.168.0.1:
3306/yourDBName
二、Oracle:
(thin模式)
driverClass:
oracle.jdbc.driver.OracleDriver
jdbcUrl:
jdbc:
oracle:
thin:
@192.168.0.1:
1521:
yourDBName
三、SQLServer:
driverClass:
com.microsoft.sqlserver.jdbc.SQLServerDriver(2005版本及以后)
com.microsoft.jdbc.sqlserver.SQLServerDriver(2000版本)
jdbcUrl:
jdbc:
sqlserver:
//192.168.0.1:
1433;databasename=yourDBName
五、DB2:
1、db2java.zip
driverClass:
COM.DB2Driver
jdbcUrl:
jdbc:
db2:
//127.0.0.1:
5000/DBNAME
2、db2jcc.jar
driverClass:
com.ibm.db2.jcc.DB2Driver
jdbcUrl:
jdbc:
db2:
//127.0.0.1:
5000/DBNAME
3、
driverClass:
com.ibm.db2.jdbc.app.DB2DriverjdbcUrl:
jdbc:
db2:
//127.0.0.1:
5000/yourDBName
3监控
3.1插件配置
打开下载插件地址:
http:
//jmeter-plugins.org/
下载插件jmeter-plugins-manager.jar,将此插件复制到Jmeter的lib下的ext目录下。
重新启动Jmeter。
在打开的Jmeter内,单击菜单选项——PluginsManager打开JmeterPluginsManager窗体
在打开的JmeterPluginsManager窗体单击AvailablePlugins选项,在左边的区域内会显示插件(注:
已安装插件,此处显示空白),勾选中需要安装的插件,单击窗体底部按钮【ApplyChangesandRestartJMeter】
jmeter常用插件安装
JMeterPlugins:
JMeterPlugins-Extras-1.1.2.zip、JMeterPlugins-Standard-1.1.2.zip
1、把JMeterPlugins-Extras.jar/JMeterPlugins-Standard.jar放到jmeter客户端的jmeter/lib/ext下。
2、启动jmeter,添加Listener时就可以看到很多报表。
(启动Jmeter,如果没有报错,证明插件可用)
3.2插件介绍
3.2.1服务器性能监控
插件名jp@gc-PerfMonMetricsCollector
https:
//jmeter-plugins.org/wiki/PerfMonAgent/
1将ServerAgent解压到要监控的服务上,windos运行startAgent.bat,linux运行startAgent.sh
在linux中启动./startAgent.sh是,可能会提示:
“-bash:
./startAgent.sh:
权限不够”,那么我们需要执行命令:
chmod+xstartAgent.sh
2在项目中添加PerfMonMetricsCollector组件
3添加监控对象
host/ip服务器ip,port服务器端口号(运行agent可以看到)
监控的对象有:
cpu,内存(memory),磁盘i/o(disks),网络(network)等。
3.2.2吞吐量
吞吐量BytesThroughputOverTime
每秒传输字节吞吐量,表明Jmeter在测试时,随着时间推移发送和接受的字节数
3.2.3每秒返回的响应码
ResponseCodesperSecond 每秒返回的响应码,表明Jmeter测试期间,随着时间的推移返回的响应码,从中我们可看到测试期间在哪个时间段内出现了错误。
就可以分析在该时间内系统的什么环境因素,导致的错误。
HTTP常见状态码:
200、301、302、404、500
200(成功)服务器已成功处理了请求。
通常,这表示服务器提供了请求的网页。
301(永久移动)请求的网页已永久移动到新位置。
服务器返回此响应(对GET或HEAD请求的响应)时,会自动将请求者转到新位置。
302(临时移动)服务器目前从不同位置的网页响应请求,但请求者应继续使用原有位置来进行以后的请求。
404(未找到)服务器找不到请求的网页。
500(服务器内部错误)服务器遇到错误,无法完成请求
3.2.4每秒钟的响应等待时间
ResponseLatenciesOverTime每秒钟的响应等待时间,表明Jmeter测试期间,随着时间的推移系统的响应等待时间的变化,也是系统随着时间推移,系统效率的变化。
3.2.5响应时间分布
ResponseTimesDistribution 响应时间分布,X轴表示的是响应时间,Y轴表示的是响应次数,F(X,Y)表示系统在某种响应时间内的响应次数是多少,如果在响应时间短的地方,响应次数多,说明系统的效率比较高。
3.2.6每秒钟响应时间
ResponseTimesOverTime每秒钟响应时间,X轴表示的是系统运行的时刻,Y轴表示的是响应时间,F(X,Y)表示系统随着时间的推移,系统的响应时间的变化,可以看出响应时间稳定性。
3.2.7响应时间百分比
ResponseTimesPercentiles响应时间百分比,X轴表示的是百分比,Y轴表示的是响应时间,F(X,Y)表示低于某个百分比的响应时间,比如有80%的响应低于400ms。
3.2.8响应时间用户数
ResponseTimesvsThreads响应时间用户数,X轴表示的是活动线程数,也就是并发访问的用户数,Y轴表示的是响应时间,F(X,Y)表示在某种并发量的情况下,系统的响应时间是多少。
3.2.9每秒处理的事务吞吐量
TransactionThroughputOverTime 每秒处理的事务吞吐量 统计随着时间推移每秒可能的事务吞吐量这里的事务吞吐量计算公式是:
活动线程数*1秒/一个线程的响应时间,比如当一个用户向服务器发出一个请求,在100ms后得到响应,那么事务数等于1*1000ms/100ms=10transcation/s,得到每秒钟可以处理10个事务数的结果。
3.2.10每秒的事务数
TransactionsperSecond每秒的事务数,X轴表示访问结束的时刻,Y轴表示访问量,F(X,Y)表示在某个结束时刻,一共有多少的访问量结束访问。
3.2.11每秒的活动线程数
ActiveThreadsOverTime每秒的活动线程数,X轴表示访问的时刻,Y轴表示活动线程数,F(X,Y)表示某个时刻的活动线程数
11TransactionThroughputvsThreads 每活动线程数可能的事务吞吐量,途中X轴表示的是活动线程数,Y轴表示的是事务吞吐量,F(X,Y)的含义是当系统处于某个活动线程数时,系统当时的事务吞吐量是多少。
比如当有10个活动线程时,事务吞吐量是100/s,而当有20个活动线程时,事务吞吐量是50/s,说明随着用户访问的增加,系统的处理效率开始下降了。
从这个图中我们可以找到一个临界点,在多大的活动线程数时,系统达到最大的吞吐量。
3.2分布式测试
3.2.1分布试原理:
一台调度机(master),其他为执行机(slave)。
执行测试,master将脚本发送到每台salve上,slave拿到脚本开始执行,执行完成将结果传回给master。
3.2.2执行机(slave)配置
1安装jmeter
2添加环境变量:
JMETER_HAOME=D:
\B_TOOLS\apache-jmeter-2.13此处为你的jmeter的路径
3启动bin目录下的:
jmeter-server.bat,启动成功如下图:
4上图上标红的IP和端口会在master里配置时用到。
IP就是slave机器IP,端口默认是1099,端口也可以自定义,这里我自定义为1000
5多台slave的话,重复1~4步骤
3.2.3调度机(master)配置
1、找到Jmeter的bin目录下jmeter.properties文件,修改如下配置,IP和Port是slave机的IP以及自定义的端口(这里端口我自定义为100,后面会讲如何自定义):
remote_hosts=10.13.223.202:
1000,10.13.225.12:
1000
多台slave之前用","隔开,我这配置了2台,可以看到标红的这个就是上面截图slave的IP和Port.
2打开Jmeter,选择运行,有运程启动、运程全部启动两个选项
说明:
1、调度机(master)和执行机(slave)最好分开,由于master需要发送信息给slave并且会接收slave
回传回来的测试数据,所以mater自身会有消耗,所以建议单独用一台机器作为mater。
2、参数文件:
如果使用csv进行参数化,那么需要把参数文件在每台slave上拷一份且路径需要设置
成一样的。
3、每台机器上安装的Jmeter版本和插件最好都一致,否则会出一些意外的问题。
3.3监控指标
聚合报告
聚合报告:
AggregateReport
Label:
每个JMeter的element的Name值。
例如HTTPRequest的Name
#Samples:
发出请求数量。
如第三行记录,模拟20个用户,循环100次,所以显示了2000
Average:
平均响应时间(单位:
)。
默认是单个Request的平均响应时间,当使用了TransactionController时,也可以以Transaction为单位显示平均响应时间
Median:
中位数,也就是50%用户的响应时间
90%Line:
90%用户的响应时间
95%Line:
95%用户的响应时间
99%Line:
99%用户的响应时间
注:
为什么要有*%用户响应时间?
因为在评估一次测试的结果时,仅仅有平均事物响应时间是不够的。
假如有一次测试,总共有100个请求被响应,其中最小响应时间为0.02秒,最大响应时间为110秒,平均事务响应时间为4.7秒,你会不会想到最小和最大响应时间如此大的偏差是否会导致平均值本身并不可信?
我们可以在95th之后继续添加96/97/98/99/99.9/99.99th,并利用Excel的图表功能画一条曲线,来更加清晰表现出系统响应时间的分布情况。
这时候你也许会发现,那个最大值的出现几率只不过是千分之一甚至万分之一,而且99%的用户请求的响应时间都是在性能需求所定义的范围之内的;如下图则是最低响应时间的值出现几率是很小的,实际99%的用户请求响应时间都要20000+。
Min:
最小响应时间
Max:
最大响应时间
Error%:
本次测试中出现错误的请求的数量/请求的总数
Throughput:
吞吐量。
默认情况下标示每秒完成的请求数(具体单位如下图)
KB/sec:
每秒从服务器端接收到的数据量。
衡量一个软件系统性能的常见指标有:
1、并发用户数:
同一时刻与服务器进行了交互的在线用户数量。
并发数反映了软件系统的并发处理能力,和吞吐量不同的是,它大多占用套接字、句柄等操作系统资源。
2、响应时间:
响应时间就是用户感觉到软件系统为其服务所消耗的时间。
对于网站系统来说,响应时间就是从一个页面计时开始,到这个页面完全在浏览器里展现计时结束的这一段时间间隔。
看起来很简单,但其实在这段响应时间内,软件系统在幕后经过了一系列的处理工作,贯穿了整个系统节点。
根据“管辖区域”的不同,响应时间可以细分为:
服务端响应时间——这个时间指的是服务器完成交易请求执行的时间,不包括客户端的反应。
网络响应时间——这是网络硬件交易请求和交易结果所耗费的时间。
客户端响应时间——这是客户端在构建请求和展现交易结果时所耗费的时间。
对于普通的瘦客户端Web应用来说,这个时间很短,通常可以忽略不计;但是对于胖客户端的Web应用来说,从而行成系统的瓶颈,这是要注意的一个地方。
3、吞吐量:
对于软件系统来说,“吞”进去的是请求,“吐”出来的是结果,而吞吐量就是系统处理能力。
具体来说,就是指软件系统在单位时间内能够处理多少个事务、请求、单位数据等。
4、点击数:
每秒发送的HTTP请求的数量。
5、资源利用率:
对不同资源的使用程度,如CPU的占用率、内存的使用率、磁盘的读写指标、网络的占用情况等。
4结果分析
概要
负载测试(LoadTest):
负载测试是一种性能测试,指数据在超负荷环境中运行,程序是否能够承担。
通过逐步增加系统负载,确定在满足性能指标的情况下,系统所能承受的最大负载量。
容量测试(VolumeTest):
确定系统可处理同时在线的最大用户数,使系统承受超额的数据容量来发现它是否能够正确处理。
容量测试,通常和数据库有关,容量和负载的区别在于:
容量关注的是大容量,而不需要表现实际的使用。
压力测试:
通过逐步增加系统负载,确定在什么负载条件下系统处于失效状态,以此来获得系统能提供的最大服务级别。
压力测试可以分为稳定性测试和破坏性测试:
稳定性压力测试。
在选定的压力值下,持续运行24小时以上的测试。
通过压力测试,可以考察各项性能指标是否在指定范围内,有无内存泄漏、有无功能性故障等。
破坏性压力测试。
在压力稳定性测试中可能会出现一些问题,如系统性能明显降低,但很难暴露出其真实的原因。
通过破坏性不断加压的手段,往往能快速造成系统的崩溃或让问题明显的暴露出来。