性能测试/监控工具
年初的时候做了些性能测试工作,现将用到的软件及使用方式简单记录一下。
一、BadBoy
BadBoy是一个帮助测试和开发复杂动态应用程序的很有用的工具,包括简单而全面的捕获/重放功能,强大的负载测试支持以及详细的报告和图表等;也可以将录制的脚本导出为JMeter支持的jmx格式脚本。
1、安装
-  运行安装软件按提示安装即可 
注意:Badboy使用本机IE浏览器,如果对浏览器版本有要求,则需检查或更新本地IE浏览器版本
2、配置
- 通用设置
Badboy默认在启动后就会录制,可以在菜单栏Preferences中的General页签中修改设置:
例如:设置在启动时不检查新版本而且不立即录制

- 录制设置
在菜单栏Preferences中的Recording页签中修改设置:
例如:增加需要过滤掉的URL

3、录制
- 输入要录制的URL,选中要录制的Step,点击Record按钮或右键Step选择Record Here开始录制

- 如果需要录制多个Step,使用工具栏的Create New Step或右键父Step选择Add Child Step

- 录制完成后可以通过File–Export To JMeter导出JMeter脚本

通过分步录制,之后在JMeter中设置每个Step的循环次数可以实现Loadrunner中的vuser_init、Action、vuser_end效果。
4、插件
- 在Badboy的安装目录下的plugins目录中新增插件目录:

-  在自定义插件目录中创建以下文件: -  init.js使用 int addView(String strTitle, String strPlugin, String strHTML)方法添加一个插件视图使用 void bindKey(int key, int dwModifiers, String strPlugin, String strCommand)方法绑定快捷键badboy.plugin.addView("myplugin","myplugin","plugin.html"); badboy.plugin.bindKey(85,8,"myplugin",'alert("hello world")');
-  plugin.html此html为自定义插件的内容显示页面,下面的例子中显示出了被播放的次数和打开的页面中的链接数: <html> <head> <style type="text/css"> * { font-family: arial; } body { overflow: auto; } </style> <script type="text/javascript"> function init() { window.setInterval(update,2000); } function update() { var played = window.external.summary(1,"played"); document.getElementById('played').innerHTML = "Played: " + played; document.getElementById('linkcount').innerHTML = "Links: " + window.plugin.browser("").document.links.length; } </script> </head> <body onload="init();"> <h2>Example Plugin</h2> <p id="played"> </p> <p id="linkcount"> </p> </body> </html>
-  效果  
-  部分API var p = badboy.plugin; var st = badboy.script; var step = st.find(2); step.set("name", "RC"); var child = p.addChild(step.id, "Child Step", -1); /*window.external == badboy;//true*/
-  参考链接 
 
-  
二、JMeter
JMeter是一个基于Java的开源压力测试工具。
1、安装
-  安装JDK并设置Java环境变量 
-  安装JMeter 
-  配置环境变量 -  新建环境变量: JMETER_HOME:D:\ProgramFiles\apache-jmeter-4.0
-  在 CLASSPATH中添加:%JMETER_HOME%\lib\ext\ApacheJMeter_core.jar;%JMETER_HOME%\lib\jorphan.jar;%JMETER_HOME%\lib\logkit-2.0.jar;
 
-  
2、压力测试
-  运行JMeter安装文件 bin目录中的jmeter.bat启动JMeter
-  导入Badboy录制导出的 jmx脚本File – Open – 选择脚本 
-  创建测试数据 
新建一个用于性能测试时使用的数据文件todo.csv:

使用Excel打开:

- 导入测试数据
在线程组(Thread Group)右键,添加:Add – Config Element – CSV Data Set Config

配置CSV Data Set Config:
选择上一步创建的todo.csv文件,并设置变量:

- 参数化
找到需要发送业务数据的请求,将请求中的参数替换为变量:

-  添加监听器 在线程组(Thread Group)右键,添加: Add–Listener–View Result Tree、Aggregate Graph和Response Time Graph-  View Result Tree 察看结果树:记录每一个请求的请求和响应情况 
-  Aggregate Report 带图形的聚合报告,会按请求的名称对请求作统计分析 
-  Response Time Graph 随时间的响应时间图 
 
-  
-  设置线程相关属性  -  Number of Threads 线程(用户)数;上图中设置了200个线程(用户)。 
-  Ramp-Up Period 表示所设置的线程数在多少秒内启动;上图设置了200个线程,在500秒内启动完,即平均每5秒加载2个用户。 
-  Loop Count 设置循环次数,如果设置为 Forever(永远),则需要手动停止。
-  Duration 持续时间;上图中设置了持续600s,即1分钟。 
 
-  
-  点击启动(Start)按钮即可开始测试 
3、报告参数解释

-  聚合报告 -  Label显示JMeter的Element的名称,例如HTTPRequest的请求地址。 
-  Samples一共发出的请求数,如果模拟10个用户,每个用户迭代10次,每次发送1个请求,那么这里显示100。 
-  Average平均响应时间——默认情况下是单个 Request 的平均响应时间,当使用了 Transaction Controller 时,也可以以Transaction 为单位显示平均响应时间。 
-  Median中位数,也就是 50% 用户的响应时间。 
-  90% Line90% 用户的响应时间(不超过xx )。 
-  Min最小响应时间 
-  Max最大响应时间 
-  Error%出现错误的请求的数量/请求的总数 
-  Throughput吞吐量——默认情况下表示每秒完成的请求数(Request per Second),当使用了 Transaction Controller 时,也可以表示类似 LoadRunner 的 Transactionper Second 数。 
 
-  
-  图形报告 -  样本数目发送到服务器的所有请求数 
-  最新样本服务器响应最后一个请求的时间 
-  吞吐量服务器每分钟处理的请求数。是指在没有帧丢失的情况下,设备能够接受的最大速率。 
-  平均值总运行时间除以发送到服务器的请求数 
-  中间值时间的数字,有一半的服务器响应时间低于该值而另一半高于该值。 
-  偏离服务器响应时间变化、离散程度测量值的大小,换句话说,就是数据的分布。偏离值是一个观察测试环境和系统稳定性的数据,偏离值越小则环境越稳定,所测得的数据越有效,反之,如果其值太大则说明环境不稳定,在这种情况下测得的数据就没有什么价值。所以,在搞测试的时候,必须要保证偏离值是小的。 
 
-  
三、M/Monit
Monit是一个开源监控管理工具(类似supervisor),能够监控linux系统的负载、文件、进程等。当系统负载过高、监控文件被篡改、进程异常退出时,能够发送邮件报警,并能够自动启动或关闭异常进程。Monit内嵌web界面,能够看到当前主机上的监控项状态。M/Monit是一个集中式管理多台Monit的可视化工具。
1、M/Monit
-  解压并还原文件 
gzip -d mmonit-3.7.1.tar.gz
tar -xf mmonit-3.7.1.tar

- 修改MMonit配置
M/Moint默认端口是8080,可以在conf/server.xml文件中修改web监控页面地址端口:
<Connector address="*" port="8888" processors="10" />

- 修改防火墙配置
开放8888端口:
vi /etc/sysconfig/iptables

重启防火墙
service iptables restart
- 启动和停止
切换到bin目录下,执行:
#启动
./mmonit
#停止
./mmonit stop

-  访问监控服务首页 -  URL http://192.168.148.128:8888/  
-  用户 管理员:admin/swordfish 普通用户:monit/monit  
 
-  
2、Monit
-  解压并还原文件 
gzip -d monit-5.25.2.tar.gz
tar -xf monit-5.25.2.tar

- 配置M/Monit
修改conf/monitrc文件,取消下面行的注释,并将IP和端口改为M/Monit所在的机器IP和它的端口:

- 配置要监听的进程
修改conf/monitrc文件,配置要监听的进程文件,以Tomcat为例:
check process tomcat with pidfile /var/run/tomcat.pid

如果没有进程文件,需要先创建,参考:Tomcat将pid输出到文件
- 启动
在monit安装目录下,执行:
./bin/monit -c ./conf/monitrc
其中使用-c指定配置文件的位置。
启动之后再刷新M/Monit的监控页面,即可看到如下界面,表示监控成功:

- 停止
与启动类似,执行:
./bin/monit -c ./conf/monitrc quit
