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


其他文章

每天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中的函数

  • 前言
  • 了解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函数,将它单独作为一个类别,就是因为它能执行表达式,和其他任何函数的用途都不一样;

函数助手

工具栏上点击【工具】——【函数助手】,可以打开函数助手对话框,如图:
每天15分钟JMeter入门篇(四):认识JMeter中的函数_第1张图片
函数助手的使用还是比较简单的,首先选择要生成的函数,然后在“函数参数”中分别设置函数的参数,点击生成可以生成函数的字符串,复制粘贴到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)},结果就是A 2.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-512 4.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(v1 v2
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/2018 3.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+french 2.10
46 ${__UUID} 返回为以后的uuid字符串 2.9
47 ${__V(,)} 执行变量表达式并返回结果 2.3RC3
48 ${__XPath(,)} 可以从xml格式的文件中匹配内容 2.0.3
49 ${__escapeOroRegexpChars(,)} 把正则表达式转换成JAVA正则引擎能够识别的表达式,按照文档,转换过程中使用了ORO正则表达式库。 2.9

你可能感兴趣的:(#,从零开始JMeter,性能测试,jmeter)