• Jmeter结构体系


    为了方便后续的讲解,我们先统一一下名词。

    元件:如果不做特殊说明,后面出现的元件代表Jmeter工具菜单中的一个子菜单(功能),比如HTTP请求、事务控制器、响应断言等,就是一个元件。

    组件:一组元件的集合(一个或者多个),比如逻辑控制器中有事务控制器,仅一次控制器,循环控制器等,这些都是元件,但他们被归类到逻辑控制器中,逻辑控制器就是组件。如图所示,图中每一个标签就是一个组件。

    现在我们就来看看Jmeter的结构,了解它的组成。从上到下,我们可以看到,在Jmeter中:所有的活动都是基于一个测试计划;测试计划中可以包含若干个线程组;线程组里包含了我们的实际任务;如果任务简单,那么一个简单的HTTP取样器就可以完成工作;但是实际上,在某些接口测试或者性能测试过程中,我们往往需要一些其他组件来共同协作才能完成测试;如果需要对性能测试场景做一定的控制,那会用到控制器和定时器等等;当然,很多时候我们需要判断一个请求是否成功,那么可以对该取样器加上一个断言;最终,为了看到测试的结果,可以加上监听器。从图中可以看出,监听器可以对整个线程组,也可以对具体的取样器;

    总之,Jmeter基本原理是在测试计划下建立一个线程池,多线程运行取样器产生大量负载,在运行过程中通过断言来验证结果的正确性,通过监听器来记录测试结果。

    比如:如果取样器中有参数化的需求,可以通过配置元件或者前置处理器来完成。

    如果有关联需求,可以通过后置处理器来完成。

    如果想要设置运行场景,比如模拟多少用户,运行多长时间,就设置成线程组。

    如果想要模拟并发场景,可以利用定时器来设置;

    如果想要控制业务的执行逻辑,比如登录只运行一次,就可以用控制器来完成。

    3.1 取样器

    取样器用来模拟用户操作,向服务器发出HTTP请求、WebService(SOAP/XML-RPC Request)请求或者Java请求等。我们可以吧HTTP请求看成是一个没有界面的浏览器,它可以发送HTTP请求,接受服务器的响应数据。

    新版Jmeter默认提供了多达30几种取样器,并且可以通过插件和二次开发继续扩展。这些取样器基本上涵盖了常见的各种协议,比如HTTP、FTP、JAVA等等,还支持BeanShell脚本。取样器的访问路径:【测试计划】-【线程组】-【Sampler】。

    3.2 断言

    断言用来验证结果是否正确,用过LoadRunner的同学应该会知道检查点这个功能,可以帮助我们来判断请求是否成功返回是否符合要求,在Jmeter中叫断言。其实就是用一个预设结果(值、表达式、时间长短等条件)与实际结果匹配,配到则成功,反之失败。

    Jmeter的断言元件也有多种,比如响应断言、XML断言、BeanShell断言等等。用得比较多的则是响应断言。对于复杂的断言还可以通过BeanShell脚本来完成(BeanShell是类Java的脚本语言,实际上BeanShell是一个小巧的Java源码解释器,可以直接调用Java程序)。断言的访问路径是:【测试计划】-【断言】。

    3.3 监听器

    Jmeter的测试结果需要添加监听器来收集,Jmeter结果收集程序的设计模式就是监听器模式。Jmeter监听器有两个任务:

    • 添加结果监听,并且可以保存测试结果到文件,这些结果数据可供再次分析使用。
    • 展示结果,Jmeter可以以表格及图形的形式展现结果,方便测试人员分析测试结果。

    我们在开发测试脚本时,不可避免需要调试,监听器也提供了辅助(如查看结果树就可以在其中看到请求与响应的数据)

    Jmeter监听器的访问路径是:【测试计划】-【监听器】。

    【取样器】、【断言】、【监听器】组合在一起就可以帮我们完成发生请求、验证结果及记录结果三项操作。

    3.4 前置处理器

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

    3.5 配置元件

    性能测试中为了模拟大量用户操作我们往往需要做参数化,Jmeter的参数化可以通过配置元件来完成,比如CSV Data Set Config,它可以帮我们从文件中读取测试数据。另外Jmeter也提供了众多函数(通过函数助手)来帮我们生产动态数据。当然配置元件的作用不仅如此,它还可以用来记录服务器的返回数据,比如HTTP Cache Manager,自动记录服务器返回的Cache信息。简而言之就是它为取样器提供预备数据,然后由取样器发出请求。取样器路径:【测试计划】-【配置元件】。

    3.6 后置处理器

    后置处理器一般放在取样器之后,用来处理服务器返回结果,比如一个Web应用程序,我们登录后悔返回一个SessionID,这个SessionID在登录之后的业务操作过程中悔作为验证条件,验证用户是否合法登录了。我们利用取样器模拟这个请求时就需要带上这个属性,那么如何获取呢?首先我们要知道这个SessionID是从服务器返回来的。接着获取他,用什么工具呢?Jmeter帮我们提供了元件,比如正则表达式提取器,它支持正则表达式的方式提取数据。

    后置处理器就是专门用来对响应数据做处理的元件,大家可能听过关联这个词,Jmeter的关联就是通过后置处理器来完成的。访问路径:【测试计划】-【后置处理器】。

    【前置处理器】、【配置元件】、【后置处理器】都是为取样器提供数据支持的,取样器关注的只是业务逻辑。

    3.7 控制器

    我们在收邮件时,只需要登录一次邮件即可查看多封邮件,如果这个场景要在Jmeter中实现,我们就需要控制登录的次数,如何实现呢?Jmeter逻辑控制器中的仅一次控制器就可以完成这个操作。当然,控制器不止这一个,还有很多其他的控制器来完成各种需求。打游戏有攻略,各种招式完全超乎设计人员想象,控制器用法也有攻略,组合在一起也能完成各种奇葩需求。

    控制器访问路径:【测试计划】-【线程组】-【逻辑控制器】。

    3.8 定时器

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

    访问路径:【测试计划】-【线程组】-【定时器】。

    3.9 线程组

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

    3.10 测试片段(Test Fragment)

    前面介绍了Jmeter的组成部分,在Jmeter还有个组件,叫测试片段。测试片段是一个辅助组件,在此节点下几乎可以防止任何Jmeter的测试元件,但它不会被直接运行。它的作用在于:

    • 在脚本开发过程中可以用来备份元件。
    • 测试片段下的元件可以被模块控制器调用,可以利用它来模块化请求,供模块控制器调用。

    3.11 非测试元件

    在Jmeter4.0版本之前有个组件叫工作台,4.0版本之后合并到了非测试元件。如图

    主要作用有:

    • 录制HTTP协议脚本
    • 设置服务器监控,当然不建议大家使用此功能来监控,因为会消耗资源对Jmeter负载测试造成影响。
    • 显示当前Jmeter属性信息
    • 备份脚本

    3.12 Jmeter测试计划要素

    Jmeter中一个脚本即是一个测试计划,也是一个管理单元。Jmeter的请求模拟与并发数设置都在脚本文件中一起设置,不像LoadRunner把脚本与虚拟用户分开。测试计划要素如下:

    要素1:脚本中测试计划只能有一个

    Jmeter测试计划类似LoadRunner Controller中的场景,同一时刻场景当然只能有一个,Jmeter在GUI中显示的是树型结构,测试计划是根节点,根节点当然只有一个。

    要素2:测试计划中至少要有一个线程组

    Jmeter负载是通过线程组驱动的,所以计划中至少要出现一个线程组,也许你只运行一个线程。Jmeter测试计划支持多个线程组。我们可以在计划下面建立多个线程组,类似LoadRunner中Group方式的场景,把不相关的业务分布在不同的线程组。

    要素3:至少要有一个取样器

    测试的目的就是要模拟用户请求,没有取样器脚本就毫无意义。

    要素4:至少要有一个监听器

    测试结果用来衡量系统性能,我们需要从结果中分析系统性能。

    其他元件都是为这些要素服务的,到底当前元件下能够添加那些种类的元件呢?不用担心,Jmeter做了严格控制。

  • 相关阅读:
    php实战案例记录(2)生成包含字母和数字但不重复的用户名
    尚硅谷axios笔记——入门学习
    单片机程序无法下载?
    数字化智慧公厕:开创城市数智化治理新时代
    Python实现猎人猎物优化算法(HPO)优化卷积神经网络回归模型(CNN回归算法)项目实战
    【python与数据分析】Matplotlib数据可视化(续)
    【JavaWeb】品牌管理系统前后端代码实现
    基于.NetCore开发博客项目 StarBlog - (18) 实现本地Typora文章打包上传
    【hisi】——hisi开发相关文档
    《深入理解计算机系统》笔记
  • 原文地址:https://blog.csdn.net/weixin_68548441/article/details/125498954