每天15分钟JMeter入门篇(四):认识JMeter中的函数

本文介绍了JMeter中函数的使用,包括系统函数、数据处理函数和BeanShell函数,以及如何通过函数助手快速生成和使用函数。还列举了多个常用函数,如计数器、CSV数据读取、日期时间转换等,帮助读者掌握JMeter脚本参数化和数据处理技巧。
摘要由CSDN通过智能技术生成

其他文章

每天15分钟JMeter入门篇(一):Hello JMeter
每天15分钟JMeter入门篇(二):使用JMeter实现并发测试
每天15分钟JMeter入门篇(三):认识JMeter的逻辑控制器
每天15分钟JMeter入门篇(四):认识JMeter中的函数
每天15分钟JMeter入门篇(五):认识JMeter中的Test Fragment
每天15分钟JMeter入门篇(六):学会用好JMeter中的断言
每天15分钟JMeter入门篇(七):认识JMeter中的监听器
每天15分钟JMeter进阶篇(1):JAVA 取样器的基本使用


每天15分钟JMeter入门篇(四):认识JMeter中的函数



前言

通过本章的内容,你可以:

  1. 了解JMeter的公式
  2. 了解JMeter中公式的用法
  3. 在实际的测试脚本中使用公式

让我们开始吧

了解JMeter中的公式

用过excel的人都应该知道,excel最强大的功能之一就是它丰富的公式,利用公式你甚至可以用excel实现简单数据库的功能,其实我真的见到过有拿csv给客户做数据存储的,而且做的非常棒。在JMeter中公式也同样起到很重要的作用,通过公式,你可以实现脚本的参数化,你可以快速的处理数据,你甚至可以像javascript的eval那样执行表达式。JMeter的函数是它强大的原因之一

JMeter函数介绍

JMeter使用函数的方法很简单,在脚本的任意位置都可以用${__function()}这种形式来调用一个函数,function是函数名
除了手写函数,JMeter还可以用函数助手来快速生成所需要的函数,生成后可以拷贝到脚本中。
JMeter的函数从用途上可以分为三类,一是系统函数,用来获取JMeter各种运行时状态和属性,例如线程名称、客户端机器IP等,二是数据处理函数,例如生成随机数、时期函数等;三是BeanShell函数,将它单独作为一个类别,就是因为它能执行表达式,和其他任何函数的用途都不一样;

函数助手

工具栏上点击【工具】——【函数助手】,可以打开函数助手对话框,如图:
在这里插入图片描述
函数助手的使用还是比较简单的,首先选择要生成的函数,然后在“函数参数”中分别设置函数的参数,点击生成可以生成函数的字符串,复制粘贴到i脚本中即可,下面有预览函数的结果,

函数一览

掌握函数的重点是了解函数的用法。你可以不用死记硬背每个函数的参数、解释、定义,但是你需要了解JMeter有哪些函数,他们能干什么。例如你可以不用死记JMeter有哪些日期函数,函数有什么参数,你只需要知道【JMeter提供了日期函数,它能处理日期】就足够了,具体的用法在网络上或者官方文档里都能找到
整理函数列表时,使用的版本是5.4.1,如果你的版本是5.2及以上,那么是包含以下这些函数的,以下是JMeter的函数列表

编号函数名称函数解释支持版本
1${__BeanShell(,)}beanshell函数执行一个表达式,也就是计算一个字符串,例如${__BeanShell(“aa” + “bb”},返回的结果就是aabb,BeanShell里的表达式也可以三目运算符或者逻辑表达式1.x
2${__changeCase(,)}返回一个字符串,该字符串按照给定的模式转换小写,例如
${__changeCase(小写转大写:aaaa,upper,)}返回AAAA,最后一个upper参数将小写转换成大写
${__changeCase(小写转大写:AAbbCC,lower,)}返回aabbcc,lower参数将大写转换成小写
${__changeCase(aa bb cc,CAPITALIZE,)}返回Aa bb cc,如果字符串以英文开头,则将第一个首字母转换成大写,其他都小写,如果不是英文开头,则不做任何处理。
4.0
3${__char()}把一组数字转成Unicode字符,例如${__char(65)},结果就是A2.3.3
4${__counter(,)}顾名思义它是个计数器,最常用的场景就是记录线程迭代的次数,也就是执行次数。例如对于异步等待的尝尽个,我们不可能永远等待,这时可以用count函数统计迭代次数,超过阈值则退出循环。第一个参数为true则是每个线程独立的计数器;为false则是全局的,会把所有线程的结果合并到一起1.x
5${__CSVRead(,)}从csv文件中读取指定列的值,可以读取固定值和动态值。${__CSVRead(“d:/test/data.csv”,0)}读取文件第0行第0列(也就是第一行第一列)的值,多次迭代仍然是第一行,${__CSVRead(“d:/test/data.csv”,0)} ${__CSVRead("d:/test/data.csv”,next)}是顺序读取第一列的值,每次迭代会读取下一行,之所以有那个0的调用,是因为要告诉JMeter先读取第一行然后顺序next读取。next也可以换成*别名的方式,例如${__CSVRead(d:/test/data.csv,*data)},此时在脚本中的而难以位置,我们都可以用${__CSVRead(*data,1)}来读取数据了。1.9
6${__dateTimeConvert(,)}将一个时间戳,从源格式转换成指定的目标格式,例如${__dateTimeConvert(01212018,MMddyyyy,dd/MM/yyyy,)},其中01是月份,21是DD,2018是yyyy,这时函数会按照给定的MMddyyyy解析,并转换成21/01/2018的是返回,如果源格式为空,则字符串必须是一个epoch time,也就是Linux时间戳4.0
7${__digest(,)}使用给定的加密算法,返回加密后的字符串,例如、${__digest(md5,hello,)},返回字符串5d41402abc4b2a76b9719d911017c592。目前该函数支持的加密算法包括:MD2,MD5,SHA-1,SHA-224,SHA-256,SHA-384,SHA-5124.0
8${__escapeHtml()}把字符转换成html格式的字符串,简单的说就是转义。例如${__escapeHtml(")}的结果就是" ,在涉及到响应报文处理和解析的时候,这个函数很好用。2.3.3
9${__eval()}用来返回一个表达式的值,它最常见的做法是嵌套的引用表达式,直接用官方的例子更通俗易读
name=Smith
column=age
table=birthdays
SQL=select ${column} from ${table} where name=‘${name}’
这个时候你写${__eval(${SQL})},最后得到的结果就是完整的SQL:select age from birthdays where name=‘Smith’,之前的$变量都已经换成了常量,这就是所谓的嵌套引用表达式,你定义的表达式在eval中都被“计算”了
2.3.1
10${__evalVar()}用途和eval类似,区别在于evalvar可以定义一个变量,将表达式计算的结果存储在变量中供sampler取样器引用2.3.1
11${__FileToString(,)}读取一个文件的内容,例如${__FileToString(d:/test.log,utf-8,context)},该函数读取test.log的内容,并存储到变量context中,编码是utf-8,之后其他取样器就可以通过${context}来引用文件的内容了2.4
12${__groovy(,)}执行给定的groovy脚本3.1
13${__intSum(,)}用来对整数求和,多个整数可以累加,用逗号分隔1.8.1
14${__isPropDefined()}测试一个属性是否存在,再用JMeter构筑执行平台的时候会很有4.0
15${__isVarDefined()}测试一个变量是否存在4.0
16${__javaScript(,)}用来返回javascript脚本的执行结果,可以存储在变量中供其他的取样器调用1.9
17${__jexl2(,)}提供对JEXL表达式的支持,JEXL2是对Commons JEXL 2支持2.1.1
18${__jexl3(,)}提供对Commons JEXL 3的支持3.0
19${__log(,)}日志方法,返回输入字符串的信息,并且输出日志2.2
20${__logn(,)}同log,知识它不返回结果2.2
21${__longSum(,)}用来对长整数求和2.3.2
22${__machineIP()}返回本机IP,注意返回的是当前JMeter执行时所在机器的IP。2.6
23${__machineName()}返回本机机器名1.x
24${__P(,)}获取属性的函数,例如我们在命令行下启动JMeter,会希望通过命令行给JMeter传递参数,那么在命令行里写参数,运行时就可以用${__P()}来获取参数2.0
25${__property(,)}获取JMeter的属性,能获取到的范围为%JMETER_HOME%\bin\jmeter.properties中的值2.0
26${__Random(,)}生成随机数并保存到变量1.9
27${__RandomDate(,)}根据给定的时间范围,生成一个范围内的随机时间,该函数在压测需要对时间进行参数化的时候经常用到3.3
28${__RandomFromMultipleVars(,)}一个很魔性的函数,它的作用是从给定的变量中随机取值。例如你增加一个”用户定义的变量“,在里面设置5个变量分别为v1,v2,v3…v5,然后你写${__RandomFromMultipleVars(v1v2
29${__RandomString(,)}生成随机字符串2.6
30${__regexFunction(,)}正则表达式提取函数。例如你又一个HTTP取样器,执行后返回了报文,此时可以用它来匹配返回值,你可以把它理解为后置处理器中的正则表达式1.x
31${__samplerName()}获取当前sampler的名称,sampler就是取样器2.5
32${__setProperty(,)}用来动态设置JMeter的属性2.1
33${__split(,)}用来拆分字符串,作用和JAVA的split一样,拆分后是一个数组,保存在变量中2.0.2
34${__StringFromFile(,)}从文件中读取内容,一行一行的读取。读完完成后会从第一行开始重新读取,但是要特别注意的是,如果脚本有多个__StringFromFile,那么每个__StringFromFile都会打开一次文件。因此这个函数不适应用的太多。如果要读取数据文件,可以考虑csv data set config元件1.9
35${__StringToFile(,)}将一个字符串写入指定的文件,该函数从5.2开始提供,省去自己用BeanShell写IO了。5.2
36${__TestPlanName}返回当前测试计划的名称2.6
37${__threadGroupName}返回当前线程组的名称4.1
38${__threadNum}返回线程号1.x
40${__time(,)}返回当前时间,可以指定返回时间格式2.2
41${__timeShift(,)}该函数返回指定格式的日期,并添加秒、分钟、小时、天、月、或者年。例如${__timeShift(dd/MM/yyyy,21/01/2018,P2D,)}返回23/01/20183.3
42${__unescape()}返转escape字符,2.3.3
43${__unescapeHtml()}该函数反转url链接中的Unicode编码字符例如"转成"2.3.3
44${__urldecode()}反转url链接中的Unicode字符,例如%22转换成"2.10
45${__urlencode()}把url链接中的escap字符转换成Unicode编码,例如${__urlencode(Word “school” is “école” in french)},转换成Word+%22school%22+is+%22%C3%A9cole%22+in+french2.10
46${__UUID}返回为以后的uuid字符串2.9
47${__V(,)}执行变量表达式并返回结果2.3RC3
48${__XPath(,)}可以从xml格式的文件中匹配内容2.0.3
49${__escapeOroRegexpChars(,)}把正则表达式转换成JAVA正则引擎能够识别的表达式,按照文档,转换过程中使用了ORO正则表达式库。2.9
  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

低音钢琴

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值