添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
如果逗号未转义 - 例如 ${__javaScript(Math.max(2,5))} - 您将收到如下错误: ERROR - jmeter.functions.JavaScript: Error processing Javascript: [Math.max(2] org.mozilla.javascript.EvaluatorException: missing ) after argument list (<cmd>#1) 这是因为字符串“ Math.max(2,5) ”被视为 __javascript 函数的两个参数:
Math.max(2 5) 其他错误消息是可能的。

变量引用如下: ${VARIABLE} 如果引用了未定义的函数或变量,JMeter 不会报告/记录错误 - 引用原样返回。例如,如果 UNDEF 未定义为变量,则 ${UNDEF} 的 值为 $ {UNDEF} 。 变量、函数(和属性)都区分大小写。 JMeter 在使用前会从变量名中删除空格,例如 ${__Random(1,63, LOTTERY )} 将使用变量“ LOTTERY ”而不是“ LOTTERY ”。 请注意,变量当前不能嵌套;即 ${Var${N}} 不起作用。__V (变量)函数可用于执行此操作: $ {__V(Var${N})} 。您也可以使用 ${__BeanShell(vars.get("Var${N}")}

这种类型的替换在没有功能的情况下是可能的,但不太方便且不太直观。它要求用户创建默认配置元素来填充采样器的空白值。变量允许仅替换任何给定值的一部分,而不仅仅是填充空白值。

使用内置函数,用户可以在运行时根据以前的响应数据、函数所在的线程、时间和许多其他来源计算新值。这些值是在整个测试过程中为每个请求生成的。

函数在线程之间共享。测试计划中每次出现的函数调用都由单独的函数实例处理。
测试计划中使用的功能有一些限制。JMeter线程变量在处理函数的时候还没有完全设置好,所以作为参数传递的变量名不会设置,变量引用也不起作用,所以 split() regex() 以及变量求值函数都不会不工作。threadNum () 函数不起作用(并且在测试计划级别没有意义)。以下功能在测试计划上应该可以正常工作:
  • jexl2/jexl3
  • 如果字符串包含反斜杠(' \ ')并且还包含函数或变量引用,则如果反斜杠出现在' $ '或' , '或' \ '之前,则将删除反斜杠。此行为对于允许包含逗号或字符串 ${ 的嵌套函数是必要的。如果字符串不包含函数或变量引用,则不会删除 ' $ ' 或 ' ' 或 ' \ '之前的反斜杠。 可以 使用 __logn() 函数报告变量或函数的值。定义变量后, __logn() 函数引用可以在测试计划中的任何地方使用。或者,Java 请求采样器可用于创建包含变量引用的示例;输出将显示在适当的侦听器中。请注意,有一个 调试采样器 可用于在树视图侦听器中显示变量的值等。
    第一个论点
    第一个参数是应用于响应数据的正则表达式。它将抓取所有匹配项。您希望在模板字符串中使用此表达式的任何部分,请务必用括号括起来。示例: <a href="(.*)"> 。这将获取链接的值并将其存储为第一组(只有 1 组)。另一个例子: <input type="hidden" name="(.*)" value="(.*)"> 。这将获取名称作为第一组,并将值作为第二组。这些值可以在您的模板字符串中使用
    第二个论点
    这是将在运行时替换函数的模板字符串。要引用正则表达式中捕获的组,请使用语法: $[group_number]$ 。即: $1$ $2$ 。您的模板可以是任何字符串。
    第三个论点
    第三个参数告诉 JMeter 使用哪个匹配。您的正则表达式可能会找到许多匹配项。你有四个选择:
  • 一个整数 - 告诉 JMeter 使用该匹配。' 1 ' 表示找到的第一个匹配项,' 2 ' 表示第二个匹配项,依此类推
  • RAND - 告诉 JMeter 随机选择一个匹配项。 ALL - 告诉 JMeter 使用所有匹配项,并为每个匹配项创建一个模板字符串,然后将它们全部附加在一起。这个选项很少使用。
  • 一个介于 0 和 1 之间的浮点数 - 告诉 JMeter 使用以下公式找到第 X 匹配项:(number_of_matches_found * float_number) 四舍五入到最接近的整数。
  • 不,默认=1
    第四个论点
    如果为上述参数值选择了“ ALL ”,则该参数将插入到模板值的每个附加副本之间。
    如果未找到匹配项,则返回默认值
    第六个论点
    用于重用此函数解析的值的引用名称。
    存储的值是 ${refName} (替换模板字符串)和 ${refName_g#} ,其中“ # ”是正则表达式中的组号(“ 0 ”可用于引用整个匹配项)。
    第七个论点
    输入变量名。如果指定,则将变量的值用作输入,而不是使用先前的样本结果。

    计数器每次调用时都会生成一个新数字,从 1 开始,每次递增 +1。计数器可以配置为将每个模拟用户的值分开,或者为所有用户使用相同的计数器。如果每个用户的值分别递增,这就像计算测试计划的迭代次数。全局计数器就像计算该请求运行了多少次。

    计数器使用一个整数变量来保存计数,因此它的最大值为 2,147,483,647。

    计数器函数实例是完全独立的。全局计数器 - “ FALSE ” - 由每个计数器实例单独维护。

    线程号函数只是返回当前正在执行的线程号。这些数字仅相对于它们的 ThreadGroup 是局部唯一的,这意味着从这个函数的角度来看,一个线程组中的线程 #1 与另一个线程组中的线程 #1 无法区分。

    该函数返回一个介于 1 和最大运行线程数之间的数字。请注意,如果您将 JSR223 代码与 JMeterContext 对象( ctx 变量)一起使用,则以下代码将返回一个介于零和(最大运行线程数减一)之间的数字
    ctx.getThreadNum()

    ${__intSum(2,5,MYVAR)}
    将返回 7 (2+5) 并将结果存储在 MYVAR 变量中。所以 ${MYVAR} 将等于 7。
    ${__intSum(2,5,7)}
    将返回 14 (2+5+7) 并将结果存储在 MYVAR 变量中。
    ${__intSum(1,2,5,${MYVAR})}
    如果 MYVAR 值等于 8,将返回 16, 1+2+5+${MYVAR})

    ${__longSum(2,5,MYVAR)}
    将返回 7 (2+5) 并将结果存储在 MYVAR 变量中。所以 ${MYVAR} 将等于 7。
    ${__longSum(2,5,7)}
    将返回 14 (2+5+7) 并将结果存储在 MYVAR 变量中。
    ${__longSum(1,2,5,${MYVAR})}
    如果 MYVAR 值等于 8,将返回 16, 1+2+5+${MYVAR})
    (尽管 #. 000. 在小数点也是“ . ”的语言环境中按预期工作) 在其他语言环境中(例如 fr ),小数点是“ , ”——这意味着“ #. ”变成了“ nnn, ”。有关完整详细信息,
    请参阅 DecimalFormat的文档。
    如果路径名不包含任何特殊格式字符,则将当前序号附加到名称后,否则将根据格式说明插入序号。
    如果省略了开始序号,而指定了结束序号,则序号被解释为循环计数,并且文件将最多使用“ end ”次。在这种情况下,文件名未格式化。 ${__StringFromFile(PIN#'.'DAT,,1,2)} - 读取 PIN1.DAT , PIN2.DAT ${__StringFromFile(PIN.DAT,,,2)} - 读取 PIN.DAT 两次
    注意 " . " 在上面的 PIN.DAT 中应该 被引用。在这种情况下,起始编号被省略,因此文件名完全按原样使用。
    请记住为文本字符串和 JMeter 变量添加任何必要的引号。另外,如果表达式有逗号,请确保将它们转义。例如在: ${__javaScript('${sp}'.slice(7\,99999))} 后的逗号被转义。

    ${__javaScript(new Date())}
    将于 2016 年 1 月 9 日星期六 16:22:15 GMT+0100 (CET)返回
    ${__javaScript(new Date(),MYDATE)}
    将返回 Sat Jan 09 2016 16:22:15 GMT+0100 (CET) 并将其存储在变量 MYDATE下
    ${__javaScript(Math.floor(Math.random()*(${maxRandom}+1)),MYRESULT)}
    将使用 maxRandom 变量,返回一个介于 0 和 maxRandom 之间的随机值并将其存储在 MYRESULT
    ${__javaScript(${minRandom}+Math.floor(Math.random()*(${maxRandom}-${minRandom}+1)),MYRESULT)}
    将使用 maxRandom minRandom 变量,返回 maxRandom minRandom 之间的随机值并将其存储在变量 MYRESULT下
    ${__javaScript("${VAR}"=="abcd",MYRESULT)}
    VAR 变量的值与 abcd 进行比较,返回 true false 并将结果存储在 MYRESULT
    用于格式的语言环境
    语言环境的字符串格式。语言代码必须是小写的。国家代码必须是大写的。分隔符必须是下划线,例如 en_EN 。请参阅 http://www.oracle.com/technetwork/java/javase/javase7locales-334809.html 。如果省略,默认情况下该函数使用 Apache JMeter 语言环境之一。
    要设置的变量的名称。

    ${__RandomDate(,,2050-07-08,,)}
    将返回从现在 2050-07-08 之间的随机日期。例如 2039-06-21
    ${__RandomDate(dd MM yyyy,,08 07 2050,,)}
    将返回具有自定义格式的随机日期,例如 04 03 2034

    ${__RandomString(5)}
    将返回一个 5 个字符的随机字符串,该字符串是否可读
    ${__RandomString(10,abcdefg)}
    将返回从 abcdefg 集合中挑选的 10 个字符的随机字符串,例如 cdbgdbeebd adbfeggfad ,...
    ${__RandomString(6,a12zeczclk, MYVAR)}
    将返回从 a12zeczclk 集合中挑选的 6 个字符的随机字符串,并将结果存储在 MYVAR 中, MYVAR 将包含类似 2z22ak z11kce 的字符串,...

    ${__RandomFromMultipleVars(val)}
    将根据变量 val 的内容返回一个随机字符串,同时考虑它们是否为多值
    ${__RandomFromMultipleVars(val1|val2)}
    将根据变量 val1 和 val2 的内容返回一个随机字符串,同时考虑它们是否为多值
    ${__RandomFromMultipleVars(val1|val2, MYVAR)}
    将根据变量 val1 和 val2 的内容返回一个随机字符串,同时考虑它们是否为多值,并将结果存储在 MYVAR

    对相同文件名的所有后续引用都使用相同的内部数组。注意文件名大小写对函数很重要,即使操作系统不关心,所以 CSVRead(abc.txt,0) CSVRead(aBc.txt,0) 将引用不同的内部数组。

    *ALIAS 功能允许多次打开同一个文件,也允许使用更短的文件名 每个线程都有自己的内部指针,指向文件数组中的当前行。当一个线程第一次引用该文件时,它将被分配到数组中的下一个空闲行,因此每个线程将访问与所有其他线程不同的行。[除非线程数多于数组中的行数。]

    默认情况下,该函数在每个逗号处拆分行。如果要输入包含逗号的列,则需要通过设置属性将分隔符更改为不出现在任何列数据中的字符: csvread.delimiter

    这是一个简化的属性函数,旨在与命令行上定义的属性一起使用。与 __property 函数不同,没有将值保存在变量中的选项,如果没有提供默认值,则假定为 1。选择 1 的值是因为它对循环等常见测试变量有效,线程数,斜升等。 定义属性值: jmeter -Jgroup1.threads=7 -Jhostname1=www.realhost.edu ${__P(group1.threads)} - 返回 group1.threads的值 ${__P(group1.loops)} - 返回 group1.loops ${__P(hostname,www.dummy.org) } -如果未定义 ,则返回属性 hostname www.dummy.org
    在上面的示例中,第一个函数调用将返回 7 ,第二个函数调用将返回 1 ,最后一个将返回 www.dummy.org (除非这些属性已定义别处!) split 函数根据分隔符将传递给它的字符串拆分,并返回原始字符串。如果任何分隔符相邻,则返回“ ”作为值。拆分字符串在变量 ${VAR_1} ${VAR_2} 等中返回。变量的计数在 ${VAR_n} 中返回。尾随分隔符被视为缺失变量,并返回“ ”。此外,为了让它更好地与 ForEach 控制器一起工作, __split 现在删除第一个未使用的变量,以防它是由先前的拆分设置的。 在测试计划中 定义 VAR =" a||c| "。

    ${__split(${VAR},VAR,|)}
    这将返回 VAR 的内容,即“ a||c| ”并设置以下变量: VAR_n = 4 VAR_1 = a VAR_2 = ? VAR_3 = c VAR_4 = ? VAR_5 = XPath 函数读取一个 XML 文件并匹配 XPath。每次调用该函数时,都会返回下一个匹配项。在文件末尾,它将环绕到开头。如果没有节点匹配,则函数将返回空字符串,并将警告消息写入 JMeter 日志文件。
    请注意,整个 NodeList 都保存在内存中。

    setProperty 函数设置 JMeter 属性的值。函数的默认返回值是空字符串,因此函数调用可以在函数有效的任何地方使用。

    可以通过将可选的第三 个参数设置为“ true ”来返回原始值。

    属性对 JMeter 来说是全局的,因此可以用来在线程和线程组之间进行通信

    ${__time(dd/MM/yyyy,)}
    如果在 2018 年 1 月 21 日运行, 将返回 21/01/2018

    ${__time(YMD,)}
    如果在 2018 年 1 月 21 日运行, 将返回 20180121

    ${__time()}
    将以毫秒为单位返回时间 1516540541624 now=Systemclass.currentTimeMillis(); 请注意,网站上的 Jexl 文档错误地建议“ div ”进行整数除法。实际上“ div ”和“ / ”都执行正常的除法。可以得到如下相同的效果: i= 5 / 2; i.intValue(); // or use i.longValue() now=Systemclass.currentTimeMillis(); 请注意,网站上的 Jexl 文档错误地建议“ div ”进行整数除法。实际上“ div ”和“ / ”都执行正常的除法。可以得到如下相同的效果: i= 5 / 2; i.intValue(); // or use i.longValue() 这允许人们从文件中读取字符串,并处理其中的任何变量引用。例如,如果变量“ query ”包含“ select ${column} from ${table} ”并且“ column ”和“ table ”包含“ name ”和“ customers ”,则 ${__evalVar(query)} 将评估为“ 从客户中选择名称 ”。 该功能在没有关联采样器的测试元素中不起作用。例如测试计划。配置元素也没有关联的采样器。然而,一些配置元素被采样器直接引用,例如 HTTP Header Manager 和 Http Cookie Manager,在这种情况下,函数在 Http Sampler 的上下文中解析。预处理器、后处理器和断言总是有一个关联的采样器。

    例子:

    ${__samplerName()}
    用于格式的语言环境
    语言环境的字符串格式。语言代码必须是小写的。国家代码必须是大写的。分隔符必须是下划线。例如:en_EN 请参阅 http://www.oracle.com/technetwork/java/javase/javase7locales-334809.html 如果省略,默认情况下该函数使用 ApacheJMeter 语言环境之一。
    要设置的变量的名称。

    ${__timeShift(dd/MM/yyyy,21/01/2018,P2D,,)}
    返回 23/01/2018
    ${__timeShift(dd MMMM yyyy,21 février 2018,P2D,fr_FR,)}
    2018 年 2 月 23 日 回归 使用纪元时间值:1526574881000,

    ${__dateTimeConvert(1526574881000,,dd/MM/yyyy HH:mm,)}
    返回UTC 时间 17/05/2018 16:34 (-Duser.timezone=GMT)

    ${__changeCase(Avaro omnia desunt\, inopi pauca\, sapienti nihil,UPPER,)}
    将返回 AVARO OMNIA DESUNT、INOPI PAUCA、SAPIENTI NIHIL
    ${__changeCase(LABOR OMNIA VINCIT IMPROBUS,LOWER,)}
    将返回 劳动力omnia vincit improbus
    ${__changeCase(omnibus viis romam pervenitur,CAPITALIZE,)}
    将返回 Omnibus viis romam pervenitur
    Apache, Apache JMeter, JMeter, the Apache feather, and the Apache JMeter logo are trademarks of the Apache Software Foundation.