『动善时』JMeter基础 — 9、JMeter运行原理

1、JMeter的运行方式

接触过LoadRunner的朋友应该知道, LoadRunner可以选择是以进程方式还是以线程方式来运行,而在JMeter中是以线程的方式运行的。

由于JMeter是运行在JVM虚拟机上的, 每个进程的开销比LoadRunner的进程开销要大,如果以进程的方式来运行的话,每台负载机(我们测试的电脑)上的进程数量就不会允许太多。当我们需要进行大量并发时,就需要大量的负载机,这显然是不经济的。再者Java也是支持多线程的,所以JMeter选择了以线程的方式来运行。

JMeter通过线程组来驱动多个线程(类似LoadRunner中的虚拟用户) 运行测试脚本,对被测服务器发起负载。每个负载机上都可以运行多个线程组。

JMeter运行场景不仅可以在GUI方式中完成,还可以使用命令行。而且命令行运行的方式,对于负载机的资源消耗会更小。(关于JMeter分布式和非GUI模式运行,我们后面会详细讲解。)

2、JMeter运行原理

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

  • 如果取样器中有参数化需求,可以通过配置元件或者前置处理器来完成;
  • 如果取样器中有关联需求,可以通过后置处理器来完成;
  • 如果要模拟负载场景,比如模拟多少用户,运动多长时间,可以通过线程组完成;
  • 如果要模拟并发场景,可以通过定时器来完成;
  • 如果要控制业务的执行逻辑,比如登录只运行一次,可以通过控制器来完成;

3、元件的作用域

什么是元件:相同类似功能组件的集合称之为元件。

什么是组件:元件中的一个选项,就是一个组件。是JMeter中最小的一个控制单位。

  • JMeter中共有8类可被执行的元件,test plan(测试计划)和thread group(线程组)不属于元件,其中sampler(取样器)是不与其他元件发生交互的作用的元件。
  • Logic Controller(逻辑控制器):只对其子节点的sampler有效,而其他元件需要与sampler等元件交互。
  • 在JMeter中,元件的作用域是靠test plan的树形结构中,元件的父子关系来确定的,其原则如下:
    1)sampler不与其他元件相互作用,因此不存在作用域问题。
    2)Logic Controller只对其子节点中的samplerLogic Controller作用。
    3)除samplerLogic Controller外的其他元件,如果是某个sampler的子节点,则该元件仅对其父节点作用。
    4) 除samplerLogic Controller外的其他元件,如果其父节点不是sampler,则其作用域是该元件父节点下的其他所有后代节点(包括子节点,子节点的子节点等)。
    提示:(3)(4)点的意思是:以察看结果树为代表的大部分组件,作用域为直接父级取样器 + 直接兄弟取样器

4、JMeter元件运行顺序

在同一作用域范围内,测试计划(test plan)中的元件按照以下顺序执行:

  1. 配置元件:该元件会影响其作用范围内的所有元件。
  2. 前置处理器:元件在其作用范围内的每一个 sampler (取样器)元件之前执行。
  3. 定时器:元件对其作用范围内的每一个 sampler 有效。
  4. 取样器 sampler
  5. 后置处理器:元件在其作用范围内的每一个 sampler 元件之后执行。
  6. 断言:元件对其作用范围内的每一个 sampler 元件执行后的结果执行校验。
  7. 监听器:元件收集其作用范围的每一个sampler元件的信息并呈现出来。

这里要提示一下

  • 前置处理器(Pre-porcessors)、后置处理器(Post-porcessors)和断言(Assirtions)等元件,仅对取样器(Sampler)起作用,如在它们作用域内没有任何取样器,则不会被执行;
  • 以上元件的执行顺序,不会因为在测试计划树中的放置顺序而改变的。
  • 如果在同一作用域范围内有多个同一类型的元件,则这些元件按照它们在测试计划中的上下顺序依次执行。

5、JMeter远程运行架构图

image

  • 控制机:运用多台JMeter负载机进行性能测试时, 被选中作为管理机的那台机器即是控制机。JMeter控制机也可以参与脚本的运行, 同时它也担负着管理远程负载机和指挥远程负载机运行的任务,并且收集远程负载机的测试结果。
  • 负载机:向被测试应用服务器发起负载的机器, JMeter负载机受控制机管理。与支持其他远程运行的测试工具一样,负载机受控制机管理首先要启动一个客户端程序(Agent:jmeter-server.bat),这样控制机才可以接管负载机。控制机会把运行的脚本隐蔽的发送到远程负载机,但是运行的测试脚本有参数文件或者依赖jar包时,控制机并不能把他们发送到远程负载机,这种情况就需要手动拷贝。当然在利用JMeter做性能测试自动化时可不能这样,我们可以用工具来实现自动拷贝。
  • 远程运行逻辑
    1)远程负载机首先启动Agent程序,待控制机连接;
    2)控制机连接上远程负载机;
    3)控制机发送指令(脚本及启动命令)启动线程;
    4)负载机运行脚本,回传状态(包括测试结果);
    5)控制机收集结果并显示。

参考:https://www.cnblogs.com/jingdenghuakai/p/11125827.html

posted @ 2021-05-09 12:14  繁华似锦Fighting  阅读(574)  评论(0编辑  收藏  举报