jmeter学习记录--03--jmeter负载与监听

 jmeter场景主要通过线程组设置完成,有些复杂场景需要与逻辑控制器配合。

一、测试计划设计与执行

场景设计

jmete线程组实际是一个线程池,根据用户设置进行线程池的初始优化,在运行时做各种异常的处理。

场景相关的组件介绍:

1、逻辑控制器:比如循环控制器,查询到了订单并要对每个订单进行出库操作,以订单号作为循环条件。

2、配置元件:如ftp请求默认值,多个请求有共同配置时可以把相同点提取出来。

3、定时器:用来设置延迟与同步。如固定吞吐量定时器,尽量保持采样器产生的TPS在一个固定的范围内。

4、前置处理器:处理请求前的准备工作,如参数设置、环境变量设置。比如,jdbc请求前置处理。

5、后置处理器:服务器的响应数据在后续请求中用到,对这些数据做处理。

6、断言:对服务器的响应数据做验证。常用的响应断言、html断言、响应数据大小断言、比较断言、xml断言等。

7、监听器:监听与显示取样器测试结果。对监听器配置有基础功能,如有需要可根据需求定制。

8、函数助手:参数化方法之一,或对数据进行运算、字符编码格式转换、获取运行时参数等。

 

Jmeter场景实现

可参考文章:http://blog.csdn.net/selingchen/article/details/49182943

 

 

场景运行

一种是gui运行,一种是命令窗口运行。可本地化运行,也可远程执行。也支持分布式执行

a) gui是界面的,本地运行直接点击按钮开始即可。

运程运行:远程与本地通过RMI通信,负载机上开启agent程序,控制机上单机按钮远程负载机。

远程运行需要提前配置:

 

b)非gui界面的,这种情况比较省负载机资源。推荐用这种方式来执行测试计划。 

D:\apache-jmeter-3.2\bin>JMeter -n -t test1.jmx -l log.jtl

注意:

1、执行命令前要检查当前目录是否是%JMeter_Home%\bin 目录;如果 JMeter 脚本不在当前目录,需要指定完整的路径;如果要把执行的结果保存在其他地方也要指定完整的路径。

2、如果不指定结果路径,则默认日志文件与jmx是同一目录。

3、指定日志路径的:jmeter -n -t test1.jmx -l report\01-result.csv -j report\01-log.log      

4、默认分布式执行:jmeter -n -t test1.jmx -r -l report\01-result.csv -j report\01-log.log

5、指定IP分布式执行:jmeter -n -t test1.jmx -R 192.168.10.25:1036 -l report\01-result.csv -j report\01-log.log

6、结果文件类型为 jtl 或 csv,测试计划里添加的哪种监听器,就可通过JMeter的相应的监听器浏览结果文件,查看最终的结果。

也可以用xslproc,将jtl格式转为html的形式。

xslproc  d:\jmeter-results-detail-report_30.xsl      log.jtl  >newlog.html   命令待确认

 

问题:如果测试脚本相同,但是要增加并发线程数。多个梯度时,就需要对线程数进行参数设置。若想传入参数,可以使用 -J参数,-J表示设置property的值,作用是覆盖(添加)JMeter中的属性。

1、gui测试计划生成时:线程数一项设置为参数值,${__P(count)} (注意是两个下划线)

2、sh jmeter -n -t test1.jmx -Jcount=100

其中count是属性名称,1是属性的值。在运行时,程序会自动覆盖属性count后再执行

普通的定义变量是:${count}的形式。但这里是通过添加JMeter的属性,属性和参数是不同的,因此在调用中采用${__P(count)}的形式进行调用。

详细可看下__P参数的使用。

 

 

 

 c)分布式测试执行

JMeter也可以使用多台机器运行所谓的代理来分担负载产生器自身的压力,并借此来获取更大的并发用户数,我们只需手动配置一下即可。
1、在所有期望运行JMeter作为负载产生器的机器上安装JMeter,并确定其中一台机器作为 控制器,其他的机器作为 代理。然后运行所有 代理 机器上的JMeter-server.bat文件—假定我们使用两台机器172.190.80.47和172.190.80.68作为 代理;
2、在Controller 机器的JMeter安装目录下找到 bin 目录,再找到 jmeter.properties 这个文件,使用记事本或者其他文字编辑工具打开它;
3、在打开的文件中查找“remote_hosts=”这个字符串,你可以找到这样一行“remote_hosts=127.0.0.1”。其中的 127.0..0.1 表示运行JMeter代理的机器,这里需要修改为“remote_hosts=172.190.80.47172.90.80.68”;
4、保存文件,并重新启动控制器机器上的JMeter,并进入启动 ->远程启动菜单项。就会看到我们刚才添加的两个代理的地址,选中即可运行,如果想同时启动所有代理,选择远程全部启动即可。
要进行分布式测试代理机器上需要添加环境变量,即添加用户变量JMETER_HOME=d:\jmeter,系统变量中的path中添加d:\jmeter\bin(假设jmeter放在d盘根目录下)。

注意事项:

1、各机器jmeter版本和插件版本相同。

2、参数化使用csv文件时,需要手动拷动到所有agent节点上,且路径需要设置成一样的。

3、Jmeter分布式控制过程中,各个Agent启动的线程数之和等于线程组中的配置,不是均分线程组中的配置。

分布式测试总样本数 = 线程数 * 循环次数 * 执行机总数, 样本计数逻辑为:执行机slave执行的测试脚本是由调度机master分发的,故每台执行机执行的测试脚本都是相同的,故而性能测试总样本数 = 测试脚本样本数 * 执行机总数,而测试脚本样本数为线程数 * 循环次数

4、调度机(master)和执行机(slave)最好分开,由于master需要发送信息给slave并且会接收slave回传回来的测试数据,所以mater自身会有消耗,所以建议单独用一台机器作为master。

5、注意到master机器启动后会拷贝jmx文件到slave机器,所以不需要在每台slave机器上也上传一份jmx,只需要在master机器上上传一份jmx脚本即可。

具体参考下这篇文章,写的比较细:JMeter压测分布式部署

 

 

性能参数调整

jmeter作为java应用,负载机是很费资源的。可以调整java的性能参数来提高负载机性能。

apache-jmeter-3.2\bin\jmeter.bat

rem including some tuning recommendations
set HEAP=-Xms512m -Xmx512m

rem Uncomment this to generate GC verbose file
rem set VERBOSE_GC=-verbose:gc -Xloggc:gc_jmeter_%p.log -XX:+PrintGCDetails -XX:+PrintGCCause -XX:+PrintTenuringDistribution -XX:+PrintHeapAtGC -XX:+PrintGCApplicationConcurrentTime -XX:+PrintGCApplicationStoppedTime -XX:+PrintGCDateStamps

set GC_ALGO=-XX:+UseG1GC -XX:MaxGCPauseMillis=250 -XX:G1ReservePercent=20

set SYSTEM_PROPS=-Djava.security.egd=file:/dev/urandom
rem Always dump on OOM (does not cost anything unless triggered)
set DUMP=-XX:+HeapDumpOnOutOfMemoryError

这里可以set heap、gc、dump策略等。heap常规参数有:-xmx、-xms、-xmn、-xx:permSize、-xx:maxPermSize

os为32位时,xmx不要在于1.5G,64位时设置为2GB,-xmn不要超过xmx的1/2。

jvm相关知识:http://docs.oracle.com/javase/8/docs/technotes/tools/windows/java.html#GBGCIEFC

 

二、测试结果

测试监听

用于收集运行结果、如事务响应时间、吞吐量等指标。

summary report或aggregate report。summary report中可调整显示字段等,字段选的越多,IO越高。

jmeter plugins增加了众多的监听器,可用这个。

 

 

 待补充。。。。。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值