zoukankan      html  css  js  c++  java
  • Jmeter(二十四)

    -------------------------------------------------------------------

    转载自:北京-宏哥

    https://www.cnblogs.com/du-hong/p/13533283.html

    --------------------------------------------------------------------

    1.简介

      在性能测试中为了真实模拟用户请求,往往我们需要让提交的表单内容每次都发生变化,这个过程叫做参数化。JMeter配置元件与前置处理器都能帮助我们进行参数化,但是都有局限性,为了帮助我们能够更好地进行参数化,JMeter提供了一组函数来帮助我们参数化生成需要的数据,这些函数可以函数助手面板来进行编辑。当然函数助手的功能不仅仅是做参数化,还能帮助我们运算、字符编码格式转换、获取运行时参数等功能。下面宏哥介绍和分享一下函数助手中的函数。

    JMeter提供了很多函数,如果能够熟练使用,可以为脚本带来很多方便。可以很方便的实现一些小功能,几乎可以用于测试计划中的任何元件。

    JMeter函数是一种特殊值,可用于除测试计划外的任何组件。

    函数调用的格式如下所示:

    ${__functionName(var1,var2,var3)}

    其中,“__”是两个英文半角的下划线,functionName为函数名,括号内是函数的参数,无参数时可以不用括号,如${__UUID},其中参数视不同函数而定。

    Tips:

    如果参数包含逗号,那么一定要使用“”来转义,否则JMeter会把它当作一个参数分隔符

    实际使用时,可通过函数助手对话框选择函数,设置参数后,点击生成按钮生成函数字符串。 

    2.JMeter 中的常用函数主要分为如下几类

    上一篇中,我们介绍了前四种函数类型,这一篇我们将最后两种函数类型介绍和分享一下。

    函数类型函数名称函数作用启用版本
    脚本函数  __BeanShell 执行 beanshell 脚本 1.X
    __javaScript 执行 js 脚本 1.9
    字符串操作函数   __split 根据分隔符拆分字符串为多个变量 2.0.2
    __changeCase 转换大小写 4.0
    __regexFunction 使用正则表达式解析之前的响应结果 1.X
    属性信息函数    __isPropDefined 判断属性是否存在 4.0
    __property 对多个整数求和 1.8.1
    __P 简化的属性函数,用于与命令行上定义的属性一起使用 2.0
    __setProperty 简化的属性函数,用于与命令行上定义的属性一起使用 2.0
    数据输入函数    __StringFromFile 从文本文件中读取字符串,每次调用读取一行 1.9
    __FileToString 把文件读取成一个字符串,每次调用都是读取整个文件 2.4
    __CSVRead 返回当前正在执行的线程的编号 1.9
    __XPath 使用 XPath 语法匹配 XML文件 2.0
    数据计算函数       __counter 计数器函数 1.9
    __intSum 对多个整数求和 1.8.1
    __longSum 长整型求和 2.3.2
    __Random 返回指定最大值和最小值之间的随机整数 1.9
    __RandomDate 返回给定开始日期和结束日期值之间的随机日期 3.3
    _RandomString 根据给定的字符生成指定长度的随机字符串 2.6
    __UUID 通用唯一标识符函数 2.9
    获取信息函数      __TestPlanName 返回当前测试计划的名称  
    __threadGroupName 返回当前线程组的名称 4.1
    __threadNum 返回当前正在执行的线程的编号 1.X
    __samplerName 返回当前请求的名称 2.5
    __log 输出日志信息 2.2
    __time 以多种格式返回当前时间 2.2

    2.1 数据计算函数 

    2.1.1 __counter

    作为一个计数器使用,支持多线程(多用户)。功能:这个函数是一个计数器,用于统计函数的使用次数,它从1开始,每调用这个函数一次它就会自动加1,它有两个参数,第一个参数是布尔型的, 只能设置成“TRUE”或者“FALSE”,如果是TRUE,那么每个用户有自己的计数器,可以用于统计每个线程歌执行了多少次。如果是FALSE,那就 使用全局计数器,可以统计出这次测试共运行了多少次。第二个参数是“函数名称”。

    1、我们先来看看这个__counter长得是啥样子,路径:函数助手 > 选择__counter ,如下图所示:

    2、关键参数说明

    TRUE, for each user to have own counter, FALSE for a global counter:计数变量i,

    Name of variable in which to store the result (optional):是否为线程计数器True/False

    3、实例

    ${__counter(FALSE,i)}; 全局计数器
    ${__counter(TRUE,i)}; 每个用户有自己的计数器

    注意:

    • 每次调用该计数器函数都会产生一个新值,从1开始每次加1。
    • 计数器既可以被配置成针对每个虚拟用户是独立的,也可以被配置成所有虚拟用户公用的。
    • 如果每个虚拟用户的计数器是独立增长的,那么通常被用于记录测试计划运行了多少遍。全局计数器通常被用于记录发送了多少次请求。
    • 计数器使用一个整数值来记录,允许的最大值为 2,147,483,647。
    • 目前计数器函数实例是独立实现的(JMeter 2.1.1及其以前版本,使用一个固定的线程变量来跟踪每个用户的计数器,因此多个计数器函数会操作同一个值)。全局计数器(FALSE)的每个计数器实例都是独立维护的。
    • 该函数也有对应的配置元件:计数器,功能类似。
    2.1.2__intSum

      整数求和,多个数字之间用逗号分隔。用于计算多个整数的和,可以是计算正整数和负整数的和,它有N个参数,最少有3个参数,最多不限。最后一个参数是函数名称,前面的其它参 数是要求和的整数。这个函数在函数对话框中只显示3个参数,如果要计算多个整数,可以通过添加参数实现,不过最后一个参数一定要是函数名称。再添加的参数 会在函数名称后面,这个时候,需要我们手动将函数名称参数放到最后一个。

    1、我们先来看看这个__intSum长得是啥样子,路径:函数助手 > 选择__intSum ,如下图所示:

    函数 __intSum 可以被用来计算两个或者更多整数值的和。至少需要两个整数,如果指定变量名则名称中必须包含一个非数字字母,否则它会被当成另一个整数值,而被函数用于计算。

    注意:
    在 4.0 版本之前,当有多个整数时,要通过点击添加按钮来增加参数,但是需要注意的是,添加完参数后,点击 生成 的函数默认是把手动添加的函数放在后面,这时需要手动调整变量名的位置,把它放到最后,否则会报错。 在 4.0 版本之后,该问题已解决。

    4.0 之前版本添加多个整数示例如下:
    在这里插入图片描述在这里插入图片描述

    2.1.3__longSum

    该函数用来计算两个或更多长整型值的和,使用方法跟上面的 __intSum 函数一样,这里不再赘述。

    1、我们先来看看这个__longSum长得是啥样子,路径:函数助手 > 选择__longSum ,如下图所示:

    2、关键参数说明

    函数参数

    描述

    是否必需

    第1个参数

    第1个长整型值

    第2个参数

    第2个长整型值

    第n个参数

    第n个长整型值

    最后一个参数

    重用函数计算值的引用名。如果用户指 定了这一参数,那么引用名中必须包含一个 非数字字母,否则它会被当成另一个长整 型值,而被函数用于计算

    3、实例

    ${__longSum(1,2,sum)}

    2.1.4__Random

    随机数函数返回指定最大值和最小值之间的随机整数。_Random函数是从某数据段随机读取数据替换参数,当需要添加多条数据记录且某些字段需要唯一性时使用,使用该函数随机生成的数据是数字。

    Tips:一般在新增的时候,固定字符串后加个随机数,避免重复。当我们设置的线程数超过随机数范围时,随机数将会重复生成

    1、我们先来看看这个__Random长得是啥样子,路径:函数助手 > 选择__Random ,如下图所示:

    2、关键参数说明

    一个范围内的最小值:即我们所要取的随机数的最小值,上述设置为1,生成的随机数将不会小于1

    一个范围内允许的最大值:即我们所要取的随机数的最大值,上述设置为100,生成的随机数将不能超过100

    Name of variable in which to store the result(optional)为函数名称名称:这里我们设置为random,即用于存储在测试计划中其他的方式使用的值 

    3、实例

    返回 0--10 之间的随机整数:
    ${__Random(1,10,var)}

    2.1.5__RandomDate

    返回位于给定开始日期和结束日期值之间的随机日期。

    1、我们先来看看这个__Randomdate长得是啥样子,路径:函数助手 > 选择__Randomdate,如下图所示:

    2、关键参数说明

    Format string for DateTimeFormatter (optional) (default yyyy-MM-dd):日期格式化方法,默认为yyyy-MM-dd;

    Start date (optional) (default: now):为开始日期,格式必须和日期格式化方法一致,如格式化方法不填,则此处格式需为2018-02-03,如不填则默认为现在;

    End date:和Start date类似,但是此项必填;

    String format of a locale (ex: fr_FR , en_EN) (optional):日期相关的地区信息,可以不填;

    Name of variable in which to store the result (optional):参数名称,也可以不填;

    3、实例

    示例:

    ${__RandomDate(,,2050-07-08,,)} 随机返回一个从现在到 2050-07-08 的日期,例如 2039-06-21

    ${__RandomDate(dd MM yyyy,,08 07 2050,,)} 返回带有自定义格式的随机日期,如 04 03 2034

    2.1.6_RandomString

    根据给定的字符,生成指定长度的随机字符串。

    1、我们先来看看这个__RandomString长得是啥样子,路径:函数助手 > 选择__RandomString ,如下图所示:

    2、关键参数说明

    Random string length生成的随机字符的长度

    Chars to use for random string generation用来生成随机字符串的字符,可以是纯数字,纯字符,字符字母数字组合。

    Name of variable in which to store the result (optional)保存结果的变量

    3、实例

    例如:
    ${__RandomString(6,abcdefgh1234566,ranstr)}
    随机生成一个6位长度的字符串,并保存在变量 ranstr 中,后续可以通过 ${ranstr} 来调用。

    2.1.7__UUID

    通用唯一标识符函数,生成一个32位不重复的随机字符串。

    1、我们先来看看这个__UUID长得是啥样子,路径:函数助手 > 选择__UUID ,如下图所示:

    2、示例:

    ${__UUID()}
    返回结果类似:c69e0dd1-ac6b-4f2b-8d59-5d4e8743eecd

    2.2获取信息函数

    2.2.1__TestPlanName

    用法:${__TestPlanName},返回当前测试计划的名称;

    如:测试计划名称是 Demo.jmx, 即返回 Demo.jmx。注意:Save Test plan before calling __TestPlanName function(调用此函数时,必须先保存一个测试计划)

    1、我们先来看看这个__TestPlanName长得是啥样子,路径:函数助手 > 选择__TestPlanName ,如下图所示:

    2、实例

    2.2.2__threadGroupName

    用法:${__threadGroupName},返回当前线程组的名称,从 4.1 版本开始启用。

    该函数不能用在任何配置元件中(如用户定义的变量),因为配置元件是由另外的独立线程运行的,它也不能在测试计划(Test Plan)中使用。

    1、我们先来看看这个__threadGroupName长得是啥样子,路径:函数助手 > 选择__threadGroupName,如下图所示:

    2.2.3__threadNum

    用法:${__threadNum},返回当前正在执行的线程的编号,而且不依赖于线程组;

    也就是说以这个函数的结果来看,不能区别线程组1的线程#1 和 线程组2的线程#1,如下图所示:
    在这里插入图片描述

    不能用在配置元件 和 测试计划中。

    1、我们先来看看这个__threadNum长得是啥样子,路径:函数助手 > 选择__threadNum,如下图所示:

    2.2.4__samplerName

    用法:${__samplerName()},返回当前请求的名称。获取当前按sampler的名称。

    1、我们先来看看这个__samplerName长得是啥样子,路径:函数助手 > 选择__samplerName ,如下图所示:

    2.2.5__log

    记录一条日志,并返回函数的输入字符串。

    1、我们先来看看这个__log长得是啥样子,路径:函数助手 > 选择__log ,如下图所示:

    可以设置不同的日志级别,如 OUT 和 ERR 将会分别输出记录到 System.out 和 System.err 中。在这种情况下,输出总是会被打印(它不依赖于当前的日志设置)。

    示例:

    ${__log(Message)}:写入日志文件,形如 "...thread Name : Message"。
    
    ${__log(Message,OUT)}:写到控制台窗口。
    
    ${__log(${VAR},,,VAR=)}:写入日志文件,形如"...thread Name VAR=value"。
    2.2.6__time

    以多种格式返回当前时间;返回当前时间,可指定返回格式,由SimpleDateFormat类处理函数格式

    • 年:yyyy
    • 月:MM
    • 日:dd
    • 时:hh
    • 分:mm
    • 秒:ss

    如果省略了格式字符串,那么函数会以毫秒的形式返回当前时间。其他情况下,当前时间会被转成简单日期格式。

    jmeter 中默认定义的时间格式属性值有:

    YMD = yyyyMMdd。
    HMS = HHmmss。
    YMDHMS = yyyyMMdd-HHmmss。
    USER1 = JMeter属性time.USER1。
    USER2 = JMeter属性time.USER2。
    用户可以通过修改JMeter属性来改变默认格式,例如,time.YMD=yyMMdd。

    1、我们先来看看这个__time长得是啥样子,路径:函数助手 > 选择__time ,如下图所示:

    2、关键参数说明

    Format string for DateTimeFormatter (optional) (default yyyy-MM-dd):日期格式化方法,默认为yyyy-MM-dd;

    Name of variable in which to store the result (optional):参数名称,也可以不填;

    3、实例

    使用示例:

    ${__time()} 返回'1548133155699'

    ${__time(YMD,)} 返回'20190122'

    ${__time(dd/MM/yyyy,)} 返回'22/01/2019'

    3.小结

    好了,今天到这里JMeter5的函数中篇就介绍和分享完了

  • 相关阅读:
    【网络公开课总结】砸蛋中奖效果
    【网络收集】如何修改vs tfs的登录名和密码 .
    在rdlc 中 显示成 yyyy年MM月dd日
    sql 将某一列的值拼接成字符串
    【网络收集】获取JavaScript 的时间使用内置的Date函数完成
    处理传递过来的拼接的值,中间用逗号相隔
    行列转换 pivot
    【网络收集】存储过程中自动生成主键
    Java多线程基础知识整理二
    Java多线程基础知识整理
  • 原文地址:https://www.cnblogs.com/lirongyang/p/14116038.html
Copyright © 2011-2022 走看看