缘由

很多情况下我们写程序过程中只会对固定模块采取并发限制,而且asp.net对于多线程也有他自己的处理机制,尤其对于注重业务,结果导向的团队可能更注重一定时间节点给出满意的产品,但是你的模块到底是否健壮,你心理有谱吗? 大声的告诉我 are you sure? 下面我们通过一个工具来窥探一下.He is Jmeter!

(最后的测试发现博客园的访问有些问题,具体希望广大园友给予指点)

基本简介

Apache JMeter是Apache组织开发的基于Java的压力测试工具。用于对软件做压力测试,它最初被设计用于Web应用测试但后来扩展到其他测试领域。 它可以用于测试静态和动态资源例如静态文件、Java 小服务程序、CGI 脚本、Java 对象、数据库, FTP 服务器, 等等。JMeter 可以用于对服务器、网络或对象模拟巨大的负载,来自不同压力类别下测试它们的强度和分析整体性能。另外,JMeter能够对应用程序做功能/回归测试,通过创建带有断言的脚本来验证你的程序返回了你期望的结果。为了最大限度的灵活性,JMeter允许使用正则表达式创建断言。

环境准备

(1)Jmeter是建立在java环境下的,所以你的机器需要安装java环境,我像java组的同事要了一个简要的安装包,安装之后需要配置下环境变量.

(2)Jmeter安装包  http://jmeter.apache.org/

因为博客园对上传文件有大小限制,所以...

java环境:下载地址

Jmeter: 下载地址

基本概念了解

 测试计划

线程组

测试里每个任务都要线程去处理,所有我们后来的任务必须在线程组下面创建。

逻辑控制单元

多种不同的实现,可以决定每个sample的执行顺序。

采样器

可以认为所有的测试任务都由取样器承担,有很种,如:HTTP 请求。

定时器

定时器(Timer)用于操作之间设置等待时间,等待时间是性能测试中常用的控制客户端QPS的手端。类似于LoadRunner里面的“思考时间”。JMeter 定义了Bean Shell Timer、Constant Throughput Timer、固定定时器等不同类型的Timer。

断言

对取样器返回的请求结果给出判断,是否正确。

配置元件

配置元件(config element)用于提供对静态数据配置的支持。CSV Data Set config 可以将本地数据文件形成数据池(Data Pool),而对应于HTTP Request Sampler和 TCP Request Sampler等类型的配制无件则可以修改Sampler的默认数据。(例如,HTTP Cookie Manager 可以用于对 HTTP Request Sampler 的cookie 进行管理)

监听器

它的功能是对取样器的请求结果显示、统计一些数据(吞吐量、KB/S……)等。

Getting Started

下面我们通过例子来体会一下Jmeter

测试地址:http://www.cnblogs.com/mongo/p/4623560.html

场景:模拟用户并发请求查看网站负载等参数

(1)运行Jmeter,在安装好JAVA环境的前提下,打开Jmeter安装目录,运行\apache-jmeter-2.13\bin\jmeter.bat

(2)添加线程组

说明:

线程数:我们配置开启了500个线程

Ramp-up Period:设置为0表示在0秒内500线程同时启动完毕

循环次数:总体执行一次

(3)设置控制器

这里我们设置循环控制器,每个线程循环5次Sampler操作

 (4)设置采样器Sampler

我们这里用一个博客园的文章地址做测试,简单的请求页面

(5)添加监听listener

为了更好的看到我们的测试结果,需要合适的图形化展示,这里我们添加图形结果和观察结果树

(6)运行结果

(6.1)summary report

请求数量 2500

平均响应时间1185

吞吐量:175.8/s

(6.2)图形结果

(6.3)观察结果树

这里貌似存在一个问题,我访问博客园指定的页面,前几次请求可以,然后请求一直是time out 状态,过一段时间 请求又可以了,目前有2个猜想

(1)博客园做了限制,某一个地址频繁发送请求会限制一段时间?

(2)但是明显开始请求成功次数和一段时间后请求次数有明显的不同,难道真的程序有问题?

这只是猜想,具体大家也可以考虑考虑 交流指导,这篇文章主要让大家能方便测试某一个部分的负载,介绍了Jmeter的基本使用方式,以便大家对自己的模块有一个量化的认识,在写程序的时候也会多一些思考。

性能测试-Jmeter的更多相关文章

  1. 使用jmeter进行性能测试-Jmeter教程及技巧汇总 (转)

    http://www.jmeter.cf/loadtesting-jmeter.html 为什么使用jmeter, 它免费开源, 不断发展, 功能逐渐强大. 可以做功能,负载, 性能测试.一套脚本可以 ...

  2. 性能测试—JMeter 常用元件(二)

    性能测试—JMeter 常用元件(二) <零成本web性能测试>第三章 Web性能测试脚本录制与开发中JMeter常用测试元件 测试计划描述了JMeter运行时将会执行的一系列步骤,一个完 ...

  3. 接口性能测试--JMeter

    1.JMeter Java Sampler介绍 setupTest做些初始化的工作,每个线程只执行一次 teardownTest做些清理工作,每个线程只执行一次 1.JMeter Java Sampl ...

  4. 性能测试Jmeter压测ZooKeeper-自定义java请求

     要想通过自定义java请求来压测ZooKeeper,那么我们就需要做两件事情,第一我们需要知道java如何操作ZooKeeper,第二就是怎么能将我们写的jar包让jmeter识别,首先我们先来干第 ...

  5. 性能测试—JMeter 常用元件(四)

    <零成本web性能测试>第三章 Web性能测试脚本录制与开发中JMeter常用测试元件 测试计划描述了JMeter运行时将会执行的一系列步骤,一个完整的测试计划包含一个或多个线程组.逻辑控 ...

  6. Meter - 连续性能测试 - JMeter + ANT + Jenkins集成 - 第1部分

    目标: 创建包含性能测试流程的持续交付管道, 以尽早检测任何与性能相关的问题. 通常,全面的性能测试将在分段/预生产环境中完成,该环境可能与您的生产环境相同.在完成QA功能/回归验证后,将代码推送到分 ...

  7. JMeter - 连续性能测试 - JMeter + ANT + Jenkins集成 - 第2部分

    目标: 创建包含性能测试流程的持续交付管道,以尽早检测任何与性能相关的问题. 通常,全面的性能测试将在分段/预生产环境中完成,该环境可能与您的生产环境相同.在完成QA功能/回归验证后,将代码推送到分段 ...

  8. 性能测试--Jmeter随机生成/随机选取/csv读取关键字

    Jmeter随机生成/随机选取/csv读取关键字 一.随机生成关键字 随机生成关键字,需要组件:随机变量配置元件(Random Variable)  该组件的作用是生成字符+随机数字格式的字符串,并保 ...

  9. 性能测试--Jmeter录制、回放

    Jmeter录制.回放 在jmeter2.1版本之前,jmeter应该是不支持录制和回放功能的,那时候如果需要录制jmeter的性能测试脚本的话,就需要使用第三方工具——badboy.现在jmeter ...

随机推荐

  1. iReport —— A4打印,只占纸张的一半,如何解决

    有没有遇到过这样的情况:用 iReport 生成的 pdf 文件在预览是好像挺好,但打印时却只占了A4 纸的一半(或许有其他情况,反正是不能占满纸张)? 新建报表时,默认的就是A4尺寸. 经过反复试验 ...

  2. static_cast 和 dynamic_cast 的区别

    static_cast一般用来将枚举类型转换成整型,或者整型转换成浮点型.也可以用来将指向父类的指针转换成指向子类的指针.做这些转换前,你必须确定要转换的数据确实是目标类型的数据,因为static_c ...

  3. ibernate学习笔记5---实体类或属性名与数据库关键字冲突、hql命名参数、hql实现通用分页

    一.实体类或属性名与数据库关键字冲突问题1.实体类名与数据库中的关键字冲突比如:实体表User与oracle中的系统表冲突解决方式1:在xml中添加table属性,指定表名,使其不与name默认相等 ...

  4. Java好文统计( 引用 )

    1. java 关于类的路径及编译问题 windows 版本:http://www.ibm.com/developerworks/cn/java/j-classpath-windows/ unix & ...

  5. C#分页类

    using System.Linq; using System.Collections.Generic; namespace CommonLibrary { public class PagedLis ...

  6. UVa 1593 (水题 STL) Alignment of Code

    话说STL的I/O流用的还真不多,就着这道题熟练一下. 用了两个新函数: cout << std::setw(width[j]);    这个是设置输出宽度的,但是默认是在右侧补充空格 所 ...

  7. POJ 2492 (简单并查集) A Bug's Life

    题意:有编号为1~n的虫子,开始假设这种昆虫是异性恋.然后已知xi 和 yi进行交配,根据已知情况分析能否推理出其中是否有同性恋 这道题和 POJ 1182 食物链 十分相似,不过在更新与父节点关系的 ...

  8. UVa 10020 (最小区间覆盖) Minimal coverage

    题意: 数轴上有n个闭区间[ai, bi],选择尽量少的区间覆盖一条指定线段[0, m] 算法: [start, end]为已经覆盖到的区间 这是一道贪心 把各个区间先按照左端点从小到大排序,更新st ...

  9. mysql约束(自己原先总结的有点不准)

    约束* 约束是添加在列上的,用来约束列的! 1. 主键约束(唯一标识) ****非空*** ****唯一*** ****被引用****(学习外键时) * 当表的某一列被指定为主键后,该列就不能为空,不 ...

  10. 打印Dom对象的所有属性和方法

    <html> <head> <title>Test</title> <meta http-equiv="Content-Type&quo ...