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. bzoj5417/luoguP4770 [NOI2018]你的名字(后缀自动机+线段树合并)

    bzoj5417/luoguP4770 [NOI2018]你的名字(后缀自动机+线段树合并) bzoj Luogu 给出一个字符串 $ S $ 及 $ q $ 次询问,每次询问一个字符串 $ T $ ...

  2. 【算法】两个list合并

    转载博客地址 http://blog.sina.com.cn/s/blog_5da93c8f0101fdrp.html 有两个ArrayList,分别为list1和list2,分析这两个list后生成 ...

  3. synchronized是对象锁还是全局锁

    昆昆欧粑粑 2019-02-20 15:09:59 1148 收藏 1分类专栏: java学习 文章标签: synchronized 全局锁 对象锁 同步版权都可以锁!synchronized(thi ...

  4. Java中hashCode、equals、==的区别

    ref:http://www.cnblogs.com/skywang12345/p/3324958.html 1.==作用: java中的==用来判断两个对象的地址是否相等:当对象是基本数据类型时,可 ...

  5. Oracle入门基础(六)一一子查询

    SQL> --查询工资比SCOTT高的员工信息 SQL> --1. SCOTT的工资 SQL> select sal from emp where ename='SCOTT'; SA ...

  6. 学习Apache(五)

     apache目前主要有两种模式:prefork模式和worker模式: 1)prefork模式(默认模式) prefork是Unix平台上的默认(缺省)MPM,使用多个子进程,每个子进程只有一个线程 ...

  7. IList和DataSet性能差别 转自 http://blog.csdn.net/ilovemsdn/article/details/2954335

    IList和DataSet性能差别         分类:             NHibernate/Spring/NetTiers/Castle/Ibatis             C#    ...

  8. 用js中的let等操作,要手动开启ECMAScript6(如果不设置,let等ES6语法会报错)

    问题:idea默认没有开启ECMAScript6,需要进行设置:(如果不设置,let等ES6语法会报错)步骤: File | Settings | Languages & Frameworks ...

  9. IdentityServer4系列 | 支持数据持久化

    一.前言 在前面的篇章介绍中,一些基础配置如API资源.客户端资源等数据以及使用过程中发放的令牌等操作数据,我们都是通过将操作数据和配置数据存储在内存中进行实现的,而在实际开发生产中,我们需要考虑如何 ...

  10. 针对于iosAPP内嵌H5,-webit-overflow-scrolling:touch;产生空白情况

    问题描述:一个内嵌IOSAPP的H5页面,长页面,大概1.6个屏幕高度,由于有列表滑动起来很不流畅,所以用了-webit-overflow-scrolling:touch;这个只针对ios端的物理滚动 ...