jmeter基本原理

一、认识jmeter

  • 开源免费、安装简易、多系统兼容

    相对于 Loadrunner,JMeter 没有版权的困扰,脚本可以在 Windows、Linux、Mac 任意系统间切换。

  • 丰富的基础插件

    相对于 Locust性能测试框架,JMeter 提供了非常多的插件,可以减少重复造轮子。Locust 的基础功能需要写代码实现,更适合定制性较强的测试场景,如游戏类测试,在敏捷化的测试团队中需要考虑到这部分的时间成本问题。

  • 良好的拓展性

    虽然 JMeter 已经有了丰富的基础插件,它本身还支持二次开发,以满足团队定制化的需求。同样,你也可以将 JMeter 平台化,通过平台化的操作来管理 JMeter,增强测试团队的协作性。

二、线程组配置

JMeter 的线程组元件中的线程属性,线程组建立是你使用 JMeter 进行性能测试最基础的步骤,压力发起策略几乎都依赖于这个元件,所以理解其核心参数很有必要。这里把线程组分成三部分,第一部分为请求取样器执行错误时,需要执行的下一步操作;第二部分是线程属性;第三部分是调度配置。如图所示:

  • 第一部分:请求取样器执行错误时,需要执行的下一步操作

    • continue:继续执行接下来的操作;
    • Start Next Thread Loop:忽略错误,执行下一个循环;
    • Stop Thread:退出线程(不再进行此线程的任务操作);
    • Stop Test:等待当前执行的采样器结束,接着结束整个压测;
    • Stop Test Now:直接停止整个测试。
  • 第二部分:线程属性

    • Number of Threads(users):线程数,即模拟的用户数;
    • Ramp-up period(seconds):达到指定线程数所需要的时间。比如:线程数(Number of Threads(users))设置为100,此处(Ramp-up period(seconds))设置为5,那么每秒启动的线程数就是100/5=20个线程。相当于每秒启动20个线程,也就是每秒增加20个访问系统的用户;
    • Loop Count:循环次数,勾选的话,就代表一直循环;
    • Delay Thread creation until needed:当线程需要执行的时候,才会被创建。如果不选择这个选项,那么,在计划开始的时候,所有需要的线程就都被创建好了;
  • 第三部分:调度配置

    • Duration(seconds):持续时间(秒),此项填入数字n,那么代表这个测试计划将从某个时间开始,执行n秒后才结束(此处会忽略结束时间的选项);
    • Startup delay(seconds):启动延迟(秒),此项填入数字n,手动点击开始执行计划,然后延迟n秒后,计划才真正的开始执行(此处会忽略启动时间的选项)。

三、组件的作用

JMeter 有多种组件: 配置元件、取样器、定时器、前置处理器、后置处理器、断言、监听器,如图所示:

  • 配置元件(Config Eelement)

    用于初始化变量,以便采样器使用。类似于框架的配置文件,参数化需要的配置都在配置元件中。

  • 取样器(Sampler)

    承担 JMeter 发送请求的核心功能,支持多种请求类型,如 HTTP、FTP、JDBC 等,也可以使用 Java 类型的请求进行自定义编写。

  • 定时器(Timer)

    一般用来指定请求发送的延时策略。在没有定时器的情况下,JMeter 发送请求是不会暂停的。

  • 前置处理器(Pre Processors)

    在进行取样器请求之前执行一些操作,比如生成入参数据。

  • 后置处理器(Post Processors)

    在取样器请求完成后执行一些操作,通常用于处理响应数据,从中提取需要的值。

  • 断言(Assertion)

    主要用于判断取样器请求或对应的响应是否返回了期望的结果。

  • 监听器(Listener)

    监听器可以在 JMeter 执行测试的过程中搜集相关的数据,然后将这些数据在 JMeter 界面上以树、图、报告等形式呈现出来。不过图形化的呈现非常消耗客户端性能,在正式性能测试中并不推荐使用。

四、组件的顺序

了解正确的组件执行顺序可以帮助测试工程师添加正确的组件,而不会因添加错误的组件,导致不必要的麻烦。组件排序,如下图所示

五、JMeter 参数化

这里介绍比较常见的 JMeter 参数化的实现方式CSV Data Set Config,本质是将参数化的数据放入文件中,参数化读取依赖于文件操作。这样的参数化方式很常用,尤其适用于参数化数据量较多的场景,而且维护比较简单灵活。CSV Data Set Config 的可配置选项较多,详细见下图:

  • 文件名(Filename)

    顾名思义,这里填写文件的名字即可。保存参数化数据的文件目录,这边将测试数据和脚本放置在同一路径下。在这里推荐一个小技巧,那就是采用“相对路径”。使用绝对路径,在做脚本迁移时大部分情况下都需要修改。用相对路径,就不用频繁修改该选项了。

  • 文件编码(File encoding)

    指定文件的编码格式,设置的格式一般需要和文件编码格式一致,大部分情况下保存编码格式为 UTF-8 即可。

  • 变量名称(Variable Names)

    对应参数文件每列的变量名,类似 Excel 文件的文件头,主要是作为后续引用的标识符,一般使用英文。

    后续需要引用时,通过“${变量名称}”就可以了,如图所示:

  • 忽略首行(Ignore first line)

    第一行不读取。比上图的第一行数据是用户名(username)、密码(password)等标题,实际上并不是需要读取的业务数据,此时就可以采用忽略首行。

  • 分隔符(Delimiter)

    用来标示参数文件中的分隔符号,与参数文件中的分隔符保持一致即可。

  • 遇到文件结束符再次循环(Recycle on EOF)

    是否循环读取参数文件内容。因为 CSV Data Set Config 一次读入一行,如果设置的循环次数超过文本的行数,标示为 True 就是继续再从头开始读入。

  • 遇到文件结束符停止线程(Stop thread on EOF)

    读取到参数文件末尾时,是否停止读取线程,默认为 False。如果“遇到文件结束符再次循环”已经设置为 True 了,这个选项就没有意义了。

  • 线程共享模式(Sharing mode)

    这个适用范围是一个脚本里多线程组的情况。所有线程是默认选项,代表当前测试计划中的所有线程中的所有的线程都有效;当前线程组代表当前线程组中的线程有效;当前线程则表示当前线程有效。一般情况下,我们选择默认选项“所有线程”。

六、参考

jmeter压测练习:https://github.com/princeqjzh/iJmeter

posted @ 2022-08-02 21:39  xyztank  阅读(378)  评论(0编辑  收藏  举报