Jmeter体系结构

jmeter简介

JMeter是-款开源桌面应用软件,可用来模拟用户负载来完成性能测试工作。JMeter的
功能在版本升级的过程中已经十分强大,现在多数互联网公司都在使用JMeter来完成产品或
者项目的性能测试工作。因为开源所以更具扩展性,能够胜任更多的工作具有更多的可能性。
可以不夸张地说,JMeter是使用率最高的性能测试工具之一,也是当前最好的最全面的性能测试工具之一,企业能够更低成本地使用JMeter进行性能测试构建工作。
JMeter可以对Web应用进行测试,同时也提供了Web录制功能;另外还支持Java请求、
JMS、EJB、WebService. JDBC、FTP、LDAP、SMTP、Junit、 Mail、MongoDB、JSR223 等
的测试。基本上我们常见的应用类型都可以用JMeter进行测试。除此之外,我们还可以方便地扩展JMeter功能来满足我们特定的测试需求。当前HTML5盛行,手机APP如火如茶,我们也可以用JMeter来进行性能测试。JMeter 也支持Socket协议的测试。另外JMeter也很方便用来进行性能测试自动化。可以说JMeter就是一一个百变性能测试工具,鲜有做不到的,只有想不到的。下面我们来了解JIMeter这款测试工具,通过本章学习我们会了解到如下内容:
(1) JMeter的体系结构;
(2) JMeter 的运行原理;
(3) JMeter 的运行环境。
建议初次接触JMeter的读者仔细阅读本章,有理论指导实践才更轻松;知其然,更要知
其所以然。

结构

为了便于后续JMeter讲解,我们统一下名词。
元件:如果不作特殊说明,后面出现的元件代表JMeter工具菜单中的一-个子菜 单(功能),
比如HTTP请求、事务控制器、响应断言等,就是一个元件。
组件:一组元件的集合(一个或多个),比如逻辑控制器中有事务控制器,仅一次控制器,循环控制器等,这些都是元件,但它们被归类到逻辑控制器中,逻辑控制器就是组件,下图中的每一个标签就是组件。
图片:在这里插入图片描述
我们把它拆解成一个三维空间。X空间分为5个维度,Y空间分为2个维度,Z空间1个维度。X1~X5是负载模拟的一个过程,使用这些组件来完成负载的模拟。Y1:包含的是负载模拟部分,负贵模拟用户请求。Y2:结果验证部分,负责验证结果正确性。Z:负载结果的收集,实践上只有一个组成部分一监听器,监听器不仅可以放在线程组之内,也可以放在线程组之外,所以在图中我们看到它们是相交的。
JMeter基本原理是建立一个线程池,多线程运行取样器产生大量负载,在运行过程中通过断言来验证结果的正确性,通过监听器来记录测试结果。如果取样器中有参数化的需求,可以通过X2中的配置元件或者前置处理器来完成。如果有关联需求,可以通过后置处理器来完成。如果我们想要设置运行场景,比如模拟多少用户,运行多长时间,就设置线程组。如果我们想要模拟并发场景,可以利用定时器来设置;如果我们想要控制业务的执行逻辑,比如登录只运行一次,我们可以用控制器来完成。

取样器

取样器(又译采样器,个人习惯用取样器这个名字)用来模拟用户操作,向服务器(被测试系统)发出Http请求、WebService (SOAP/XML _RPC Request)请求或者Java请求等。我们可以把Http请求元件看成是一个没有界面的浏览器,它可以发送Htp请求,接收服务器的响应数据。JMeter版本提供的取样器元件有23个,基本涵盖了我们常见的各种协议, 比如Http、FTP、JAVA、JMS、LDAP、MAIL、MongoDB、SMTP、SOAP、TCP、Junit 等,还支持BeanShell脚本。取样器的访问路径:[测试计划]-[线程组]-[Sampler]。

断言

断言用来验证结果是否正确,用过LoadRunner的读者应该会知道检查点这个功能,可以
帮助我们来判断请求是否成功返回且是否符合要求,在JMeter中我们不叫检查点,我们叫断言。说白了就是用一个预设的结果(值、表达式、时间长短等条件)与实际结果匹配,匹配到则成功,反之失败。
JMeter版本的断言元件有13 个,比如响应断言、XML断言、BeanShell断言;较常用的是响应断言;对于复杂的断言还可以通过BeanShell脚本来完成(BeanShell是类Java的脚本语言,实际上BeanShell是一个小巧的Java源码解释器,可以直接调用Java程序,具体有关BeanShell的内容请到官网ht://www.beanshell.org/ 了解)。断言的访问路径是: [测试计划] - K断言]。

监听器

JMeter的测试结果需要添加监听器来收集,JMeter结果收集程序的设计模式就是监听器
模式。JMeter的监听器有两个任务。
(1)添加结果监听,并且可以保存测试结果到文件,这些结果数据可以供再次分析使用。
(2)展示结果,JMeter可以以表格及图形的形式展现结果,方便测试人员分析测试结果。我们在开发测试脚本时,不可避免需要调试,监听器也提供了辅助(比如察看结果树,我们可以在其中看到请求与响应的数据)。JMeter监听器共有19个元件, 访问路径是: K测试计划] - [监听器]。[取样器] [断言] K监听器]组合在一起就可以帮我们完成发送请求、验证结果及记录结果三项工作。

前置处理器

在测试脚本开发过程中,我们在请求发送前可能会做一-些环境或者参数的准备工作,那么我们可以在前置处理器中来完成这些工作。比如,我们在对数据库进行操作前需要先建立一个数据库连接,那么前置处理器就可以完成这个功能。前置处理器访问路径:[测试计划]一[前置处理器]

后置处理器

后置处理器一般放在取样器之后,用来处理服务器的返回结果,比如一个Web应用程序,我们登录后会返回一个SessionID,这个SessionID在登录之后的业务操作过程中会作为验证条件,验证用户是否合法登录了。我们利用取样器模拟这个请求时就需要带上这个属性,那么如何获取呢?
首先我们要知道这个SessionID从哪里来?它是由服务器返回的。接着我们要获取它,用什么工具获取呢? JMeter帮我们提供了元件,比如正则表达式提取器,它支持正则表达式的方式来提取数据。
后置处理器就是专门用来对响应数据做处理的元件,大家可能听说过关联这个名词,JMeter的关联就是通过后置处理器来完成的。
访问路径: [测试计划]一[后置处理器]

配置元件

性能测试中为了模拟大量用户操作我们往往需要做参数化,Jmeter的参数化可以通过配置元件来完成,比如CSVDataSetConfig,它可以帮助我们从文件中读取测试数据。另外JMeter也提供了众多的函数(通过函数助手可以查看到,后续会讲到)来帮我们生成动态数据。当然配置元件的作用不仅于此,它还可以用来记录服务器的返回数据,比如Http CacheManager,自动记录服务器返回的Cache 信息。简而言之它为取样器提供预备数据,然后由取样器发出请求。
取样器访问路径: [测试计划] - [配置元件]

控制器

我们在收邮件时,只需要登录一-次邮箱即可以查看多封邮件。如果这个场景我们要在JMeter中实现,我们需要控制登录的次数,如何实现呢? JMeter 逻辑控制器( 后续说到控制器时默认为逻辑控制器) 中的仅一次控制器即可以完成。当然了,控制器不只有这一个,还有很多其他的控制器来完成我们的各种需求。打游戏有攻略,各种招式完全超乎设计人员想象;控制器用法也有攻略,组合在一起也能够完成各种奇葩需求。
控制器的访问路径:[测试计划]-K线程组]-K逻辑控制器)。

定时器

为了足够真实地模拟用户负载,我们有时会需要模拟这些请求在同- -时 刻发送,就好像把大家集合在一条起跑线上,然后一声令响,同时起跑。那么我们此时需要一个集合的功能,JMeter 中可以通过定时器来完成这个需求。当然了,定时器可不只有这一个功能,定时器种类有很多,每一种代表了不同的功能,基本能够满足我们的所有幻想。

线程组

性能测试需要模拟大量用户负载的情况,线程组就是用来完成这个工作的,在此元件中我们可以设置运行的线程数(就是模拟多少用户,一线程一用户)。线程组的设置十分简单,除了设置线程数以外,还可以设置运行时长,定时运行等。另外第三方插件(JMeter Plugin)的扩展也让JMeter的场景设计更加丰富。
访问路径: [测试计划] - KThreads (Users)]

测试片段

上面我们介绍了JMeter的组成部分,下面我们打开JMeter GUI看一下这些组件菜单。从中我们可以看到Test Fragmet这个组件,这个组件是千什么的呢?它是一个辅助的组件,在此节点下几乎可以放置任何JMeter测试元件,但它一般不会 被运行,那它为什么存在?有什么作用呢?
(1)在脚本开发过程中可以用来备份元件。
(2) TestFragment 下的元件可以被模块控制器调用,我们可以利用它来模块化请求(是不是有点开发程序的味道?把一个业务封装成一个方法供复用)供模块控制器调用。

工作台(非测试元件)

顾名思义,工作平台。它也不直接参与运行,这么说间接还是有作用的了?当然,存在即有一定道理,它的功能有:
(1)我们在运用JMeter录制Http协议脚本时就用到它,我们可以在它下面建立一个HTTP
代理服务器元件,设置代理信息然后进行录制。
(2)设置服务器监控(HTTP Mirror Server),当然了,不建议大家用此功能来做测试监控,主要是避免对Jmeter负载产生影响。
(3)显示当前JMeter属性信息。
(4)备份脚本,特别是我们在脚本调试过程中可以把它作为一个元件暂存区。
以_上是JMeter的主要组件, JMeter 的设计理念也与其他的性能测试工具一样, 采用组件方式开发,方便进行扩展。除了官方提供的默认组件外,不少第三方组织也针对性地进行扩展。正是这些优秀组件的存在使当前运用JMeter进行性能测试更容易、也更高效。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小桃子的思念

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值