函数有两种:用户定义的静态值(或变量)和内置函数。
用户定义的静态值允许用户定义在编译和提交要运行的测试树时用其静态值替换的变量。此替换在测试运行开始时发生一次。例如,这可以用于替换所有HTTP请求的DOMAIN字段-只需更改测试以针对具有相同测试的其他服务器即可,这很简单。
函数可以写入任何测试组件的任何字段中(除了TestPlan)。一些字段不允许随机字符串,因为它们需要数字,因此将不接受函数。但是,大多数字段将允许功能。
函数的引用方式相同,但按照惯例,函数名称以“ __ ” 开头,以避免与用户值名称*冲突。一些函数使用参数来配置它们,这些参数用括号括起来,以逗号分隔。如果函数不带参数,则可以省略括号
括号括住发送给函数的参数,例如$ {__ time(YMD)} 实际参数因函数而异。不需要参数的函数可以省略括号,例如$ {__ threadNum}。
如果函数参数包含逗号,请确保使用“ \ ”将其转义,否则JMeter会将其视为参数定界符。例如:
$ {__ time(EEE \,d MMM yyyy)}
或者,仅使用/代替路径分隔符-例如C:/ test / $ {test} -Windows JVM将根据需要转
一、__BeanShell函数;它有两个参数:第一个参数是要执行的语句,可以是beanshell语句或者是文件地址,是必选参数;第二个是保存结果的变量名称,非必选参数;
如:${__BeanShell(3*4,)};返回12;
${__BeanShell(source("hehe.bsh"),)} ;会执行外部脚本hehe.bsh;并返回结果;
二、__计数器(__counter);
计数器每次被调用都会生成一个新的数字,从1开始,每次递增+1。可以将计数器配置为使每个模拟用户的值保持独立(true),或者对所有用户使用相同的计数器(false)。如果每个用户的值分别增加,那就像在测试计划中计算迭代次数一样。全局计数器就像计算该请求运行了多少次。
如下图:false,counter全局计数器;线程数2,循环次数3,相当于6个用户,6个用户的请求数的累加;counter相当于记录测试发送了多少次请求;
true,每个用户单独计数,线程数2,循环次数3,2用户分别循环3次;所以计数器值为3;第一个用户跑完第1次循换,接着第2次训话;第一个用户跑后,接着第2个用户跑.... ;每个用户独立计数,相当于记录测试计划循环了多少次(运行了多少遍);
三、__CSVRead;填写文件,属性:文件名,列号(0=第一列,1=第二列,以此类推)
四、__regexFunction;
该函数使用用户提供的正则表达式来解析前面的服务器响应(或者是某个变量值)。
其实这个函数的作用跟正则表达式提取器的作用是类似的。
五、__随机(__Random);
随机函数用于返回指定最小值和最大值之间的随机数。
$ {__ Random(0,10)} #将返回0到10之间的随机数
$ {__ Random(0,10,MYVAR)} #将返回0到10之间的随机数,并将其存储在MYVAR中。$ {MYVAR}将包含随机数
如设置手机号码;${__Random(13800000000,14000000000,phone)}
六、__随机字符串(__RandomString);属性有长度、使用字符、变量名;
只填写长度(5),其它不填写,生成的结果不可读;如下图;
长度6,使用字符abcde12345,将返回从“abcde12345”选取的5个字符的随机字符串;
七、__threadNum;
函数__threadNum只是简单地返回当前线程的编号。某个线程组的1和另一个线程组的线程1是没有区别的;该函数没有参数;平时基本不用该函数;
八、__intSum:整数求和函数;函数__intSum可以被用来计算两个或者更多整数值的合。至少需要两个整数,如果指定变量名则名称中必须包含一个非数字字母,否则它会被当成另一个整数值,而被函数用于计算。
九、__longSum;长整数求和函数;
十、__StringFromFile:读取文件中的字符串函数;用来实现参数化;若读取or打开此文件时发生错误,则会返回"**ERR**"字符串;
十一、__machineName; 函数__machineName返回本机的主机名;
十二、__time函数;
函数__time可以通过多种格式返回当前时间
如果省略了格式字符串,那么函数会以毫秒的形式返回当前时间。
其他情况下,当前时间会被转成简单日期格式。包含如下形式: YMD = yyyyMMdd; HMS = HHmmss; YMDHMS = yyyyMMdd-HHmmss; USER1 = JMeter属性time.USER1; USER2 = JMeter属性time.USER2; 用户可以通过修改JMeter属性来改变默认格式,例如:time.YMD=yyMMdd。
${__time(yyyy-MM-dd HH:mm:ss:SSS,)}:格式化生成时间格式2020-03-16 11:48:35:984;
${__time(,)}:默认该公式精确到毫秒级别,13位数1584330221123;
${__time(/1000,)}:该公式精确到秒级别,10位数1584330221;

__timeshift(格式、日期、移位、语言环境、变量);可对日期进行移位加减操作;
格式 - 将显示创建日期的格式。如果该值未被传递,则以毫秒为单位创建日期。
日期 - 这是日期值。用于如果要通过添加或减去特定天数,小时或分钟来创建特定日期的情况。如果参数值未通过,则使用当前日期。
移位 - 表示要从日期参数的值中添加或减去多少天,几小时或几分钟。如果该值未被传递,则不会将任何减去或添加到日期参数的值中。
“P1DT2H4M5S” 解析为“添加1天2小时4分钟5秒”
区域设置 - 设置创建日期的显示语言。不是必填项
变量 - 创建日期的值将被分配给的变量的名称。不是必填项
“-P-6H3M”不做任何处理;
“PT-6H3M”解析为“-6小时+3分钟”;“-PT-6H3M”解析为“+6小时-3分钟”
__RandomDate:时间段内随机取值;
默认时间格式:yyyy-MM-dd;
Start date 默认为当天时间;
十三、__property;
如${__property(user.dir,,)}:返回属性user.dir的值,如果没有值,则返回空;

如 ${__property(abd,hehe,xixi)}:返回属性abd的值,如果属性abd没有值,返回"xixi",并且保存在变量hehe中;
测试计划中直接引用hehe,会找不到其值;需要先引用变量${__property(abd,hehe,xixi)};
十四、__P;
函数__P是一个简化版的属性函数,目的是使用命令行中定义的属性;
不同于函数__property,此函数不可以保存属性值得变量;
十五、__log;
函数__log会记录一条日志,并返回函数的输入字符串;
OUT和ERRO的日志级别,将会分别导致输出记录到System.out和System.err中。在这种情况下,输出总会被打印;
${__log(hehe,,xixi,)},写入日志文件,形如:"thread Name xixi=hehe";
${__log(${XIXI},OUT,,)}:写到控制台窗口;
十六、__split;字符串分割函数;
十七、__XPath;
函数__XPath读取XML文件,并在文中寻找与指定XPath相匹配的地方;每调用函数一次,就会返回下一个匹配项。到达文件末尾后,会从头开始。如果没有匹配的节点,那么函数会返回空字符串,另外,还会向JMeter日志文件写一条警告信息。
十八、__setProperty;
函数__setProperty用于设置JMeter属性的值,属性对于JMeter是全局的,因此可以被用来在线程和线程组之间的通信;
十九、__V;函数__V可以用于执行变量名表达式;如下图变量N=3;${A${N}}无法执行;${__V(A${N})}执行结果为A3;
二十、__FileToString;可以被用来读取整个文件;