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是同一目录。如果指定jmx文件路径,但是未指定jtl文件路径,jtl在当前执行路径下。
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、使用之前的结果生成文件:jmeter -g test1.jtl -e -o report\resultReport
7、结果文件类型为 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)分布式测试执行
原理
1、Jmeter分布式测试时,选择其中一台作为调度机(master/Controller),其它机器做为执行机(slave/Agent)。当前可以用windows来作为调度机,linux作为执行机。
2、执行时,master会把脚本发送到每台slave上,slave 拿到脚本后就开始执行,slave执行时不需要启动GUI,应该是通过命令行模式执行的。
3、执行完成后,slave会把结果回传给master,master会收集所有slave的信息并汇总。
JMeter也可以使用多台机器运行所谓的代理来分担负载产生器自身的压力,并借此来获取更大的并发用户数,我们只需手动配置一下即可。
1、在所有期望运行JMeter作为负载产生器的机器上安装JMeter,并确定其中一台机器作为 控制器,其他的机器作为 代理。然后运行所有 代理 机器上的JMeter-server.bat文件—假定我们使用两台机器172.190.80.47和172.190.80.68作为 代理;
、在Controller 机器的JMeter安装目录下找到 bin 目录,再找到 jmeter.properties 这个文件,使用记事本或者其他文字编辑工具打开它;
、在打开的文件中查找“remote_hosts=”这个字符串,你可以找到这样一行“remote_hosts=127.0.0.1”。其中的 127.0..0.1 表示运行JMeter代理的机器,这里需要修改为“remote_hosts=172.190.80.47,172.90.80.68”;
、保存文件,并重新启动控制器机器上的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压测分布式部署
分布式测试过程中,需要开启各个agent的。linux下操作,shell脚本实现一键启停。文档参考:jmeter一键启停agent shell脚本
思路:
1、控制机,可以免密登录至其他任意的一台agent机器。
2、agent机器上shell脚本实现,jmeter-server的启动,停止,重启操作。
3、控制机上shell脚本实现,循环对agent机器进行统一的启停操作。
agent脚本:agent_process.sh
#! /bin/bash #获取主机ip
#HOST_IP=`ifconfig eth0 |grep "inet addr"| cut -f 2 -d ":"|cut -f 1 -d " "
HOST_IP=`ifconfig eth0 |grep "inet"|awk '{print $2}' ` function start(){
cd /usr/local/chainup/apache-jmeter-5.1.1/bin
nohup jmeter-server -Djava.rmi.server.hostname=$HOST_IP &
if [[ $? -eq 0 ]]
then
echo "start agent success.........."
else
echo "start agent failed..........."
fi
exit 0
} function stop(){
pids=$( ps -ef | grep jmeter-server | grep -v grep | awk '{print $2}')
for pid in ${pids[*]}
do
kill -9 ${pid}
echo ${pid}
done
if [[ $? -eq 0 ]]
then
echo "stop agent success.........."
else
echo "stop agent failed..........."
fi
}
case $1 in
start)
start
;;
stop)
stop
;;
restart)
stop
sleep 2
start
;;
*)
echo "Usage sh agent_process {start|stop|restart}"
;;
esac
控制器脚本:agent_start_stop.sh
#! /bin/bash ip_arr=("172.17.36.1" "172.17.36.2" ) for ip in ${ip_arr[*]}
do
ssh root@$ip << eeooff
cd /usr/local/chainup/apache-jmeter-5.1.1/bin
sh agent_process.sh $1
eeooff
done
缺点是多台机器时,每启一台需要手动ctrl+c一次。
性能参数调整
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增加了众多的监听器,可用这个。
三、执行实例
例1:生成结果的文件名是带上时间
jmeter -n -t test.jmx -l `date "+%y-%m-%d"`.jtl
其他格式可以参考:https://www.cnblogs.com/runingli/p/10961911.html
待补充。。。。。
jmeter学习记录--03--jmeter负载与监听的更多相关文章
- JMeter学习笔记(六)-负载与监听
1. 场景设计 场景设计的原则:忠于用户实际操作,组合用户的各种操作到场景中来. JMeter场景主要通过线程组设置来完成的,对于复杂场景还需要与逻辑控制器配合完成. 2.场景设置 JMeter线程组 ...
- jmeter学习记录--08--第三方测试组件
我们安装的JMeter版本,功能仍然有欠缺,插件是一种补充,官方提供了很多插件. 官网地址:http://www.jmeter-plugins.org/, 里面有很多可以安装到JMeter的插件,基本 ...
- jmeter学习记录--07--jmeter元件
通过jmeter元件可以模拟负载.参数化.设置关联.设置检查点.设置集合点.控制场景运行.监控测试结果等. 1.逻辑控制器:比如foreach控制器,查询到了订单并要对每个订单进行出库操作,以订单号作 ...
- 记录Jmeter集成Jenkins运行Ant做接口监听
最近在鼓捣Jmeter的接口测试,把他集成到了Jenkins上做自动化接口监听.把操作记录下来. 首先就是进行接口测试的编写.打开Jmeter.主要是把接口的测试逻辑和断言处理调通后就OK了,接口程序 ...
- jmeter学习记录--10--二次开发环境搭建
JMeter源码集成到Eclipse.JMeter二次开发(1)-eclipse环境配置及源码编译 ,根据此文章记录将jmeter源码集成到myecplise 第一步:下载jmeter源码http:/ ...
- Jmeter 04 JMeter 负载与监听
1. 场景设计 2. 场景设置 3. JMeter性能参数配置 4. 测试监听
- JMeter学习笔记——认识JMeter(1)
拿到一个自动化测试工具,我们第一步就应该了解它能提供我们哪方面的功能(最直接的方法就是从官网获取),接下来就是简单的对这个工具进行“功能测试”了,当然这里的功能测试不是让你找它存在的bug,而是让自己 ...
- Jmeter学习一:Jmeter性能测试环境搭建(Windows下)
最近刚开始接触Jmeter性能测试,现总结环境搭建如下: 一.windows安装JDK步骤与环境变量配置: 1.先将下载的JDK安装到其默认目录:C:\Program Files\Java\jdk1. ...
- Jmeter学习前提:Jmeter安装
一.Jmeter下载 1. 前提:已经安装 jdk8+ 1.1 JDK下载 a. 进入jdk8+下载地址:https://www.oracle.com/technetwork/java/javase/ ...
随机推荐
- Spring Boot使用AOP在控制台打印请求、响应信息
AOP称为面向切面编程,在程序开发中主要用来解决一些系统层面上的问题,比如日志,事务,权限等. AOP简介 AOP全称Aspect Oriented Programming,面向切面,AOP主要实现的 ...
- WEB 实时推送技术的总结
前言 随着 Web 的发展,用户对于 Web 的实时推送要求也越来越高 ,比如,工业运行监控.Web 在线通讯.即时报价系统.在线游戏等,都需要将后台发生的变化主动地.实时地传送到浏览器端,而不需要用 ...
- 2019元月新SAP项目落地记
2019元月新SAP项目落地记 ~ 追求绝对安全感,要求无缝衔接 ~ 元旦刚过,我就开始了新SAP项目的寻找之旅. 笔者追求绝对的安全感,以及新旧项目之间的无缝衔接.即不能让自己长时间的闲着无项目做, ...
- arcgis api 3.x for js 入门开发系列六地图分屏对比(附源码下载)
前言 关于本篇功能实现用到的 api 涉及类看不懂的,请参照 esri 官网的 arcgis api 3.x for js:esri 官网 api,里面详细的介绍 arcgis api 3.x 各个类 ...
- 逛csdn看见的一个知识阶梯,感觉不错
逛csdn看见的一个知识阶梯,感觉不错: 计算机组成原理 → DOS命令 → 汇编语言 → C语言(不包括C++).代码书写规范 → 数据结构.编译原理.操作系统 → 计算机网络.数据库原理.正则表 ...
- Python开发爬虫之静态网页抓取篇:爬取“豆瓣电影 Top 250”电影数据
所谓静态页面是指纯粹的HTML格式的页面,这样的页面在浏览器中展示的内容都在HTML源码中. 目标:爬取豆瓣电影TOP250的所有电影名称,网址为:https://movie.douban.com/t ...
- BGP: 容易实现路由备份,不容易实现等价负载均衡。
一.结论: 1.BGP只能建立备份路由,不能建立等价路由. 2.BGP按照下面的规则进行优选路由. BGP选择路由的策略 当到达同一目的地存在多条路由时,BGP依次对比下列属性来选择路由: 优选协议首 ...
- SVN下载与安装
首先打开浏览器上百度搜索“SVN”如下图: 或者点击:https://tortoisesvn.net/downloads.html 打开后链接后选择Downloads,选择需要下载的版本,比如我电脑是 ...
- django源码分析 请求流程
一.从浏览器发出一个请求,到返回响应内容,这个过程是怎么样的? 1. 浏览器解析输入的url 2. 查找url对应的ip地址 3. 通过ip地址访问我们的服务器 1. 请求进入wsgi服务器(我在这 ...
- 彻底删除mysql服务(清理注册表)
由于安装某个项目的执行文件,提示要卸载MySQL以便它自身MySQL安装,然后我禁用了MYSQL服务,再把这个文件夹删除后,发现还是提示请卸载MYSQL服务. 解决步骤: 1.以管理员身份运行命令提示 ...