JMeter是一款性能测试工具。个人认为与其说他是一个工具,不如说他是一个框架。因为JMeter的支持范围非常广,目前常见的需要进行性能测试的应用几乎都能应用(如:files, Servlets, Perl scripts, Java Objects, Data Bases and Queries, FTP Servers)。JMeter的一大好处就是它内部已经有实现好的线程机制,用户不用写任何关于并发的东西,只需做简单配置即可。同时他页提供了一些类似插件的东西,用于线程运行时的控制;其次,JMeter对测试结果能都产生相应的统计报表,简单、直观,对一般性能测试应该足够。

QuickStart

下载下来的JMeter有以下几个目录 bin? docs? extras? lib? printable_docs。bin 自不用说了,运行下面的jmeter.bat就可以看见JMeter的GUI客户端了,可以对测试进行所有的配置。docs下面的是JMeter的所有用户手册,还算详细,一般需要的都能查到。可惜没有中文的,英文需要多花点时间。extras下为JMeter对Ant的一些支持。太具体的不是很清楚,不过生产报表这部分必不可少。运行测试时,可以把测试的所有数据记录下来,JMeter自动生成一个.jtl的文件。把此文件放到extras下,运行 ant -Dtest=文件名 report,即可生成测试统计报表。lib目录下还有两个目录,一个是ext,此目录存放用户对JMeter进行扩展的测试应用,一个是junit目录,此目录没用到,不是很清楚。安装文档中的说法,ext目录存放对JMeter的扩展,用户的扩展所依赖的包则要直接放在lib下(不是lib/ext 下)。

主要插件

线程组为JMeter的主要插件,其内部实现好了多现在,用户只要添加、配置即可。
       
        以下为线程组的配置界面:

        如同所示,可以配置线程数,前一个线程与后一个线程启动间隔,以及线程的循环次数。

配置元件为所有JMeter可以使用的应用,JMeter提供了一些基础配置。如图:
              

监听器为测试过程中收集数据的。而且可以根据数据生成相应的报表(文字、图形等)

        逻辑控制器用于对线程的运行逻辑进行控制.
         

Sample

这里我用到主要JMeter的线程和报表,扩展了他的“Java请求”这个应用类别。要扩展此应用,要用到lib/ext/ApacheJMeter_java.jar,他封装此应用。

首先,需要继承ApacheJMeter_java.jar中的抽象类AbstractJavaSamplerClient,它提供了四个抽象方法: void setupTest(JavaSamplerContext arg0),SampleResult runTest(JavaSamplerContext arg0), void teardownTest(JavaSamplerContext arg0), Arguments getDefaultParameters()。setupTest和teardownTest与JUnit中的类似,分别在测试的开始和结束时执行。 runTest为主要测试方法,所有测试程序都在这里完成,JavaSamplerContext参数封装测试中需要的所有外界数据(如配置信息等)。其 SampleResult封装了所有测试结果(如:测试是否成功?程序执行时间等),getDefaultParameters用于把测试的一些默认数据在程序运行前显示到JMeter客户端,这个可以和runTest配合使用,实现数据的呈现和配置。

下面为程序:

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 com.ebupt.wv.client.WVClient;

public class Login2 extends AbstractJavaSamplerClient {

private static String label = "userLogin"
private String name;
private String address;

public void setupTest(JavaSamplerContext arg0) {
     System.out.println("setupTest");
}

public SampleResult runTest(JavaSamplerContext arg0) {
     name = arg0.getParameter("name");
     address = arg0.getParameter("address");
     SampleResult sr;
     sr = new SampleResult();
     sr.setSampleLabel(label);
     try{
          sr.sampleStart();? //记录程序执行时间,以及执行结果
          sr.setSuccessful(true);
          System.out.println("send over!");
     }catch(Throwable e){
          sr.setSuccessful(false);
     }finally{
          sr.sampleEnd();
     }
     return sr;
}

public void teardownTest(JavaSamplerContext arg0) {
}

public Arguments getDefaultParameters() {
     Arguments params = new Arguments();
     params.addArgument("name", "JMeter");
     params.addArgument("address", "localhost");
     return params;
}

}

 
 其次,把写好的应用打包,放到lib/ext下,JMeter运行时即可找到。同时还要把用户自己编写的应用所依赖的包放在lib下。运行JMeter。界面打开后,右键“测试计划”,添加线程组;右键“线程组”-添加-Sampler-Java请求,在类名称处选择刚才写好的类。
        如图:
?

这里,可以同时添加多个线程组、多个java请求、同时可以添加监听器用于输出不同的的测试结果图形、报表,各个请求之间可以用逻辑控制器进行执行流程的控制。如图:
?

最后,点击运行-启动,保存相应的项目,即可开始运行。运行时的数据,可以通过监听器写入文件以便需要时生成报表。

ant使用

在运行JMeter项目前,会让用户保存项目,保存为.jmx文件,把此文件放到extras目录下,即可使用ant实现测试的自动化。ant有以下几个命令:
        ant -Dtest=项目名称??? 运行项目并生成报表。
        ant -Dtest=项目名称 run??? 只运行项目。
        ant -Dtest=项目名称 report? 只生成报表(这个需要把测试时记录下来的.jtl文件放到ant目录下)

报表如下:

 

【转】JMeter试用手记的更多相关文章

  1. 项目管理工具 Redmine 安装试用手记

    原文:项目管理工具 Redmine 安装试用手记 项目管理工具 Redmine 安装试用手记 分类: Redmine2009-06-01 10:12 996人阅读 评论(1) 收藏 举报 项目管理工具 ...

  2. iBATIS 3 试用手记 - The FUTURE - ITeye技术网站

    body { font-family: "Microsoft YaHei UI","Microsoft YaHei",SimSun,"Segoe UI ...

  3. IntelliJ IDEA 13试用手记(附详细截图)

    从去年开始转java以来,一直在寻找一款趁手的兵器,eclipse虽然是很多java程序员的首选,但是我发现一旦安装了一些插件,workspace中的项目达到数10个以后,经常崩溃,实在影响编程的心情 ...

  4. linux下的powershell,pash试用手记

    ------1 概述------ 1.1 简单来说linux,unix是非常依赖脚本的,而win不是.win中有很多图形程序+c库,效率不比脚本差.点几下鼠标照样能完成需求.当 然,图形和字符是两码事 ...

  5. (转载)JProfiler试用手记

    JProfiler是一款Java的性能监控工具.可以查看当前应用的对象.对象引用.内存.CPU使用情况.线程.线程运行情况(阻塞.等待等),同时可以查找应用内存使用得热点,这里提供有几篇文章供参考:获 ...

  6. [转]RTH试用手记之“额外功能”

    年初,罗德与施瓦茨公司(Rohde & Schwarz)推出了第一款的手持示波器,从指标上看,该示波器打破了传统手持器功能简单.指标水平低.结构粗糙的印象,取而代之达到了主流台式数字示波器的性 ...

  7. [转发]RTH试用手记之“外场应用”

    年初,罗德与施瓦茨公司(Rohde & Schwarz)推出了第一款的手持示波器,从指标上看,该示波器打破了传统手持器功能简单.指标水平低.结构粗糙的印象,取而代之达到了主流台式数字示波器的性 ...

  8. [转]RTH试用手记之“偶发信号观测”

    年初,罗德与施瓦茨公司(Rohde & Schwarz)推出了第一款的手持示波器,从指标上看,该示波器打破了传统手持器功能简单.指标水平低.结构粗糙的印象,取而代之达到了主流台式数字示波器的性 ...

  9. Fedora 14 x64 试用手记

    欢迎大家给我投票: http://2010blog.51cto.com/350944 刊登在: http://os.51cto.com/art/201011/235506.htm FC14桌面使用体验 ...

随机推荐

  1. django中Model表的反向查询

    很多时候需要在多张表之间进行跨表查询,这其中外键是必须存在的,而通过外键所处的表的对象进行跨表查询, 称为正向查询.反之,则是反向查询. 正向查询很简单,这里不谈. 主要谈下反向查询. class U ...

  2. python学习笔记(pict+requests+xml)

    博主尝试了下更换python版本 之前很多脚本改正运行错误后.还是不能正常运行 忙会了半天还是没有成功 只好还原版本 所以下面的代码还没实际运行成功.先记录下 #!/usr/bin/env pytho ...

  3. python之list,tuple,str,dic简单记录(二)

    切片对象:例子:In [13]: l = [1,23,4,5,5,6,8]In [14]: l[::1]Out[14]: [1, 23, 4, 5, 5, 6, 8] In [15]: l[::2]O ...

  4. java枚举和constant使用区别

    本文结合<Effective Java>第六章前半部分关于枚举的介绍和自己的理解及实践,讲解了Java枚举的知识点.文章发布于专栏Effective Java,欢迎读者订阅. 前言  你代 ...

  5. 定位布局—position

    1. position的属性 1.1position:static 默认位置,没有定位效果 1.2 position:relative 相对定位,不会脱离文档流,相对于原来位置的变化 <!DOC ...

  6. 数据库oracle(PGA+SGA分配机制)

    一.名词解释 (1)SGA:System Global Area是Oracle Instance的基本组成部分,在实例启动时分配;系统全局域SGA主要由三部分构成:共享池.数据缓冲区.日志缓冲区. ( ...

  7. opencv:通过滑动条调节亮度和对比度

    示例代码: #include <opencv.hpp> using namespace cv; using namespace std; void on_change(int, void* ...

  8. 谈一下思考,关于mybatis中<foreach collection="list">中list得来的原因 没看到官方说明

    <foreach> 是在sql语句中进行多个id查询 时用到的,因为mybatis代替jdbc和hibernate, 使用 在xml文件中编写sql语句,这是一个标签文件.然后在 dao层 ...

  9. New Concept English three (30)

    27W/m 32 words the death of ghost For years, villagers believed that Endley Farm was hunted. The far ...

  10. 出书了!实战微信小程序

    真正用心写完一本书,才知道写书真的很不容易. 我热衷喜欢分享一些技术,也喜欢钻研一些新东西,去年微信小程序刚内测的时候,我和我的同事四个人就一起研究,恰好公司有小程序相关的项目,做项目的同时,越发感觉 ...