使用JMeter做压力测试

1.下载Jmeter

地址:http://jmeter.apache.org/download_jmeter.cgi

2.启动jmeter

运行bin/jmeter.bat

3.添加线程组

在TestPlan节点上右键,Add-->Threads(Users)-->Thread Group。

Number of Threads (Users):要模拟的并发用户量。
Ramp Up Period (in seconds):在多长时间内均匀启动所有的线程。比如Number of Threads设为10,Ramp Up Period设为1,则jmeter每隔0.1秒启动1个线程。
Loop Count:单用户任务重复执行的次数。可以设为Forever,这样jmeter就不会自动停止,需要强制终止。
还可以设置Scheduler Configuration。这里有两组设置:指定StartTime和End Time让jmeter在特定的时间区段内执行工作;Startup Delay表示从当前时刻开始延迟多长时间开始运行,Duration设定运行时长。

4.用jmetr向服务器发送Java Request

当然传统的方法是让jmeter向服务器发送Http Request或FTP Request,但这里不作展示。

假如我们要模拟多用户并发向Zookeeper Cluster发送查询znode的请求,首先要写1个程序来指定单用户的请求行为。

新建一个Java Project,导入jmeter/lib/ext下的两个jar包:ApacheJMeter_core.jar和ApacheJMeter_java.jar。

package test;
 
import org.apache.jmeter.config.Arguments;
import org.apache.jmeter.protocol.java.sampler.AbstractJavaSamplerClient;
import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;
import org.apache.jmeter.samplers.SampleResult;
import org.apache.zookeeper.ZooKeeper;
 
public class Create extends AbstractJavaSamplerClient{
    private String nodePath=null;
    private String timeout_str=null;
    private SampleResult results;
     
     //设置传入的参数,可以设置多个,已设置的参数会显示到Jmeter的参数列表中
    public Arguments getDefaultParameters() {
        Arguments params = new Arguments();
        params.addArgument("nodePath","");
        params.addArgument("timeout_str", "5000");
        return params;
    }
     
    //初始化方法,实际运行时每个线程仅执行一次,在测试方法运行前执行
    public void setupTest(JavaSamplerContext arg0) {
        results = new SampleResult();
        nodePath = arg0.getParameter("nodePath");   //获取在Jmeter中设置的参数值
        if (nodePath != null && nodePath.length() > 0) {
            results.setSamplerData(nodePath);
        }
        timeout_str=arg0.getParameter("timeout_str");
        if (timeout_str != null && timeout_str.length() > 0) {
            results.setSamplerData(timeout_str);
        }
    }
 
     //测试执行的循环体,根据线程数和循环次数的不同可执行多次
    @Override
    public SampleResult runTest(JavaSamplerContext arg0) {
        int timeout=Integer.parseInt(timeout_str);
        boolean success=true;
        results.sampleStart();      //事务的起点
        try {
            ZooKeeper zkp=new ZooKeeper("localhost:2181",timeout,null);
            zkp.getData(nodePath, false, null);
            zkp.close();
        } catch (Exception e) {
            success=false;
        }finally{
            results.sampleEnd();    //事务的终点
            results.setSuccessful(success);     //设置本次事务成功或失败
        }
        return results;
    }
     
    //结束方法,实际运行时每个线程仅执行一次,在测试方法运行结束后执行
    public void teardownTest(JavaSamplerContext arg0) {
    }
}

将project导出为jar包,放到jmeter/lib/ext下,重启jmeter。

在Thread Group上是右击,Add-->Sampler-->Java Request。

设置nodePath和timeout的值。

5.添加Listener

在TestPlan上右击,Add-->Listener-->Aggregate Report。Jmeter生成的报告有多种,这里以Aggregate Report为例。

可以指定将report保存到某个文件,如上图中所示保存到report.csv,在非GUI模式下运行Jmeter这是非常必要的。

可以在bin/jmeter.properties中设置report文件的默认格式,你可能要经常要更改这两项配置:jmeter.save.saveservice.output_format=csv #默认有文件格式为jtl jmeter.save.saveservice.default_delimiter=\t #默认使用","作为域之间的分隔符

点击Configure可以自己定义report中你所关心的数据项。

比如我只关心每个请求是否成功,以及每个请求所用的时间,所以只勾选了两项。

6.为Jmeter安装PerfMon插件

PerfMon用来监控Server的CPU、I/O、Memory等情况。

1. 插件下载地址:http://code.google.com/p/jmeter-plugins/wiki/PerfMon

2. 把JMeterPlugins.jar放到jmeter客户端的jmeter/lib/ext下。

3. 启动jmeter,添加Listener时你就看到PerfMon Metrics Collectors了。

4. 另外还需要把下载下来的PerfMon解压后放到所有的被测试的服务器上,并运JMeterPlugins/serverAgent/startAgent.sh,默认工作在4444端口。

5. 使用PerfMon截图:

再次提醒一下,在非GUI模式下运行Jmeter时指定把result保存到一个文件是非常必要的。

7.非GUI模式下运行Jmeter

具体方法是:先在GUI模式下创建TestPlan,保存为jmx文件。命令行启动jmeter:./ApacheJMeter -n -t testplan.jmx (选项-n表示non-GUI,-t指定TestPlan文件)。运行结束后Aggregate Report和PerfMon Metrics Collector就会保存在你指定的文件中。把保存PerfMon Metrics Collector的文件拖到Jmerter GUI中就可以看到CUP等使用状况拆线图了。

8.远程启动jmeter

应用进场景:用一台机器(称为JMeter客户端)上的jmeter同时启动另外几台机器(称为JMeter远程服务器)上的jmeter。

1. 保证jmeter客户端和jmeter远程服务器采用相同版本的jmeter和JVM。

2. jmeter客户端和jmeter远程服务器最好在同一个网段内。

3. 在jmeter远程服务器上运行JMETER_HOME/bin/jmeter-server (UNIX)或者JMETER_HOME/bin/jmeter-server.bat(Windows)脚本 。

4. 在jmeter客户端上修改/bin/jmeter.properties文件,找到属性"remote_hosts",使用JMeter远程服务器的IP地址作为其属性值。可以添加多个服务器的IP地址,以逗号作为分隔。 
例如:
#remote_hosts=127.0.0.1
remote_hosts=9.115.210.2:1099,9.115.210.3:1099,9.115.210.4:1099
# RMI port to be used by the server (must start rmiregistry with same port)
server_port=1099

5. 在jmeter客户端上启动jmeter:
./jmeter -n -t plan.jmx -r #选项-r表示远程启动(remote)
jmeter客户端会自动向jmeter远程服务器上分发测试计划。

 
原文来自:博客园(华夏35度)http://www.cnblogs.com/zhangchaoyang 作者:Orisun

使用JMeter做压力测试的更多相关文章

  1. 学习使用Jmeter做压力测试(一)--压力测试基本概念

    学习使用Jmeter做压力测试(一)--压力测试基本概念 一.性能测试的概念 性能测试是通过自动化的测试工具模拟多种正常峰值及异常负载条件来对系统的各项性能指标进行测试.负载测试和压力测试都属于性能测 ...

  2. (转)学习使用Jmeter做压力测试(三)--数据库测试

    数据库测试 JMeter可以做为Web服务器与浏览器之间的代理网关,以捕获浏览器的请求和Web服务器的响应,这样就可很容易的生成性能测试脚本. 根据脚本,JMeter可通过线程组来模拟真实用户对Web ...

  3. 【转】学习使用Jmeter做压力测试(三)--数据库测试

    JMeter可以做为Web服务器与浏览器之间的代理网关,以捕获浏览器的请求和Web服务器的响应,这样就可很容易的生成性能测试脚本.根据脚本,JMeter可通过线程组来模拟真实用户对Web服务器做压力测 ...

  4. 【转】学习使用Jmeter做压力测试(二)--压力测试的实施

    JMeter测试步骤: 1.建立测试计划 2.添加线程组 3.添加HTTP请求 4.增加监听器 5.执行测试计划 6.根据JMeter提供的报告分析结果 一.目标 测试访问目标服务器网站首页的每秒查询 ...

  5. (转)学习使用Jmeter做压力测试(一)--压力测试基本概念

    一.性能测试的概念 性能测试是通过自动化的测试工具模拟多种正常峰值及异常负载条件来对系统的各项性能指标进行测试.负载测试和压力测试都属于性能测试,两者可以结合进行. 通过负载测试,确定在各种工作负载下 ...

  6. [Jmeter]用Jmeter做压力测试(分布式)

    Jmeter 是Java应用,对于CPU和内存的消耗比较大,因此,当需要模拟数以千计的并发用户时,使用单台机器模拟所有的并发用户就有些力不从心,甚至会引起JAVA内存溢出错误.为了让jmeter工具提 ...

  7. Jmeter做压力测试的心得

    什么是性能压测? 也是最近刚刚接触到,就是被测试的系统,在一定的访问压力下,看程序运行是否稳定/服务器运行是否稳定,通常情况,是模拟多个请求同时 请求服务器,也就是在某个时间内,比如说1秒内,调用接口 ...

  8. 【转】学习使用Jmeter做压力测试(一)--压力测试基本概念

    一.性能测试的概念 性能测试是通过自动化的测试工具模拟多种正常峰值及异常负载条件来对系统的各项性能指标进行测试.负载测试和压力测试都属于性能测试,两者可以结合进行. 通过负载测试,确定在各种工作负载下 ...

  9. Jmeter做压力测试

    1)首先双击bin/jmeter.bat 2)创建Thread Group 3)配置HTTP Request 4)配置Aggregate Report 5)配置并发数和并发时间 6)点击绿色按钮,执行 ...

随机推荐

  1. Thinkphp 上传图片

    <?php // 本类由系统自动生成,仅供测试用途 class ListAction extends Action { public function index(){ //$name = 's ...

  2. 实现SQLServer数据库转成MYSQL数据库

    1.首先需要下载安装工具Navicat Premium. 2.注意:将数据库移至本地SQLServer,我试过直接在局域网上其他SQLServer服务器上想转到本地Mysql好像有问题,想将远程数据库 ...

  3. 在浏览器中打不开Oracle 11gR2的企业管理器页面

    最简单的办法,重建EM 四个步骤: emca -repos drop emca -repos create emca -config dbcontrol db emctl start dbconsol ...

  4. C#方法的使用

    static void Main(string[] arr) { , ); Console.WriteLine(max); Console.ReadKey(); } /// <summary&g ...

  5. Input File 表单上传按钮美化

    HTML <div class="input-file-button"> 上传图片<input type="file" class=" ...

  6. 工作中用到的Jquery特效

    jQuery缓慢弹出下拉tab导航 http://sc.chinaz.com/jiaoben/130811578701.htm

  7. xml配置与使用

    php100:89:xml常识知识补充 xml常识知识补充XML(即可扩展标记语言,它与HTML一样,都是标准通用标记语言.Xml是Internet环境中跨平台的,依赖于内容的技术.扩展标记语言XML ...

  8. CSS样式鼠标点击与经过的效果一样

    a:link /* 未访问的链接 */ a:visited /* 已访问的链接 */ a:hover /* 当有鼠标悬停在链接上 */ a:active /* 被选择的链接 */ a,a:visite ...

  9. day04

    1.divmod(x,y)获取一个整数x除以y的商和余数 ret = divmod(, ) print(ret) 2.获取随机验证码 import random l = [] , ): t = ran ...

  10. 关于Cococs中的CCActionEase(中)

    相比之前的速度正弦变化动作(这个东西叫什么更好一些?渐变动画?)与速度指数级变化动作,CCEaseIn/CCEaseOut/CCEaseInOut更具灵活性.你可以设置运动的速率,甚至是在运动的过程中 ...