年初的时候做了些性能测试工作,现将用到的软件及使用方式简单记录一下。

一、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

  • 录制完成后可以通过FileExport To JMeter导出JMeter脚本

通过分步录制,之后在JMeter中设置每个Step的循环次数可以实现Loadrunner中的vuser_initActionvuser_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">&nbsp;</p>
            <p id="linkcount">&nbsp;</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*/
      
    • 参考链接

      Script Item Property

      OLE Interface API

      Badboy Plugins

      BadBoy插件

二、JMeter

JMeter是一个基于Java的开源压力测试工具。

1、安装

下载apache-jmeter-4.0.zip并解压

  • 配置环境变量

    • 新建环境变量:JMETER_HOMED:\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)右键,添加:AddConfig ElementCSV Data Set Config

配置CSV Data Set Config

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

  • 参数化

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

  • 添加监听器

    在线程组(Thread Group)右键,添加:AddListenerView Result TreeAggregate GraphResponse 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% Line

      90% 用户的响应时间(不超过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

附: