Jmeter中的函数及变量摘录

函数

内置函数在线程间共享,每个内置函数的调用使用一个独立的实例进行处理

__CSVRead

CSV file to get values from | *alias  指${__CSVRead(,)}中()内的第一个参数,指定具体csv文件的路径

CSV文件列号| next| *alias 指${__CSVRead(,)}中()内的第二个参数,调用csv文件中的第几列参数,第一列为0,第二列为1,依此类推

Jmeter执行的时候,如果线程Number of threads=1读取第一行的数字,Number of threads不等于1,顺序读取,如果线程组多于文件中的行数,则循环读取 (与Loop Count数没有关系)

生成函数操作参见下图:

Jmeter中的函数及变量摘录_第1张图片

jmx中的引用参见下图:

Jmeter中的函数及变量摘录_第2张图片

直接在需要变量的地方将函数赋值过去即可

__BeanShell(bean  shell)

使用beanshell脚本进行类java的数据处理后,通过vars在jmx中进行传递

定时器:BeanShell Timer

前置处理器:BeanShell PreProcessor  : 数据预处理(从jmeter中读取数据data1,data2,经过beanshell转换,在通过其他变量data3输出到jmeter中)

采样器:BeanShell Sampler ,相当于执行类似java类测试,response结果为bean shell中return的结果

后置处理器:BeanShell PostProcessor

断言:BeanShell断言

监听器:BeanShell Listener

以BeanShell Sampler为例进行描述

使用java的CSVReader读取csv文件,

int thread_number = (int)${__threadNum}-1;    通过内置的${__threadNum}获取线程组的线程数

通过vars.put(key,value) 将value通过key存入jmeter中,通过vars.get(key)拿到数据返回给jmeter

示例代码如下:

import com.helger.commons.csv.CSVReader;

CSVReader reader = new CSVReader(new FileReader("scripts/test.csv"));

List row;

String name;

int counter = 0;

int thread_number = (int)${__threadNum}-1;

log.info("1:"+thread_number);

while ((row = reader.readNext()) != null) { //要求设置的线程数要小于准备的测试数据

    if (thread_number == counter){

        c_id = row.get(1).toString();

        vars.put("c_id", c_id);

    }

    counter++;

}

注意:beanshell中读csv文件要使用相对路径(${JMETER_HOME}/bin目录下的路径),绝对路径会出现问题;vars.put中涉及的key不需要之前就通过User Defined Variable先进行定义,只是为了方便监听各类结果才预先定义的(添加Debug PostProcessor),图示如下:

Jmeter中的函数及变量摘录_第3张图片
Jmeter中的函数及变量摘录_第4张图片

Bean Shell常用内置变量

JMeter在它的BeanShell中内置了变量,用户可以通过这些变量与JMeter进行交互,其中主要的变量及其使用方法如下:

log用来记录日志文件,写入到jmeber.log文件,使用方法:log.info(“This is log info!”);

ctx(JmeterContext)通过它来访问context,具体参考:org.apache.jmeter.threads.JMeterContext。

vars - (JMeterVariables):操作jmeter变量,提供读取/写入访问变量的方法。这个变量实际引用了JMeter线程中的局部变量容器(本质上是Map),它是测试用例与BeanShell交互的桥梁,常用方法:

    a) vars.get(String key):从jmeter中获得变量值

    b) vars.put(String key,String value):数据存到jmeter变量中

              c) vars.putObject("OBJ1",new Object());

更多方法可参考:org.apache.jmeter.threads.JMeterVariables

props - (JMeterProperties - classJava.util.Properties):操作jmeter属性,该变量引用了JMeter的配置信息,可获取Jmeter属性,它的使用方法与vars类似,但是只能put进去String类型的值,而不能是一个对象。对应于java.util.Properties。

    a) props.get("START.HMS");  注:START.HMS为属性名,在文件jmeter.properties中定义 

    b) props.put("PROP1","1234"); 

prev - (SampleResult):获取前面的sample采样的结果,常用方法:

    a) getResponseDataAsString():获取响应信息

    b) getResponseCode() :获取响应code

更多方法可参考:org.apache.jmeter.samplers.SampleResult

sampler - (Sampler):gives access to the current sampler 访问当前采样

如果编写beanshell的过程依赖三方的jar包,需要先导入: 指定要用的jar包的位置:测试计划→浏览(Add direction or jar to classpath)→需要使用的jar包

__regexFunction

包含6个参数,具体截图如下

函数参数描述如下:

第1个参数:必须项,用于解析服务器响应数据的正则表达式,它会找到所有匹配项;

如果希望将表达式中的某部分应用在模板字符串中,一定记得为其加上圆括号。例如,

接的值存放到第一个匹配组合中(这里只有一个匹配组合)。又如,

name="(.*)"value="(.*)">,在这个例子中,链接的name作为第一个匹配组合,链接的value会

作为第二个匹配组合,这些组合可以用在测试人员的模板字符串中。

第2个参数:必须项,模板字符串,函数会动态填写字符串的部分内容。要在字符串中引用正则表达式捕获的匹配组合,请使用语法:[groupnumber][groupnumber]。例如11或者22,模板可以是任何字符串。

第3个参数:非必须项,默认值为1,用于指定JMeter使用第几次匹配;对于找到多个匹配项的详情,有4种选择选择可以设置:

n     整数,使用第几个匹配项,如“1”对应第一个匹配,“2”对应第二个匹配,以此类推;

n     RAND,随机选择一个匹配项;

n     ALL,使用所有匹配项,为每个匹配项创建一个模板字符串,并将它们连接在一起

n     0到1之间的浮点值,根据公式(总匹配数目*指定浮点值)计算使用第几个匹配项,计算值向最近的整数取整

第4个参数:非必须项,第3个参数中选择了“ALL”,那么这第4个参数会被插入到重复的模板值之间否

第5个参数:非必须项,如果没有找到匹配项返回的默认值否

第6个参数:非必须项,重用函数解析值的引用名,参见上面内容否

第7个参数:非必须项,变量名称。如果指定了这一参数,那么该变量的值就会作为函数的输入,而不再使用前面的采样结果作为搜索对象

Regular Expression Extractor

Jmeter中的函数及变量摘录_第5张图片

(1)Field to check

Body:响应的body,不包含头信息

Body (unescaped):响应的body  HTML中的转义字符被替换(不到万不得已尽量不用)

Body as a Document :通过Tika抽取的多类document对应的文本信息, 会影响性能

Request Headers: 不出现在非http的采样器中

Response Headers : 不出现在非http的采样器中

URL: 请求的URL

Response Code: 响应状态码

Response Message : 响应消息

(2)Reference Name

抽取的表达式对应的变量名. 包含匹配的多个组,访问具体的组:通过 [refname]_g#, 其中[refname] 为reference name栏设置的变量名,  #是组序号, 0是全部匹配, 1匹配第一个组

(3)Regular Expression

正则表达式,用于匹配响应数据. 至少包含一个 "()"来捕获字符串的一部分.不要使用 / /将表达式括起来,除非你整整想要匹配这些字符

(4)Template

用于引用具体匹配出来的组,'$1$' 对应group 1, '$2$' 对应group 2, $0$ 对饮匹配的整个表达式

(5)Match No. (默认0 for Random) ,包含如下取值:

0 随机,

正数n 第n个(

    refName 表示Template的取值  一定意义上与refName_gn等价

    refName_gn, where n=0,1,2 表示具体匹配到的第n组字符串, g0:整个串

    refName_g 表示匹配到的group组数 ,与正则表达式中()括号的个数相关)

负数:用于循环遍历   结合ForEach Controller使用  (结合ForEach Controller使用时的必填字段)

针对ForEach Controller,如果使用用户定义的变量,需要变量前缀一致,且是在ForEach Controller下一层添加User Defined Variables ;同名出现的变量名,取第一个;后面的数字可以乱序但是不能间断;注意,start index 是不包含的,所以对于正则表达式提取出来的,要从0开始

(6)关于正则表达式的构造

参看官方文档,其中 ()截取子串  .匹配任意次任意字符    + 大于0次匹配   ?第一次匹配成功就停止继续匹配

(7)Default Value

没有匹配结果时的默认值;主要用于调试

jmx样例中的:http请求~Regular Expression Extractor   依赖上一个请求后的Regular Expression Extractor -access_token即可

__eval

支持在一个变量中插入变量或者函数

_ StringFromFile

从文件中读取字符串,赋值给jmeter变量 

第一个参数: 指定文件路径,可以是绝对路径,也可使用相对路径(基于$JMETER_HOME/bin目录)

第二个参数: 指定传递给jmeter进行保存的变量名

第3个参数、4个参数:分别指定起始行、结束行;如果不指定,默认第三个参数是文件第一行,默认第四个参数是文件最后一行

函数每调用一次,读取一行(一行中无论什么字符都会读出来)

示例:

读取jmeter_strfromfile.csv文件中的一行数据存于strfile,jmx可以通过${strfile}使用

${__StringFromFile(D:\soft\apache-jmeter-4.0\bin\scripts\jmeter_strfromfile.csv,strfile,,)}

__Random

生成随机数

第一个参数:随机数下限

第二个参数:随机数上限

第三个参数:在jmeter中保存该随机数的变量名

两个${__Random(,,)}中间加上字符.实现浮点数的随机生成

示例:

insert into  jmeter_tab(name,fenshu) values ('${__StringFromFile(D:\soft\apache-jmeter-4.0\bin\scripts\jmeter_strfromfile.csv,strfile,,)}',${__Random(50,100,grade)}.${__Random(0,999,grade)});

备注: 随机数只是数字,通过拼接双引号,变成字符串, 通过拼接‘’ 可以作为varchar插入mysql中

_counter

计数器,

第一个参数:True:局部计数器 FALSE: 全局计数器

第二个参数: 计数器在jmeter中存储的变量名

示例:

${__counter(TRUE,inner_cnt)}

计数器Counter

属于config element:

(1)启动(start):给定计数器的起始值,第一次迭代时,会把该值赋给计数器

(2)递增(Increment):每次迭代后,给计数器增加的值

(3)最大值(Maximum) :计数器的最大值,如果超过最大值,重新设置为初始值(Start),默认的最大值为Long.MAX_VALUE,2^63-1

(4)数字格式(Number format) :可选格式,比如000,格式化为001,002。默认格式为Long.toString(),可当作数字使用

(5)引用名称(Reference Name) :在jmeter中存储或被引用的名称

(6)每用户独立的跟踪计数器(Track Counter Independently for each User):如果不勾选,即全局的,比如用户#1 获取值为1,用户#2获取值为2;勾选,每个用户有自己的值,比如用户#1 获取值为1,用户#2获取值还是为1;每次线程组迭代重置计数器(Reset counter on each Thread Group Iteration) :可选,仅勾选与每用户独立的跟踪计数器时可用,如果勾选了,每次线程组迭代,都会重置计数器的值。当线程组是在一个循环控制器内时比较有用

_intSum

计算多个整数的和,可以是计算正整数和负整数的和,它有N个参数,最少有3个参数,最多不限。最后一个参数是函数名称,前面的其它参数是要求和的整数


变量

(1) 大小写敏感

(2)首位空格自动剔除

(3)作用于线程

(4)不能在变量里面嵌套变量,如${Var${N}}, 不过可以通过${__V(Var${N})}替代实现,也可以通过${__BeanShell(vars.get("Var${N}")}实现

属性

作用于整个测试计划

借助__P or __property来引用

部分不带参数的内部变量,如${__machineIP},可以直接在jmx请求名字中拼接来进行测试

你可能感兴趣的:(Jmeter中的函数及变量摘录)