jmeter 函数
***************
函数
作用:实现表单内容参数化、数据运算、字符转换等
函数助手(jmeter提供的函数编写工具)
函数说明:
# beanshell:调用beanshell脚本计算参数,函数形式:${__BeanShell(value)},
value可为beanshell语句、beanshell脚本
${__BeanShell("hello "+"gtlx")} ==> 字符串拼接:hello gtlx
# char:将数字转换为unicode值,函数形式:${__char(num,...)}
${__char(65)}==> 将65转换为A
${__char(65,66)} ==> 将65,66转换为AB
# counter:计数器,函数形式:${__counter(true|false,i)}
true:每个线程独立计数、false:所有线程加总计数;i:计数变量名,可随意设置
${__counter(true,i)} ==> 每个线程独立计数,计数步长为1
${__counter(false,i)} ==> 所有线程加总计数
# CSVRead:从文件中读取指定列的值,函数形式:${__CSVRead(fileName|*别名,列名|next|*alias)}
函数包含两个参数:第一个参数为文件名或者别名
列名从0开始编号、next读取下一行数据、*alias文件别名
${__CSVRead(file,0)}:读取文件第一行的0列数据
${__CSVRead(file,0)}${__CSVRead(file,next)}:迭代读取每一行的第0列数据
${__CSVRead(file,0)}|${__CSVRead(file,1)}${__CSVRead(file,next)}:迭代读取每一行的第0、1列数据
# escapeHtml:字符转换为html格式字符,函数形式:${__escapeHtml(str)}
${__escapeHtml("瓜田李下")} ==> "瓜田李下"
# escapeOroRegexpChars:将正则表达式转换为java正则引擎能识别的表达式,函数形式:${__escapeOroRegexChars(value,name)}
函数包含两个参数:value正则表达式,name存储转换后的表达式(可选)
${__escapeOroRegexpChars(a*,name)} ==> 将a*转换为a\*
# eval:返回引用的表达式的值,函数形式:${__eval(value)},value为引用的表达式
${__eval(${__BeanShell("hello "+"gtlx")})} ==> 返回 hello gtlx
# evalVar:引用变量的值,函数形式:${__evalVar(var)},var为之前自定义的变量
自定义变量name = "瓜田李下", ${__evalVar(name)} ==> 返回 瓜田李下
# FileToString:文件转换为字符串,函数形式:${__FileToString(fileName,encoding,name)}
参数说明:fileName文件全路径名、encoding文件编码、name存储转换后的字符串
${__FileToString(file,utf-8,value)} ==> 将file转换为字符串,用value存储字符串,可供后续sampler使用
# intSum:整数求和,函数形式:${__intSum(num,...,value)}
参数说明:num一到多个,value存储计算后的值
${__intSum(1,value)} ==> 返回1
${__intSum(1,2value)} ==> 返回3
${__intSum(1,2,3,value)} ==> 返回6
# longSum:长整数求和,同intSum
# javaScript:返回javascript脚本执行的结果,函数形式:${__javaScript(expr,name)}
参数说明:expr为javaScript脚本,name存储计算后的值
${__javaScript(1+1,value)} ==> 返回2
# jexl2、jexl3:计算jexl表达式,函数形式:${__jexl2(expr,name)}
参数说明:expr为jexl表达式,name存储计算后的结果
${__jexl2(vars.get("START.YMD",start))} ==> 返回 20220111
${__jexl3(2*3,start))} ==> 返回 6
# log:返回输入的字符串信息,函数形式:${__log(str, level, throwable text, comment)}
参数说明:str为输出的字符串信息
level:日志级别,可选值:OUT(打印到控制台及标准输出窗口,类似System.out)、
ERR(打印到控制台及包标准输出窗口,类似System.err)、
DEBUG、INFO(默认)、WARN、ERROR
text:抛出的异常信息,可选
comment:附加注释,可选
# logn:与log类似,无返回结果
# machineIP:返回主机ip,函数形式:${__machineIP(name)},name可选,用来存储返回的ip
# machineName:返回主机名,函数形式:${__machineName(name)},name可选,用来存储返回的主机名
# samplerName:返回当前取样名称,函数形式:${__samplerName(name)},name可选,用来存储返回值
# TestPlanName:返回测试计划名称,函数形式:${__TestPlanName(name)},name可选,用来存储返回值
# threadNum:返回线程号
# time:返回当前时间,函数形式:${__time(format,name)},不指定格式默认返回毫秒数,name存储返回值
# P:获取命令行中定义的属性,函数形式:${__P(pro,defaultValue)},pro为属性名,defaultValue为属性默认值
# property:获取jmeter.properties中定义的属性,函数形式:${__property(pro,name)}
pro为jmeter.properties中的属性name、
name存储读取的值,可供后续sampler使用
# setProperty:动态设置jmeter属性,函数形式:${__setProperty(name,value,true|false)}
name属性名、value属性值、
true|false是否返回原是值,默认false
# split:拆分字符串,函数形式:${__split(str,name,delimeter)}
str待拆分的字符串、
name存储拆分后的字符串数组,如name=str,str_1可访问第一个数组元素
delimeter分隔符,默认为逗号(,)
# StringFromFile:从文件中读取数值,函数形式:${__StringFromFile(file,name,start,final)}
file文件全路径名、name存储读取结果
start、final文件名起始、终止序列号(D:\file1、D:\file2、D:\file3时指定文件)
# random:生成随机数,函数形式:random(min,max,name),min最小值、max最大值、name存储返回的值
# randomDate:生成随机日期,函数形式:randomDate(format,start,end),
format日期格式,默认为yyyy-MM-dd,可选
start开始时间,默认为今天,可选、
end截止日期
# randomString:生成随机字符串,函数形式:randomString(length,chars,name)
length字符串长度
chars字符串可选值,如"haa这个",可包含中文
name存储返回的值
# unescape:反转escape字符,函数形式:${__unescape(str)}
# unescapeHtml:反转html格式字符,函数形式:${unescapeHtml(str)}
# urlencode:url编码,函数形式:${__urlencode(str)}
# urldecode:url解码,函数形式:${__urldecode(str)}
# UUID:uuid算法生成的唯一字符串,函数形式:${__UUID}
# V:执行变量表达式并返回结果,函数形式:${__V(expr,defaultValue)}
定义变量:a1=1,b1=1,${a1}${b1}可调用成功、${a${b1}}不能执行成功
${__V(a${b1})}可执行成功
# regexFunction:正则表达式匹配上一个取样器的取样结果,并返回匹配结果
# XPath:解析xml,返回匹配的值,函数形式:${__XPath(file,expr)},file为xml文件、expr为匹配表达式
表达式语法:
/:根节点
//:任意位置的某节点
@:匹配属性
*:匹配任何节点元素
@*:匹配任何属性
text():获取文本内容
示例:
company:company所有的子节点
/company:选取根节点company
company/name:company下的所有name节点(直接子节点)
company//name:company下的所有name节点(可不为直接子节点)
//@type:选取所有名为type的属性
***************
示例:CSVRead
person4.csv 文件
线程组:1个线程循环4次执行
线程组 ==> java请求
线程组 ==> 查看结果树:点击运行,查看运行结果
一个线程执行四次读取的都是相同的数据:第一行第一列数据
线程组:4个线程,每个线程执行1次
线程组 ==> java请求 2
线程组 ==> 查看结果树:点击运行,查看运行结果
四个线程,每个线程分别读取一行数据
线程组:1个线程循环执行4次
线程组 ==> java请求
线程组 ==> 查看结果树:点击运行,查看运行结果
添加${__CSVRead(*file,next())}后,单个线程也可循环换行读取数据
线程组:4个线程,每个线程执行一次,测试读取多列数据
线程组 ==> java请求:${__CVSRead(*file,next())}放在最后,表示之后读取下一行
线程组 ==> 查看结果树:点击运行,查看运行结果
线程换行同时读取第一列、第二列的数据