Jmeter 变量类型和作用域

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Jmeter 变量类型和作用域相关的知识,希望对你有一定的参考价值。

参考技术A

Jmeter 有多种变量类型,每种变量有其各自的作用域。有时候不小心就会使它们之间相互冲突或者覆盖,本文梳理各种类型变量的生成方法、使用特点、作用范围。

User Defined Variables 是一种 Config Element,简称 UDV,用于在测试开始时,设定静态值,添加方法如下:
Add > Config Element > User Defined Variables

UDV允许用户定义一组初始变量,在元件中定义的UDV和在 Test Plan 中定义的UDV一样。

测试计划中的所有UDV元素——无论它们在哪里——都在一开始就被处理。
所以不能在UDV中引用在测试运行时定义的变量。例如,在UDV中引用了在运行时定义的 Property,就会导致UDV赋值为空。
处理顺序 :Jmeter 按照UDV在Test Plan中出现的顺序(从上到下)进行处理。

UDV 对 Test Plan 中的所有线程组都生效。 一旦所有UDV被处理,生成的变量集就被复制到每个线程,以提供初始的变量集。
如果运行时元素(如 User Parameters Pre-Processor 或 Regular Expression Extractor)定义了一个与UDV变量名称相同的变量,那么这将替换初始值,线程中的所有其他测试元素将看到更新的值。

作为一组初始变量,UDV一旦赋值之后就不会再改变。因此,当使用每次调用都会产生不同结果的函数给UDV赋值时,只有第一次函数调用的结果会被保存在变量中。

jmeter元件的作用域和顺序

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

jmeter的test plan通过图形化的方式表达脚本,域代码方式的脚本不同,图形方式表达的脚本中无法使用变量和函数等描述元件的作用域,因此jmeter主要依靠test plan中元件的相对位置、

父子关系以及元件本身的类型来决定test plan中各元件的执行顺序;原件在test plan中的位置不同,可能导致该元件的行为有很大差异。(新版jmeter都可以自主选择语言,对号入座即可)

 

1、元件的作用域

jmeter中共有8类可被执行的元件(test plan和thread group不属于元件),其中,sampler(取样器)是不与其他元件发生交互的作用的元件,Logic Controller

(逻辑控制器)只对其子节点的sampler有效,而其他元件需要与sampler等元件交互。

Config Elements(配置元件):影响其范围内的所有元件

Pre-porcessors(前置处理器):在其作用范围内的每一个sampler元件之前执行

Timer(定时器):对其作用范围内的每一个sampler有效

Post-porcessors(后置处理器):在其作用范围内的每一个sampler元件之后执行

Assirtions(断言):对其作用范围内的每一个sampler元件执行后的结果执行校验

Listener(监听器):收集其作用范围内的每一个sampler元件的信息并且呈现出来

在jmeter中,元件的作用域是靠test plan的树形结构中元件的父子关系来确定的,其原则如下:

1) sampler不与其他元件相互作用,因此不存在作用域问题

2) Logic Controller只对其子节点中的sampler和Logic Controller作用

3) 除sampler和Logic Controller外的其他元件,如果是某个sampler的子节点,则该元件仅对其父节点作用

4) 除sampler和Logic Controller外的其他元件,如果其父节点不是sampler,则其作用域是该元件父节点下的其他所有后带节点(包括子节点,子节点的子节点等)

 

2、元件的执行顺序

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

1) Config Elements

2) Pre-porcessors

3) Timer

4) Sampler

5) Post-porcessors(除非Sampler得到的返回结果为空)

6) Assirtions(除非Sampler得到的返回结果为空)

7) Listener(除非Sampler得到的返回结果为空)

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

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

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

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

 

以上是关于Jmeter 变量类型和作用域的主要内容,如果未能解决你的问题,请参考以下文章

06变量,常量,作用域

作用域,作用域链,垃圾收集,js解析

第4章变量作用域和内存问题

JavaScript中变量作用域和内存问题

--变量作用域和内存问题

JavaScript 变量作用域和内存问题