jmeter元件,作用域与优先级

一、jmeter元件

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

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

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

  2.1 是真正发起请求的元件

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

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

  3.1 先于取样器执行

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

4、前置处理器:

元件:用户参数

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

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

  5.2 JSON提取器,正则提取器

不可以放在公共的线程组后测试计划下,否则会识别不到要处理哪一个执行结果

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

 

二、变量的定义

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

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

3、变量的定义方法

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

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

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

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

  3.2 前置处理器:用户参数

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

用户参数,不能直接跨线程组被引用。

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、随机函数

比如一个线程组中有两个接口用到同一个用户变量的值,在执行的过程中,函数仅会生成一个随机数,两个接口使用的是一个值

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

例如登录的接口想使用注册接口的手机号码

       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、计数函数

这个函数每次只能加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函数支持,那你就需要写代码

在性能脚本中,任何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属性

jmeter 后置处理器替换response jmeter后置处理器作用_测试计划

 

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

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

 

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

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


12、拼接函数

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

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

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

jmeter 后置处理器替换response jmeter后置处理器作用_线程组_02

 


 

jmeter 后置处理器替换response jmeter后置处理器作用_测试计划_03

 

 

 

4、使用的场景:

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

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