【性能工具】Apache Jmeter工具概述

小程序计算MySQL
  • Jmeter概述: ===========

Apache JMeter 是100%纯 Java 桌面应用,为功能行为的 负载测试 和 性能 度量 而设计的一款软件 测试 工具。它最初是设计用于 测试 Web 应用程序,但已经扩展到测试功能。Apache JMeter的可以用来测试静态和动态资源的性能(包括文件,Servlet的Perl脚本, Java 对象, 数据库 和查询,F TP 服务器 等)。它可以用来模拟一个 服务器 负载, 网络 或对象,以测试其强度或分析不同负载类型下的整体性能。你可以用它制作图形 性能测试 分析或测试在高并发负载情况下的服务器/脚本/对象的行为。

 

 Apache JMeter

的特征:

  * 能测试许多不同类型的服务器的负载和性能:

  Web-HTTP、HTTPS、 SOA P

  通过JDBC的 数据库

  LDAP

  JMS

  邮件-的POP3和IMAP

  * 轻便和100%纯Java

  * 多线程框架允许许多线程并发采样,和不同的功能的单独的线程同步采样。

  * 精心的图形用户界面设计允许更快的操作。

  * 缓存和测试结果的离线分析/再现。

  * 高可扩展性:

  可插式取样器允许无限制的测试。

  可插拔定时器可以选择几种负荷统计数据。

  数据分析和可视化插件具有很强的扩展性以及个性化。

  可提供动态输入和数据操作。

  脚本化取样器(完全支持BeanShell,并支持BSF-compatible语言)

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

  • Jmeter相关概念简介: ===============

JMeter是Apache组织开发的基于Java的压力测试工具。用于对软件做压力测试,它最初被设计用于Web应用测试但后来扩展到其他测试领域。

Jmeter每个任务都由测试计划

picture.image

组成,每个测试计划又包含了各种 elements ,通过不同的 elements 之间的组合来完成测试计划。一般常用的 elements 如下:

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

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

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

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

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

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

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

由于每个controller可以相互嵌套,并且具有作用域(如配置元素只在最近嵌套的一个controller中生效),所以通过上述几个元素的相互组合就可以组装出不同的测试计划。

  • 应用实例: =======

  • 场景一:多用户并发数压测系统

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

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

picture.image

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

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

picture.image

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

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

picture.image

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

picture.image

Figure1 http采样器配置

iv. 响应断言:这个是response断言,可以设置响应条件,然后满足断言的话返回成功或失败,后续统计结果可以用到该值。

配置如下(本例子中的 success 是 http 返回的 response data 结果,所以只要包含 success 就判断断言为 true ):

picture.image

Figure2 断言配置

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

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

picture.image

Figure3 summery report报告

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

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

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

picture.image

Figure4 图形结果报告

图例参数基本和SummeryReport中的数据一致。 这样,测试计划就完成配置了,然后就是进行测试计划启动了。

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

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

  • 场景二:多用户登录多步骤访问系统

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

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

picture.image

Figure5测试计划2

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

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

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

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

0
0
0
0
关于作者
关于作者

文章

0

获赞

0

收藏

0

相关资源
高性能存储虚拟化方案 NVMe over Fabric 在火山引擎的演进
在云计算中,虚拟化存储扮演着重要角色,其中 iSCSI 协议在业界开放、流行多年。近年来,拥有更优性能的 NVMe over Fabrics 协议也得到了发展。本次分享介绍了 NVMe over Fabrics 在云原生和虚拟化方向的演进工作和成果。
相关产品
评论
未登录
看完啦,登录分享一下感受吧~
暂无评论