转自 http://blog.csdn.net/w565911788/article/details/7629787

1.Jmeter 概要描叙

jmeter 是一款专门用于功能测试和压力测试的轻量级测试开发平台。多数情况下是用作压力测试,该测试工具在阿里巴巴有着广泛的使用,估计是不要钱吧,哈哈,功能上 来说,整个平台实现了许多和互联网相关的网络测试组件,同时还保留着很强的扩展性方便用于一些非标准的测试场景,让伟大的程序猿同学来告诉它该如何工作。 下面我们开始。

2.Jmeter 基本界面和组件的概念

现在看到了Jmeter的主界面。下面介绍Jmeter中主要组件的功能和作用, 首先我们看看Jmeter在概念上的组件分类如图

1.Threads:这个组件主要用来控制Jmeter并发时产生线程的数量,在它的下一级菜单下只有一个组件(线程组),可以这么理解每个线程就是一个虚拟的用户。所有的其他类型组件必须是(线程组)节点的子节点。

2.配置单元:和Sample组件一起工作,主要用来配置Sample如何来发起请求访问服务器,这个东西的主要特点是可以把一些Sample的共 同配置放在一个元素里面方便管理,配置单元是有作用域的。作用域和树的那个关系一样越是上级节点的作用域越大,越是接近叶子节点的

作用域就越小,可以复写上级作用域的配置。

3.定时器 : 这个主要是用来调节(线程组),控制线程每次运行测试逻辑(比如说:发出请求)的时间间隔。当然这个下面还有很多类型的定时器,他们主要功能就是调节时间间隔,但个个组件之间的策略有很大不同。

4.前置处理器 和 后置处理器类似一个HOOK,在测试执行之前和执行之后执行一些脚本的逻辑。该组件我还没有具体使用过,但大致功能就是这样,非重点组件。

5.Sample : 可能上图中没有出现Sample,需要在(ThreadGroup)上添加才可以,见图

Sample表示客户端发送某种格式或者规范的请求到服务端,所以大家看到了各种各样的Sample,其中有两个Http 相关的。一般用HttpClient功能和效率将更强。

6.断言: 意思是指对于Sample完成了请求发送之后,判断一下返回的结果是否满足期望。

7.监听器 : 这个组件不同于平时在Web编程的那种监听器,他是伴随着Jemeter测试的运行而从中抓取运行期间的数据的一个组件,经常使用的是聚合报告组件,从里面可以统计到测试的TPS,响应时间等关键测试数据。

3.实例操作

首先在TestPlan下面添加一个ThreadGroup组件,设置线程组组件各项参数

关键参数解释 :

线程数:最大测试时使用的线程数。

Ramp-Up Period : Jmeter达到指定最大线程数的时间。

循环次数 : 如果是Forever,线程组中的线程将不间断的连续测试系统,当然也可以设置每个线程测试的次数,当完成了规定次数后,该线程将自动退出线程组。

调度器 : 主要用来指定该测试的一些时间信息,比如从几点到几点运行测试,如果到了指定时间测试没有进行完成,测试也会被停止。

接着在线程组下面添加Sample组件,我们添加一个HTTP Request HTTPClient组件,设置属性如下图:

最后添加监听器组件 :Aggregate Report, 大功告成!

运行:

好了,一个简单的压力测试例子完成了。大家可以从report中间看到一些性能结果的参数了。下面我们完成一个更复杂的例子。

4.自定义Sample或者协议完成测试

问题:在某些场景下我们会发现Jmeter里面提供的各种Sample不能满足自己的需求,应为这个世界上的压力测试的逻辑本来就是千变万化的,所 以这个时候我们如果自己实现一套测试逻辑,这个时候需要使用jmeter 的扩展性。下面我们通过一个简单的例子来看看如何开发这样的一个自定义Sample? 自定Sample的生命周期是怎样的?

  1. package com.alibaba.stress.load;
  2. import org.apache.jmeter.config.Arguments;
  3. import org.apache.jmeter.protocol.java.sampler.AbstractJavaSamplerClient;
  4. import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;
  5. import org.apache.jmeter.samplers.SampleResult;
  6. public class LifecycleJMeterSampleextends AbstractJavaSamplerClient {
  7. @Override
  8. public Arguments getDefaultParameters() {
  9. System.out.println("Get Parameter name! [getDefaultParameters]");
  10. return super.getDefaultParameters();
  11. }
  12. @Override
  13. public void setupTest(JavaSamplerContext context) {
  14. System.out.println("[setupTest]");
  15. super.setupTest(context);
  16. }
  17. @Override
  18. public void teardownTest(JavaSamplerContext context) {
  19. System.out.println("[teardownTest]");
  20. super.teardownTest(context);
  21. }
  22. @Override
  23. public SampleResult runTest(JavaSamplerContext ctx) {
  24. SampleResult result = new SampleResult();
  25. result.sampleStart();
  26. System.out.println("[runTest]");
  27. result.setSuccessful(true);
  28. result.sampleEnd();
  29. return result;
  30. }
  31. }
  1. package com.alibaba.stress.load;
  2. import org.apache.jmeter.config.Arguments;
  3. import org.apache.jmeter.protocol.java.sampler.AbstractJavaSamplerClient;
  4. import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;
  5. import org.apache.jmeter.samplers.SampleResult;
  6. public class LifecycleJMeterSample extends AbstractJavaSamplerClient {
  7. @Override
  8. public Arguments getDefaultParameters() {
  9. System.out.println("Get Parameter name! [getDefaultParameters]");
  10. return super.getDefaultParameters();
  11. }
  12. @Override
  13. public void setupTest(JavaSamplerContext context) {
  14. System.out.println("[setupTest]");
  15. super.setupTest(context);
  16. }
  17. @Override
  18. public void teardownTest(JavaSamplerContext context) {
  19. System.out.println("[teardownTest]");
  20. super.teardownTest(context);
  21. }
  22. @Override
  23. public SampleResult runTest(JavaSamplerContext ctx) {
  24. SampleResult result = new SampleResult();
  25. result.sampleStart();
  26. System.out.println("[runTest]");
  27. result.setSuccessful(true);
  28. result.sampleEnd();
  29. return result;
  30. }
  31. }

其中AbstractJavaSamplerClient是从ApacheJmeter_Java.jar 中获得。编写的类文件打包xxx.jar, 把这个Jar放到Jmeter的解压目录下的lib/ext下。重新启动jmeter.

一次先加入线程组,和聚合报告两个组件,在聚合报告组件之前加入一个新的Sample(Java Sample ), 如图:

运行测试。可以看到控制台的输出。调整几次线程组的线程数目的控制,我们会发现我们的这个自定义类中的teardowntest 和 setupuptest方法都是正对线程组中的某一个线程来执行的,线程组中线程的调用数目其实就是指runtest方法的运行次数。

5.Jmeter的分布式测试(优缺点)

下面是分布式测试的使用方法,即使用一台机器控制多台机器给目标机器产生压力。由于Linux和Windows上的方法有些不一样,这里说下Linux下是怎么来配置的。

首先总控的机器我们叫master,产生压力的肉鸡我们叫JmeterServer,待我们测试的系统我们叫Target.

第一步:启动JmeterServer。我们可以找到Jmeter/bin 目录下的jmeter-server这个脚本,运行即可,当然如果你需要调整这个测试负载产生服务器的内存等性能参数的话,我们修改这个脚本jmeter中的内存参数。

第二步 : 修改Master机器上jmeter/bin目录下的jmeter.properties文件,修改 remote_hosts=localhost:1099,localhost:2010这个为你自己的JmeterServer的实际IP,如果有多台 可以用逗号分开。

第三步 : 启动master jmeter,运行测试脚本的时候选:运行 --> 远程运行 --> 选择IP 或者 运行所有远程。JmeterServer就会运行Master机器上设定的运行脚本了。

问题 : 我在实际使用中发现使用这种模式下的Jmeter在Master观测实际测试结果,发现TPS远远低于使用传统的一台Jmeter来测试所能达到的 TPS,我感觉可能是由于Jmeter这种多机器协作中传递信息是使用RMI技术,可能这种技术本身还对Jmeter的性能产生了影响导致压力上去的很 慢。该问题还没有得到完全认证,所以我现在如果在一台机器测试产生的压力不够的情况下我直接使用多台机器测把TPS加起来就是结果,比较傻,期待大侠指点 迷津。

JMeter入门教程的更多相关文章

  1. 压测工具 jmeter入门教程及汉化修改

    Apache JMeter是一款纯java编写负载功能测试和性能测试开源工具软件.相比Loadrunner而言,JMeter小巧轻便且免费,逐渐成为了主流的性能测试工具,是每个测试人员都必须要掌握的工 ...

  2. 压力测试工具JMeter入门教程

    1.Jmeter 概要描叙 jmeter 是一款专门用于功能测试和压力测试的轻量级测试开发平台.多数情况下是用作压力测试,该测试工具在阿里巴巴有着广泛的使用,估计是不要钱吧,哈哈,功能上来说,整个平台 ...

  3. 压力测试工具JMeter入门教程<转>

    1.Jmeter 概要描叙 jmeter 是一款专门用于功能测试和压力测试的轻量级测试开发平台.多数情况下是用作压力测试,该测试工具在阿里巴巴有着广泛的使用,估计是不要钱吧,哈哈,功能上来说,整个平台 ...

  4. 【转】jmeter入门教程- Jmeter教程及技巧汇总

    https://blog.csdn.net/zouxiongqqq/article/details/72843500

  5. jmeter安装教程与新手入门(附jdk安装教程)

    一.前言 最近要对网站做性能测试,提到了并发数测试,查了下,还是决定使用jmeter来完成这项测试,这里总结了jmeter完整的安装教程,附上新手使用教程. 二.jmeter安装 1.jdk安装(jm ...

  6. JMeter入门合集

    JMeter从入门到精通 http://blog.csdn.net/lihengxin/article/details/4325918 jmeter入门教程- Jmeter教程及技巧汇总 http:/ ...

  7. 转载:JMeter压力测试入门教程[图文]

    JMeter压力测试入门教程[图文] Apache JMeter是Apache组织开发的基于Java的压力测试工具.用于对软件做压力测试,它最初被设计用于Web应用测试但后来扩展到其他测试领域. 它可 ...

  8. JMeter Web测试快速入门教程

    学习前的准备 学习本教程前,你的电脑上至少应该有Apache JMeter这款软件.如果你没有,点击此处下载. 当你点进去后,你会发现它是一个依赖Java的软件 因此如果你电脑上没有Java环境,你应 ...

  9. Jmeter安装图文及入门教程

    一.JMeter介绍 JMeter是Apache组织开发的基于Java的压力测试工具.用于对软件做压力测试,它最初被设计用于Web应用测试,但后来扩展到其他测试领域.它可以用于测试静态和动态资源,例如 ...

随机推荐

  1. The operation names in the portType match the method names in the SEI or Web service implementation class.

    The Endpoint validation failed to validate due to the following errors: :: Invalid Endpoint Interfac ...

  2. [翻译] BKZoomView

    BKZoomView https://github.com/freshking/BKZoomView A UIView that will zoom into its parent view. It ...

  3. 通过runtime获取对象相关信息

    通过runtime获取对象相关信息 在这里,本人给大家提供一个runtime关于NSObject的扩展,用来显示各种NSObject中的信息,这有助于你来分析类的组成:) 先准备以下类供测试: Mod ...

  4. 一、DAO设计模式 二、DAO设计模式的优化 三、JDBC中的事务,连接池的使用

    一.DAO设计模式概述###<1>概念 DAO,Data Access Object ,用于访问数据库的对象. 位于业务逻辑和数据持久化层之间,实现对数据持久化层的访问![](1.png) ...

  5. 静默安装oracle后,启动oem报错,解决方法!

    一.手工重建EM Oracle 的gridcontrol 由两部分组成:dbcontrol 和repository. 我们可以对某一部分进行操作,也可以同时进行操作. 这里先看一个因为修改hostna ...

  6. AOP-通知-笔记

    说到AOP肯定会想到切面.通知.切点等等.那什么是通知呢?之前我一直以为我们所说的通知就是我们写在切面中的方法,但是随着AOP认识的加深,现在发现所谓的通知不仅仅是我们写在切面中的方法,通知方法只是通 ...

  7. Javascript能做什么 不能做什么。

    JavaScript可以做什么?用JavaScript可以做很多事情,使网页更具交互性,给站点的用户提供更好,更令人兴奋的体验. JavaScript使你可以创建活跃的用户界面,当用户在页面间导航时向 ...

  8. NSProxy应用例子

    动态代理模式的应用很多,特别是在不能修改被代理类的前提下,要对执行某些方法时需要打log或者捕捉异常等处理时,是一个非常方便的方法.只需要少量修改客户端(场景类)代码和添加一个代理类就可以实现,这个符 ...

  9. PHPExcel 导入

    首先: //包含excel的类库require APPPATH . 'third_party/PHPExcel.php';require APPPATH . 'third_party/PHPExcel ...

  10. Oracle Listener

    一.监听器功能 1)监听客户端请求:监听器作为独立进程运行在数据库服务器上,监听特定网络端口(默认1521)服务请求. 2)为客户端请求分配oracle Server Process:监听器不直接处理 ...