zoukankan      html  css  js  c++  java
  • jmeter

    Jmeter中各个元件的执行顺序:

    在同一作用域名范围内,测试计划中的元件按照如下顺序执行。

    (1)配置元件(config elements )

    (2)前置处理程序(Per-processors)

    (3)定时器(timers )

    (4)取样器(Sampler)

    (5)后置处理程序(Post-processors) (除非Sampler 得到的返回结果为空)。

    (6)断言(Assertions)(除非Sampler 得到的返回结果为空)。

    (7)监听器(Listeners)(除非Sampler 得到的返回结果为空)。

     

    关于执行顺序,有两点需要注意:

    *  前置处理器、后置处理器和断言等元件 功能是对 取样器作用,因此,如果在它们的作用域内没有任何取样器,则不会被执行。

    *  如果在同一作用域范围内有多个同一类型的元件,则这些元件按照它们在测试计划中的上下顺序一次执行。

    备注:执行顺序依次为:配置元件(CSV Data Set Config)-前置处理器-定时器-取样器-后置处理器-断言-监听器

    一、定时器的作用域

    1、定时器是在每个sampler(采样器)之前执行的,而不是之后(无论定时器位置在sampler之前还是下面);

    2、当执行一个sampler之前时,所有当前作用域内的定时器都会被执行;

    3、如果希望定时器仅应用于其中一个sampler,则把定时器作为子节点加入;

    4、如果希望在sampler执行完之后再等待,则可以使用Test Action;

    二、定时器的作用

    1、固定定时器(Constant Timer)

    这是一个很重要的定时器,如果你需要让每个线程在请求之前按相同的指定时间停顿,那么可以使用这个定时器;需要注意的是,固定定时器的延时不会计入单个sampler的响应时间,但会计入事务控制器的时间。

    对于“java请求”这个sampler来说,定时器相当于loadrunner中的pacing(两次迭代之间的间隔时间);

    对于“事务控制器”来说,定时器相当于loadrunner中的think time(思考时间:实际操作中,模拟真实用户在操作过程中的等待时间)。

    我们通常说的响应时间,应该大部分情况下是针对某一个具体的sampler(http请求),而不是针对一组sampler组合的事务 。

    2、固定吞吐量定时器(Constant Throughput Timer)

    可以让JMeter以指定数字的吞吐量(即指定TPS,只是这里要求指定每分钟的执行数,而不是每秒)执行。

    吞吐量计算的范围可以为指定为当前线程、当前线程组、所有线程组等范围,并且计算吞吐量的依据可以是最近一次线程的执行时延。这种定时器在特定的场景下,还是很有用的。

    我暂时还没有用到这个

     

    3、高斯随机定时器(Gaussian Random Timer)

    如需要每个线程在请求前按随机时间停顿,那么使用这个定时器,上图表示暂停时间会分布在100到400之间,计算公式参考:Math.abs((this.random.nextGaussian() * 300) + 100)

    4、泊松随机定时器(Poisson Random Timer)

    这个定时器在每个线程请求之前按随机的时间停顿,大部分的时间间隔出现在一个特定的值,总的延迟就是泊松分布值和偏移值之和。

    上面表示暂停时间会分布在100到400毫秒之间:

    (1)Lambda(in milliseconds):兰布达值

    (2)Constant Delay Offset(in milliseconds):暂停的毫秒数减去随机延迟的毫秒数

     

    4、同步定时器(Synchronizing Timer)

    这个定时器和loadrunner当中的集合点(rendezvous point)作用相似,其作用是:阻塞线程,直到指定的线程数量到达后,再一起释放,可以瞬间产生很大的压力(人多力量大- -哈哈!)

    (1)Number of Simulated Users to Group by:模拟用户的数量,即指定同时释放的线程数数量

    (2)Timeout in milliseconds:超时时间,即超时多少毫秒后同时释放指定的线程数

     

    思考:超时时间一般情况设置多大???

    首先,要清楚为什么要设置这个超时时间?

    1、实际运行过程中,可能出现始终无法达到集合点设置的并发要求;如果出现这种情况的话Jmeter会一直卡顿在那里,等待满足要求,才会继续往下执行;

    2、为了避免上述情况的发生,我们需要设置一下集合点的超时时间

      设置规则为:因为集合点超时时间的单位为ms

      计算公式:超时时间/1000 > 集合并发数/(设置线程数/启动加载时间)

     

    性能测试中我们经常提到一个概念就是“并发”,其实在实际真实的性能测试中是不存在真正的并发的。为了更真实的模拟对一个请求的并发测试场景,我们通常设置一个集合点,JMeter中提供了这样的一个功能设置。

    那么集合点的大致概念是什么呢?

    简单理解就是:设置一个阀值(请求数量),当请求数达到这个阀值时,允许请求同时发出。例如:想测试一座桥的并发(忽略载重等其他因素,只考虑通过),那么并发的请求就是类似于多少辆车可同时通过桥,而车辆一般情况下是不可能同时通过桥的,因而我们可以在桥头A,设置一个集合点,等车辆数满足一定的数量,同时让车辆通过此桥。

    添加路径:右键单击线程组,依次选择【添加/定时器/Synchronizing Timer】即可添加集合点

    添加后,显示如下图所示:

    PS:超时时间为0时,默认无超时限制。

    实际运行过程中,可能出现请求数当不满足集合点设置的请求数时,JMeter一直卡顿在如下页面:

    解决办法是:设置同步定时器的超时时间。(过了这个时间用户没有达到设置的个数,不再等待)

    同步定时器(Synchronizing Timer)的超时时间设置要求:

    超时时间 > 请求集合数量 * 1000 / (线程数 / 线程加载时间)

  • 相关阅读:
    整理ASP.NET MVC 5各种错误请求[401,403,404,500]的拦截及自定义页面处理实例
    Sql Server 创建表添加说明
    c# 去除字符串中重复字符
    WebStorm中常用的快捷键及使用技巧
    git bash中的快捷键
    git bash here 的 ~/.bashrc 配置文件。和 vue/cli 3. 0 的 .vuerc文件(preset )
    右键菜单添加打开CMD选项
    Vue中使用Vue.component定义两个全局组件,用单标签应用组件时,只显示一个组件的问题和 $emit的使用。
    vue和stylus在subline中显示高亮
    stylus入门教程,在webstorm中配置stylus
  • 原文地址:https://www.cnblogs.com/wuyonghuan/p/7159666.html
Copyright © 2011-2022 走看看