性能测试/监控工具
年初的时候做了些性能测试工作,现将用到的软件及使用方式简单记录一下。
一、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
