jmeter元件,作用域与优先级

一、jmeter元件

1、配置元件:优先级最高

  1.1 重点使用元件:csv数据文件设置、用户定义变量、计数器

2、取样器:根据不同协议来编写请求脚本的元件

  2.1 是真正发起请求的元件

  2.2 执行顺序: 在没有逻辑控制器,是从上往下执行;多用户并发的时候,每个用户的执行顺序,都是从上往下

3、逻辑控制器: 控制取样器的执行逻辑

  3.1 先于取样器执行

  3.2 作用范围: 只针对它子集取样器

4、前置处理器:

  4.1 元件:用户参数

  4.2 取样器前面执行,放在不同的位置,作用范围 是不一样

5、后置处理器:对取样器的执行结果进行处理

  5.2 JSON提取器,正则提取器

  5.1 后置处理器是放在具体的某一个取样器下作为这个取样器的子集,所以,这个后置处理器,只作用在当前这个取样器上,不可以放在公共的线程组后测试计划下,否则会识别不到要处理哪一个执行结果

6、查看结果数:根据收到响应的先后顺序显示,先收到,先显示。所以,查看结果树中显示的结果顺序,在单个用户请求的时候,顺序与请求顺序一致, 但是,在多用户并发的时候,就不一定一致了,所以,在多用户并发的时候,不要问, 为什么查看结果树中顺序不对。

二、变量的定义

1、jmeter中变量名称的定义用字母或数字或下滑线(遵循java变量名定义规则)

2、变量的引用:${变量名}

3、变量的定义方法

  3.1 配置元件:用户定义变量

    3.1.1 添加变量路径一:鼠标右键-配置元件-用户定义的变量

    3.1.2 添加变量路径二:测试计划-直接添加

    3.1.3 用户定义变量,可以跨线程组被引用,是一个全局变量(但 是,这个全局变量与代码中讲的全局变量有差异)

  3.2 前置处理器:用户参数

    3.2.1 测试计划下,添加用户参数, 可以多个线程组中引用用户参数

    3.2.2 在某一个线程组下面,添加用户参数,当前这个线程组中引用参数, 可以引用到值,但是,其他线程组,引用是应用不到值;用户参数,不能直接跨线程组被引用。

    3.3.3 在一个线程组下,把用户参数,挂在某一个取样器下面,作为取样器的子集,运行时,这个取样器能取到用户参数的值,在这个取样器之后的取样器,也能取到用户参数的值,但是,在这个取样器之前的取样器,是不能取到用户参数的值。

  3.3 测试计划:测试计划中有一个独立运行每个线程组(复选框),默认没有勾选,代表测试 计划下,所有的线程组是并行执行,勾选了,那么多个线程组,就从上往 下执行,前面线程组执行结束才会开始执行后面的线程组。

注意:什么时候使用定义变量---在项目中存在后期会变化的参数时用到定义变量,以便于后期更改参数时,只需要更改定义的变量的值,不需要一个脚本一个脚本去改数据

三、函数

1、函数的名称是严格区分大小写, 函数前面是有 两个下划线;在函数助手对话框中,点击生成按钮,结果框中,有正常显示结果,说明你的函数一定 可以正常运行,但是,没有结果或结果报错,并不代表,你的函数在使用的时候会失 败。

2、jmeter函数有两种

  2.1 自带函数: Tools > 函数助手对话框 -----jmeter有这些方法,你可以直接 调用来使用它实现你要的功能

    2.1.1  Tools--> 函数助手对话框-->选择函数-->点击帮助会跳转到详情介绍页面

    2.1.2 使用:Tools--函数助手对话框--选择函数值-填写下方值--点击生成-复制表达式到你定义的变量中:156${__Random(00000000,99999999,)

  1.2 扩展函数----第三方扩展包

3、随机函数

  3.1 用户定义变量:在启动时,获取一次值,在运行过程中,不会动态获取值;比如一个线程组中有两个接口用到同一个用户变量的值,在执行的过程中,函数仅会生成一个随机数,两个接口使用的是一个值

  3.2 用户参数:在启动时,获取一次值,在运行过程中,还会动态获取值

    3.2.1 两个接口都想使用用户参数值,而且想使用相同的值的方法,例如登录的接口想使用注册接口的手机号码

       3.2.1.1 把用户参数,放在第1个接口取样器的子集

       3.2.1.2 当用户参数在线程组下时,勾选用户参数中 【每次迭代更新一次】复选框也可以两个接口一起使用

4、时间相关函数

  4.1 获取当前时间戳:${__time(,)}

    4.1.1 定义时间格式:年月日:${__time(yyyyMMdd,)} ---20220416;年月日时分秒:${__time(yyyyMMdd HH:mm:ss,)} --20220416 10:28:03;微秒:${__time(yyyyMMdd HH:mm:ss.S,)}--20220416 10:28:37.617

  4.2 时间偏移函数:${__timeShift(,,,,)}

    4.2.1 减法操作:比当前时间早4天:${__timeShift(yyyyMMdd,,-p4d,,)} ---20220412 ;比当前时间晚4天:${__timeShift(yyyyMMdd,,p4d,,)} --20220420

    4.2.2 有一个接口中时间范围的参数,起始时间、结束时间,我期望从今天 开始,往历史方向减1-5天的一个范围:${__timeShift(yyyyMMdd,,-p${__Random(1,5,)}d,,)}或者${__timeShift(yyyyMMdd,${__time(YMD,)},-p${__Random(1,5,)}d,,)}

  4.3 随机日期:${__RandomDate(yyyy-MM-dd,2022-03-01,2022-03-28,,)}

  4.4 时间格式转换函数:${__dateTimeConvert(,,,)} :有时开发使用的时间是时间戳,需要用到函数进行转换

5、计数函数

  5.1 加1函数:${__counter(,)},这个函数每次只能加1

  5.2 如果每次想加其他数字,则需要使用计数器-配置元件

    5.2.1 starting value:开始递增的值    递增:可以自己设置,每次根据设置的值进行递增    Maximum value:最大递增值,当你设置了最大值的时候,使用时,超过最大时的时候,就会从起始值开始循环  引用名称:在应用时调用的参数

    5.2.2 与每用户独立的跟踪计数器(复选框):不勾选:所有的线程数及他们的循环请求次数,都使用这一个 计算器进行累加  勾选:多少个线程数,就有多少个计数器

6、${__CSVRead(,)} 暂时请不要用,因为处理不了稍微复杂的场景,会容易出错

7、加密函数

  7.1  函数:${__digest(,,,,)}---${__digest(MD5,12345678,,,)} 只能做简单加密

  7.2 如果你们的项目中的接口参数值,需要进行加密,而这个加密算法,不是 digest函数支持,那你就需要写代码

    7.2.1 在性能脚本中,任何Beanshell元 件都不要用。 Beanshell元件的性能是非常差的,在性能脚本中,请不要使用。

    7.2.2 在性能脚本中,写java代码可以使用JSR223的元件,代码写法按照 beanshell语法写法。对应的函数: ${__jexl3(,)} ${__groovy(,)}

  7.3 每个公司加密算法都不一样,这个算法的源代码是需要开发人员打包成为jar文件,由测试人员将jar包放到jmeter的\lib中,重启jmeter,写脚本调用jar文件中方法来写代码,不要把jar文件使用jmeter测试计划下的引入库来使用。

8、整数运算:${__intSum(,,)}

9、属性相关函数

  9.1 设置属性:${__setProperty(,,)}

  9.2 获取属性:${__property(,,)} 简化版:${__P(,)}

10、属性

1、属性是jmeter工具带有的一个参数,jmeter.properties是它的属性配置文件 以.properties结尾的文件,都是 jmeter的属性配置文件。配置文件的属性展示格式为属性名 = 属性值

2、分类:静态属性、动态属性, jmeter属性、系统属性

  2.1  静态属性:写在properties文件中的参数,都是我们jmeter的静态属性

  2.2 动态属性:在jmeter运行过程中,自定义的一些属性

    2.2.1 当我们关闭了了jmeter,这些动态属性就自动消失,动态属性是存储在内存中

  2.3 设置属性:${__setProperty(,,)}

  2.4 jmeter属性,系统属性查看路径:鼠标右键---非测试元件---属性显示---可以切换查看系统与jmeter属性

3、设置为属性之后,我们可以跨线程组引用用户参数的值

4、设置属性的时候,多个线程组,默认是同时运行的,第一次,可能出现, 获取不到值,但是从第二次开始,一定都能获取到值了。

11、属性与变量的结合使用

1、属性是jmeter工具所有,可以在jmeter的任何地方被调用。把用户 参数的值用属性来接收,然后,我就可以在jmeter的任何地方获取属性值,从而获取到用户参数的变化的值。

12、拼接函数

1、jmeter中的连接:188${__Random(10000000,99999999,)}

2、当我们引用变量的时候,${变量名} 这个变量名是不能进行运算的

3、${__V(var_mobile_${__counter(,)},)} 把前缀相同,后缀不相同的一个变量或函数代替,整体作为V函数传入参数。

4、使用的场景:

  4.1 后置提取的时候,有时候会一次提取多个值。

  4.2 从数据库获取数据,返回多个值

jmeter元件,作用域与优先级的更多相关文章

  1. JMeter元件作用域实践指南

    从一个问题说起 对于以下测试脚本: 为了能调用进入房间接口,需要从考场接口获取考场token.为了调用考场接口,需要从登陆接口获取登陆token.元件说明如下: 学生登录,提取登录${token}传入 ...

  2. Jmeter元件作用域

    转载自飞测团队

  3. Jmeter入门--元件作用域和执行顺序

    一.元件作用域 8类可被执行的元件(测试计划于线程组不属于可执行元件),这些元件中,取样器(Sampler)是典型的不与其他元件发生交互作用的元件,逻辑控制器只对其子节点的取样器有效,而其他元件(配置 ...

  4. JMeter元件的作用域与执行顺序

    元件的作用域 先来讨论一下元件有作用域.<JMeter基础元件介绍>一节中,我们介绍了8类可被执行的元件(测试计划与线程组不属于元件),这些元件中,取样器 是典型的不与其它元件发生交互作用 ...

  5. 学了元件作用域,我终于对JMeter开窍了

    引子 先看一下这个例子,测试计划"进入考场"下面有一个线程组,线程组下面有 3 个 HTTP 请求,分别是学生登录.考场 token和进入房间: 它们的处理逻辑是: 学生登录后,在 ...

  6. 转 6 jmeter元件的作用域与执行顺序

    6 jmeter元件的作用域与执行顺序   元件的作用域 配置元件(config elements)会影响其作用范围内的所有元件.前置处理程序(Per-processors)在其作用范围内的每一个sa ...

  7. 性能测试工具Jmeter06-Jmeter元件作用域和执行顺序

    元件作用域 8类可被执行的元件(测试计划与线程组不属于可执行元件),这些元件中,取样器(sampler)是典型的不与其它元件发生交互作用的元件,逻辑控制器只对其子节点的取样器有效,而其它元件(配置元件 ...

  8. jmeter元件作用及执行顺序

    jmeter是一个开源的性能测试工具,它可以通过鼠标拖拽来随意改变元件之间的顺序以及元件的父子关系,那么随着它们的顺序和所在的域不同,它们在执行的时候,也会有很多不同. jmeter的test pla ...

  9. Jmeter元件——JSON Extractor后置处理器介绍2

    在前段时间将JSON Extractor元件做了个简单的介绍:Jmeter元件——JSON Extractor后置处理器介绍1,今天以一个具体的json,以不同的方式提取数据做个详细的介绍. 一.模拟 ...

随机推荐

  1. [bzoj3585] Rmq Problem / mex

    [bzoj3585] Rmq Problem / mex bzoj luogu 看上一篇博客吧,看完了这个也顺理成章会了( (没错这篇博客就是这么水) #include<cstdio> # ...

  2. width:auto 和 width:100%有什么区别

    width:auto 和 width:100%有什么区别 宽度计算不同 <div class="parent"> <span class="child& ...

  3. 重磅!Vertica集成Apache Hudi指南

    1. 摘要 本文演示了使用外部表集成 Vertica 和 Apache Hudi. 在演示中我们使用 Spark 上的 Apache Hudi 将数据摄取到 S3 中,并使用 Vertica 外部表访 ...

  4. jQuery--筛选【串联函数】

    串联函数简介 A.add(B) 将A和B组合成一个对象 A.children().andSelf() 将之前的对象添加到操作集合中 A.children().children().end() 回到最近 ...

  5. 如何监控 Elasticsearch 集群状态?

    Marvel 让你可以很简单的通过 Kibana 监控 Elasticsearch.你可以实时查看你 的集群健康状态和性能,也可以分析过去的集群.索引和节点指标.

  6. memcached 最大能存储多大的单个 item?

    1MB.如果你的数据大于 1MB,可以考虑在客户端压缩或拆分到多个 key 中. 为什么单个 item 的大小被限制在 1M byte 之内? 简单的回答:因为内存分配器的算法就是这样的. 详细的回答 ...

  7. java-IO异常处理

    以前的异常处理 public class Demo3 { public static void main(String[] args) { //提高fw的作用域 //变量定义的时候可以没有值,但是使用 ...

  8. spring boot 实现优雅的关闭

    1.导入jar包 <dependency> <groupId>org.springframework.boot</groupId> <artifactId&g ...

  9. Oracle 数据库备份实战

    最近公司的客户希望使用oracle数据库,所以我们只好将数据从mysql数据库迁移到oracle数据库,并对oracle数据库制定了一个备份策略,之前虽然对oracle很熟悉,但做备份策略还是第一次, ...

  10. MyBatis Plus 2.3 个人笔记-03-Active Record

    AR 语法糖  是一种领域模型模式,特点就是一个模型类对应关系型数据库中的一个表,而模型类的一个实例对应表中的一条记录 实现AR [在代码生成器中可以添加配置] import com.baomidou ...