jmeter 压力测试实践

本文主要介绍性能测试中的常用工具jmeter的使用方式,以方便开发人员在自测过程中就能自己动手对系统进行自动压测和模拟用户操作访问请求。最后还用linux下的压测工具ab做了简单对比。

  1. Jmeter相关概念简介:
    JMeter是Apache组织开发的基于Java的压力测试工具。用于对软件做压力测试,它最初被设计用于Web应用测试但后来扩展到其他测试领域。
    Jmeter每个任务都由测试计划 组成,每个测试计划又包含了各种elements,通过不同的elements之间的组合来完成测试计划。一般常用的elements如下:

thread group:包含一组线程,每个线程独立地执行测试计划。

sampler:采样器,有多种不同的sample实现,用来发起各种请求,如http请求,jdbc请求,javaTest请求等等。

logic controller:逻辑控制器有多种不同的实现,可以决定每个sample的执行顺序。

listener:有多种不同的实现,主要用于统计测试接话运行中的数据并展示,如可以进行图形化方式展示响应时间。

timer:定时器,有多种不同的实现,可用作每个请求见的停顿时间。

assertions:断言,有多种不同实现,可以测试sample请求后返回的内容是否符合期望值。例如可以判断html返回的内容是否符合期望。

configuration elements:配置元素,主要用作对sample的请求的参数做配置。

     由于每个controller可以相互嵌套,并且具有作用域(如配置元素只在最近嵌套的一个controller中生效),所以通过上述几个元素的相互组合就可以组装出不同的测试计划。
  1. 应用实例:
    a) 场景一:多用户并发数压测系统。

这个场景中,100个用户并发访问系统,每个用户循环10次访问系统。

     首先在jmeter新建一个测试计划,然后如下图所示把各个元素新建完毕。(图标旁边都是各elements的实例命名)

     接着,对各个元素的配置进行设置:

i. 100并发:这个是一个线程组,进行如下配置:

在本例中设置了100个线程进行测试,RampUpPeriod是在制定秒数内均匀地把线程启动完毕,设置0则是同时启动,循环次数为1.

ii. 循环控制器:这是一个循环类型的逻辑控制器,它设置了其作用范围内的行为均循环10次——每个线程将循环发起10次http请求。循环控制器配置如下:

iii. HTTP请求:这是一个Sampler,是最本次测试中最核心部分,负责发起http请求。在该http sampler中,可以设置:服务器地址、访问路径、访问参数、请求方式(Get/post/etc..)等属性。因为该sampler嵌套在循环控制器内,所以将会循环10次发起请求。部分配置如下:

Figure1 http采样器配置

iv. 响应断言:这个是response断言,可以设置响应条件,然后满足断言的话返回成功或失败,后续统计结果可以用到该值。配置如下(本例子中的success是http返回的response data结果,所以只要包含success就判断断言为true):

Figure2 断言配置

v. http请求参数设置:这是配合httpsampler使用的,就是为了单独把需要频繁配置的内容写到这里,配置方式和http sampler类似。其参数生效作用于在于最近一个嵌套控制器中。

vi. Summery Report:这是一个listener,它对测试计划中的sampler发起的请求进行统计,可以对断言成功的部分统计也可以全部统计。效果如下:

Figure3 summery report报告

因为本例只有1个http sampler,所以结果第一行就是该sampler的统计结果。

Samples表明有1000个请求发起了,Average是平均响应时间(ms),Throughput是吞吐量,其余参数望文生义基本可以明白,具体可查看jmeter参考手册。

vii. 图形结果:这是另一个listener,它对统计的结果进行图标展示,是和SummerReport相独立的另一项统计,效果如下:

Figure4 图形结果报告

图例参数基本和SummeryReport中的数据一致

     这样,测试计划就完成配置了,然后就是进行测试计划启动了。

     点击工具栏的 或者菜单栏的运行>启动,测试计划开始执行。执行完成后,就可以看到Figure3,Figure4的图标结果了。

     从结果可以看到,本次测试共发起了1000个http请求,平均每个请求的时间是24毫秒,吞吐量是318.1/秒

b) 场景二:多用户登录多步骤访问系统。

这个场景中,2个用户分别先登录系统,然后静止1秒,再依次访问2个页面。

按上面的步骤先把测试计划配置好:

Figure5测试计划2

在这个测试计划中,有2个线程组A和B,每个线程组各代表1个用户,每个用户首先各自在知识库登陆页面登陆,然后跳转到会员中心,最后访问机器列表。

这个测试计划引入了cookie管理器,这个管理器可以在登陆后把用户的cookie保存到线程中。同时在cookie管理器你可以另外设置cookie。

还引入了仅一次控制器,这个控制器可以保证线程在多次循环跑得情况下只登陆一次。

另外,登陆Fragment和页面访问Fragment是2个独立的模块,他们可以分别被2个线程组引用,达到复用的目的而不需要为2个线程组各自设置请求。

具体详情可以在附件的jmeter测试计划文件中了解到。

通过以上的基本要素,你就可以为你的应用进行基本访问行为的模拟和并发测试了。还是很方便的。

  1. Ab(ApacheBench)对比
    Ab也是apache下的另一个压测工具。Ab压测的并发结果和jmeter的并发测试结果会有怎么样的联系呢,我们可以对比下。在下面的例子中,在一个tomcat服务器上运行了一个简单的servlet,该servlet只是睡眠100毫秒,然后返回success给response。

Jmeter和Ab的测试结果如下表所示:

Figure6 jmeter和ab的并发压测对比

其中红色的是有错误出现,并且结果不太稳定没有继续往下再压。

可以看到,在线程数100以下时,jmeter的avg(每个线程的平均响应时间)和ab的Time per request,throughput与request per second基本是一致的,但是之后就开始相差比较大了。具体原因未明,也许是jmeter有更多的东西需要处理和基于gui的缘故,有知情者请不吝赐教。但是,如果jmeter每个线程的循环数设置到无限时候,数据显示性能就会有所提升。

综上所述,我们一般所说的QPS,TPS,对应到jmeter应该就是throughout,对应到ab应该是requestper second,结合2者,就能大致推算出应用的吞吐量大概在哪个范围了。在本例中应该在1200~1400左右。

最后再小结下。

本文主要了简述了jmeter的基本使用方式,并结合2个场景讲解了测试计划如何配置,为开发使用做了入门介绍。最后又对一个demo应用,在jmeter和ab的压测下,对结果进行了比较。最后再利用下stackoverflow的一段问答介绍两者的使用场景:

Jmeter告诉你每个请求实际上耗费多长时间。AB只是简单的用数学方式统计平均值。所以从准确性来说,jmeter比ab更准确,更多如数据处理。但是ab的速度更快,更轻巧。如果性能测试的目的在于更真实的表现被测应用,那么jmeter更佳。但如仅仅是用最少的机器资源产生最多的访问请求,那ab适合……

参考资料:

jmeter手册.pdf(中文版官方文档)

jmeter官网(http://jmeter.apache.org/

cnblogs博客:Jackei(http://blog.csdn.net/jackei)

jmeter应用指南.pdf

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
嘉应学院 计算机学院 实 验 报 告 "课程名称 "软件测试 "实验名称 "压力测试工具"实验地点 "锡科405 " " " " "JMeter实践 " " " "指导老师 " "实验时间 "第11周 "提交时间 "第12周 " "班 级 " "姓 名 " "座 号 " " "一、实验目的和要求 " "学习目标:学习和掌握测试工具JMeter的使用。 " "知识要点:JMeter的要测试部件,创建测试计划和参数方法。 " "二、实验环境、内容和方法 " " " "实验环境:Windows 7 压力测试工具JMeter " " " "三、实验过程描述 " "1、JMeter的安装和运行 " " " " " " " " " "2、JMeter实例 " "多用户同时登录大学学籍管理系统 " " 运行badboy录制,在URL栏输入http://localhost:8080/myapp " " " " " " 将脚本导出为JMeter脚本 " " " " " " " "得到原始的JMeter脚本,用JMeter打开 " " " " " " " " " " " " " " " " " " " "修改原始脚本 " " " " " " " " 设置响应断言,添加响应文本 " " " " " " " " " " " " " " " " 添加聚合报告 " " " " " " " " 添加查看结果树 " " " " " "成功的请求 " " " "失败的请求 " " " " 使用"函数助手"从文件中读取数据 " " " " " " " " " "设置HTPP请求 " " " "3、查询MySql数据库 " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " "三、实验总结 " "JMeter主要用于性能测试。通过使用JMeter提供的功能,可以可视化地制定测试计划,包" "括使用什么样的负载、测试什么内容、传入的参数。同时,它提供了很多种图形化的测试" "结果显示方式,使我们能够简单地开始测试工作和分析测试结果。另外,JMeter作为一个" "开源工具,用户可以自由地对此工具进行扩展来满足自己的需要。测试计划描述了执行测" "试过程中JMeter的执行过程和步骤,一个完整的测试计划包括一个或者多个线程组(Threa" "d Groups)、逻辑控制(Logic Controller)、实例产生控制器(Sample Generating " "Controllers)、侦听器(Listener)、定时器(Timer)、比较(Assertions)、配置元素" "(Config " "Elements)。打开JMeter时,它已经建立一个默认的测试计划,一个JMeter应用的实例只 " "能建立或者打开一个测试计划。现在我们开始填充一 个测试计划的内容,这个测试计划 " "向一个jsp文件和一个servlet发出请求,我们需要JMeter模拟五个请求者(也就是五个线" "程),每个请求者连续 请求两次。 " ----------------------- JMeter实验报告全文共9页,当前为第1页。 JMeter实验报告全文共9页,当前为第2页。 JMeter实验报告全文共9页,当前为第3页。 JMeter实验报告全文共9页,当前为第4页。 JMeter实验报告全文共9页,当前为第5页。 JMeter实验报告全文共9页,当前为第6页。 JMeter实验报告全文共9页,当前为第7页。 JMeter实验报告全文共9页,当前为第8页。 JMeter实验报告全文共9页,当前为第9页。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值